From: Roy Marples Date: Fri, 16 Jun 2017 09:19:57 +0000 (+0100) Subject: Check return values of snprintf and print_option correctly. X-Git-Tag: v7.0.0-rc2~43 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6b994c52e8c81f229ddf4f7f70e2b321de3fa5c5;p=thirdparty%2Fdhcpcd.git Check return values of snprintf and print_option correctly. --- diff --git a/src/dhcp-common.c b/src/dhcp-common.c index 18e69637..c40ca0be 100644 --- a/src/dhcp-common.c +++ b/src/dhcp-common.c @@ -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); + r = 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; }