From e843208299db9a2ebf3b22e21e1a6d33cfdc35af Mon Sep 17 00:00:00 2001 From: Quentin Young Date: Mon, 7 Oct 2019 15:36:39 +0000 Subject: [PATCH] lib: reject leading 0 in ipv4 decimal quad 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 --- lib/command_match.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/command_match.c b/lib/command_match.c index 26d763849de9..0195aebc17f7 100644 --- a/lib/command_match.c +++ b/lib/command_match.c @@ -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) {