]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Check return values of snprintf and print_option correctly.
authorRoy Marples <roy@marples.name>
Fri, 16 Jun 2017 09:19:57 +0000 (10:19 +0100)
committerRoy Marples <roy@marples.name>
Fri, 16 Jun 2017 09:19:57 +0000 (10:19 +0100)
src/dhcp-common.c

index 18e6963792ce951ae52e6cc92a74799d2a73d158..c40ca0be3a98545138f819fd93032cdf724019ae 100644 (file)
@@ -868,6 +868,7 @@ dhcp_envoption1(char **env, const char *prefix,
        ssize_t len;
        size_t e;
        char *v, *val;
+       int r;
 
        /* Ensure a valid length */
        ol = (size_t)dhcp_optlen(opt, ol);
@@ -890,11 +891,18 @@ dhcp_envoption1(char **env, const char *prefix,
        if (v == NULL)
                return 0;
        if (vname)
-               v += snprintf(val, e, "%s_%s=", prefix, opt->var);
+               = snprintf(val, e, "%s_%s=", prefix, opt->var);
        else
-               v += snprintf(val, e, "%s=", prefix);
-       if (len != 0)
-               print_option(v, (size_t)len + 1, opt, od, ol, ifname);
+               r = snprintf(val, e, "%s=", prefix);
+       if (r != -1 && len != 0) {
+               v += r;
+               if (print_option(v, (size_t)len + 1, opt, od, ol, ifname) == -1)
+                       r = -1;
+       }
+       if (r == -1) {
+               free(val);
+               return 0;
+       }
        return e;
 }