ctdb-common: Fix compilation issue with strncpy()
authorMartin Schwenke <martin@meltin.net>
Thu, 26 Jul 2018 01:00:28 +0000 (11:00 +1000)
committerAmitay Isaacs <amitay@samba.org>
Fri, 27 Jul 2018 03:45:20 +0000 (05:45 +0200)
When configured with --picky-developer and using -O3 with gcc 8.1:

../common/system_socket.c: In function ‘parse_ip_mask’:
../common/system_socket.c:229:2: error: ‘strncpy’ specified bound depends on the length of the source argument [-Werror=stringop-overflow=]
  strncpy(s, str, len+1);
  ^~~~~~~~~~~~~~~~~~~~~~
../common/system_socket.c:223:8: note: length computed here
  len = strlen(str);
        ^~~~~~~~~~~

Use strlcpy() instead and check the result.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=13545

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/common/system_socket.c

index d8627fd61fc07342eaf047760ebfe8bd7def7bf6..843e5d74816f69902942a7184eb304bb26e8146e 100644 (file)
@@ -220,14 +220,12 @@ bool parse_ip_mask(const char *str,
 
        ZERO_STRUCT(*addr);
 
-       len = strlen(str);
+       len = strlcpy(s, str, sizeof(s));
        if (len >= sizeof(s)) {
                DBG_ERR("Address %s is unreasonably long\n", str);
                return false;
        }
 
-       strncpy(s, str, len+1);
-
        p = rindex(s, '/');
        if (p == NULL) {
                DBG_ERR("Address %s does not contain a mask\n", s);