From a997aac81cdda77028f74211cad2d07489854994 Mon Sep 17 00:00:00 2001 From: Ben Fuhrmannek Date: Sat, 7 Aug 2021 18:45:33 +0200 Subject: fixed cidr matching and test cases --- src/sp_network_utils.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/sp_network_utils.c') diff --git a/src/sp_network_utils.c b/src/sp_network_utils.c index 31e8426..5b4fd95 100644 --- a/src/sp_network_utils.c +++ b/src/sp_network_utils.c @@ -91,10 +91,13 @@ int get_ip_and_cidr(char *ip, sp_cidr *cidr) { return -1; } - if (sscanf(mask + 1, "%hhu", &(cidr->mask)) != 1) { + int masklen = strlen(mask+1); + int imask = atoi(mask+1); + if (masklen < 1 || masklen > 3 || !isdigit(*(mask+1)) || (masklen >= 2 && !isdigit(*(mask+2))) || (masklen == 3 && !isdigit(*(mask+3))) || imask < 0 || imask > 128) { sp_log_err("config", "'%s' isn't a valid network mask.", mask + 1); return -1; } + cidr->mask = (uint8_t)imask; ip[mask - ip] = '\0'; // NULL the '/' char @@ -113,5 +116,10 @@ int get_ip_and_cidr(char *ip, sp_cidr *cidr) { } ip[mask - ip] = '/'; + if (cidr->ip_version < 0) { + sp_log_err("cidr_match", "Weird ip (%s) family", ip); + return -1; + } + return 0; } -- cgit v1.3