]> git.puffer.fish Git - mirror/frr.git/commitdiff
lib: reject leading 0 in ipv4 decimal quad 5112/head
authorQuentin Young <qlyoung@cumulusnetworks.com>
Mon, 7 Oct 2019 15:36:39 +0000 (15:36 +0000)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Mon, 7 Oct 2019 15:36:39 +0000 (15:36 +0000)
inet_pton() is used to parse ipv4 addresses internally, therefore FRR
does not support octal notation for quads. The ipv4 cli token validator
should make sure that str2prefix() can parse tokens it allows, and
str2prefix uses inet_pton, so we have to disallow leading zeros in ipv4
quads.

In short, 1.1.1.01 is no longer valid and must be expressed as 1.1.1.1.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
lib/command_match.c

index 26d763849de9413a17af72862659bd294b16565b..0195aebc17f7fd0a76e3ff7e5e3ba5c959389497 100644 (file)
@@ -724,7 +724,12 @@ static enum match_type match_ipv4(const char *str)
                        return no_match;
 
                memcpy(buf, sp, str - sp);
-               if (atoi(buf) > 255)
+
+               int v = atoi(buf);
+
+               if (v > 255)
+                       return no_match;
+               if (v > 0 && buf[0] == '0')
                        return no_match;
 
                nums++;
@@ -775,7 +780,12 @@ static enum match_type match_ipv4_prefix(const char *str)
                        return no_match;
 
                memcpy(buf, sp, str - sp);
-               if (atoi(buf) > 255)
+
+               int v = atoi(buf);
+
+               if (v > 255)
+                       return no_match;
+               if (v > 0 && buf[0] == '0')
                        return no_match;
 
                if (dots == 3) {