commit: 2197d645dc0374208a65d8ea43a64d4cdff057af
parent f7230898c5138753810d4a660e66ad21c74fa9d4
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date: Sat, 18 Oct 2025 04:20:34 +0200
cidr2list: trim spaces after getline rather than in str_inet4
This way lines containing only spaces are skipped, and spaces within
an address is invalid.
Diffstat:
2 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/cidr2list.c b/cidr2list.c
@@ -67,15 +67,14 @@ str_inet4(const char *str, size_t size, struct inet4_cidr *res)
break;
}
- if(isspace(str[i])) continue;
-
fprintf(stderr, "cird2list: error: Invalid IPv4 address, found '%c' (0x%X)\n", str[i], str[i]);
return false;
}
if(di != 3)
{
- fprintf(stderr, "cird2list: error: Invalid IPv4 address, found %d dots, expected 3: %s\n", di, str);
+ fprintf(
+ stderr, "cird2list: error: Invalid IPv4 address, found %d dots, expected 3: %s\n", di, str);
return false;
}
@@ -109,13 +108,13 @@ str_inet4(const char *str, size_t size, struct inet4_cidr *res)
int
main(void)
{
- char *line = NULL;
- size_t linelen = 0;
+ char *buf = NULL;
+ size_t buflen = 0;
while(true)
{
errno = 0;
- ssize_t nread = getline(&line, &linelen, stdin);
+ ssize_t nread = getline(&buf, &buflen, stdin);
if(nread < 0)
{
if(errno == 0) break;
@@ -124,12 +123,20 @@ main(void)
return 1;
}
- if(line[nread - 1] == '\n') line[--nread] = '\0';
+ char *line = buf;
+ size_t linelen = nread;
+
+ // ltrim
+ while(line - buf < nread && isspace(*line))
+ line++, linelen--;
+ // rtrim
+ for(int i = linelen - 1; (i > 0) && isspace(line[i]); i--)
+ line[--linelen] = '\0';
- if(nread == 0) continue;
+ if(linelen <= 0) continue;
struct inet4_cidr addr;
- if(!str_inet4(line, (size_t)nread, &addr)) return 1;
+ if(!str_inet4(line, linelen, &addr)) return 1;
uint32_t start = addr.addr & addr.nmask;
#if 0
@@ -149,6 +156,6 @@ main(void)
}
}
- free(line);
+ free(buf);
return 0;
}
diff --git a/test.sh b/test.sh
@@ -29,4 +29,4 @@ t --input='192.168.0.43/31' 192.168.0.43/31 '192.168.0.42
t --input=192.168.0.42 nocidr '192.168.0.42
'
-t_cmd empty_lines 4 lines '' 192.168.0.42/31 '' 192.168.0.69/31 ''
+t_cmd empty_lines 4 lines ' ' 192.168.0.42/31 ' ' 192.168.0.69/31 ''