From: Douglas Bagnall Date: Fri, 20 Jun 2014 02:33:53 +0000 (+1200) Subject: opt: always initialise values in set_llong_with_suffix() X-Git-Url: https://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=b377324e5c1ad356b535f4c3724251c626abdf40 opt: always initialise values in set_llong_with_suffix() The helper API functions based on set_llong_with_suffix() left the value uninitialised in the case of an empty string argument. This is quite unlikely to have caused problem in practice, as most values will have already been set to a default and the non-NULL error message should have triggered an early exit or some other emergency action. Nevertheless, it caused a compiler warning on some minor version of GCC 4.8 which I no longer seem to have, and the complaint seemed reasonable at the time. If an empty string (or any other non-numeric value) is passed to strtoll(), the result is zero. As far as I know, the strtoll() call is only short-circuited here to form a more specific error message, not because there is a good reason for the empty string to be a special non-initialising case. So let's set it to zero. Signed-off-by: Douglas Bagnall Signed-off-by: Rusty Russell --- diff --git a/ccan/opt/helpers.c b/ccan/opt/helpers.c index 747a78e9..e531a7d3 100644 --- a/ccan/opt/helpers.c +++ b/ccan/opt/helpers.c @@ -238,9 +238,10 @@ static char *set_llong_with_suffix(const char *arg, long long *ll, const long long base) { char *endp; - if (!arg[0]) + if (!arg[0]){ + *ll = 0; return arg_bad("'%s' (an empty string) is not a number", arg); - + } errno = 0; *ll = strtoll(arg, &endp, 0); if (errno)