From 760852b6dca18a5acaf19d9cda328321fea1e6f1 Mon Sep 17 00:00:00 2001 From: 0x1eef <0x1eef@protonmail.com> Date: Wed, 20 Sep 2023 12:20:26 -0300 Subject: [PATCH] isinetaddr4: treat last octet as less of a special case --- src/isinetaddr4.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/isinetaddr4.c b/src/isinetaddr4.c index 0417ba1..814ab76 100644 --- a/src/isinetaddr4.c +++ b/src/isinetaddr4.c @@ -22,14 +22,11 @@ isinetaddr4(const char *str) buf[MAX_BUFLEN] = '\0'; for (size_t l = 0; l < len; l++) { if (str[l] == SEP) { - if (buflen == 0) { - return 0; - } else if (!in_range(buf)) { + if (octets == MAX_OCTETS || buflen == 0) { return 0; } else { buflen = 0; bzero(buf, MAX_BUFLEN); - octets++; } } else if (isdigit(str[l])) { if (buflen == MAX_BUFLEN) { @@ -37,13 +34,19 @@ isinetaddr4(const char *str) } else { buf[buflen++] = str[l]; digits++; + if (!in_range(buf)) { + return 0; + } } } else { return 0; } + if (str[l-1] == SEP) { + octets++; + } } if (octets == MAX_OCTETS) { - return digits <= MAX_DIGITLEN && buflen > 0 && in_range(buf); + return digits <= MAX_DIGITLEN; } else { return 0; }