From: Petr Machata Date: Thu, 12 Nov 2020 22:24:45 +0000 (+0100) Subject: lib: parse_mapping: Update argc, argv on error X-Git-Tag: v5.11.0~32^2~29^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bc3523ae701315a421db00ab1fd766f4845974c3;p=thirdparty%2Fiproute2.git lib: parse_mapping: Update argc, argv on error Currently argc and argv are not updated unless parsing of all of the mapping was successful. However in that case, "ip link" will point at the wrong argument when complaining: # ip link add name eth0.100 link eth0 type vlan id 100 egress 1:1 2:foo Error: argument "1" is wrong: invalid egress-qos-map Update argc and argv even in the case of parsing error, so that the right element is indicated. Signed-off-by: Petr Machata Signed-off-by: David Ahern --- diff --git a/lib/utils.c b/lib/utils.c index 1dfaaf564..67d64df7e 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -1770,6 +1770,7 @@ int parse_mapping(int *argcp, char ***argvp, { int argc = *argcp; char **argv = *argvp; + int ret = 0; while (argc > 0) { char *colon = strchr(*argv, ':'); @@ -1779,15 +1780,19 @@ int parse_mapping(int *argcp, char ***argvp, break; *colon = '\0'; - if (get_u32(&key, *argv, 0)) - return 1; - if (mapping_cb(key, colon + 1, mapping_cb_data)) - return 1; + if (get_u32(&key, *argv, 0)) { + ret = 1; + break; + } + if (mapping_cb(key, colon + 1, mapping_cb_data)) { + ret = 1; + break; + } argc--, argv++; } *argcp = argc; *argvp = argv; - return 0; + return ret; }