From: Lennart Poettering Date: Mon, 2 Jul 2018 16:50:25 +0000 (+0200) Subject: parse-util: in parse_permille() check negative earlier X-Git-Tag: v240~893^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8cbc92d5975b603002c3141364a7709a9c66e23a;p=thirdparty%2Fsystemd.git parse-util: in parse_permille() check negative earlier If 'v' is negative, it's wrong to add the decimal to it, as we'd actually need to subtract it in this case. But given that we don't want to allow negative vaues anyway, simply check earlier whether what we have parsed so far was negative, and react to that before adding the decimal to it. --- diff --git a/src/basic/parse-util.c b/src/basic/parse-util.c index 6becf85878b..db38f91c832 100644 --- a/src/basic/parse-util.c +++ b/src/basic/parse-util.c @@ -637,6 +637,8 @@ int parse_permille_unbounded(const char *p) { r = safe_atoi(n, &v); if (r < 0) return r; + if (v < 0) + return -ERANGE; } else { pc = endswith(p, "%"); if (!pc) @@ -657,15 +659,14 @@ int parse_permille_unbounded(const char *p) { r = safe_atoi(n, &v); if (r < 0) return r; + if (v < 0) + return -ERANGE; if (v > (INT_MAX - q) / 10) return -ERANGE; v = v * 10 + q; } - if (v < 0) - return -ERANGE; - return v; }