From ea5a4bb0f2c6a869919e5105b98a45c62cfd70e6 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Fri, 10 Apr 2026 11:03:00 +1000 Subject: conf: Rework checking for garbage after a range After parsing port ranges conf_ports_spec() checks if we've reached a chunk delimiter (',') to verify that there isn't extra garbage there. Rework how we do this to use the recently introduced chunk-end pointer. This has two advantages: 1) Small, but practical: we don't need to repeat what the valid delimiters are, that's already handled in the chunk splitting code. 2) Large, if theoretical: this will also give an error if port parsing overruns a chunk boundary. We don't really expect that to happen, but it would be very confusing if it did. strtoul(3), on which parse_port_range() is based does say it may accept thousands separators based on locale which means we can't be sure it will only accept strings of digits. Signed-off-by: David Gibson Signed-off-by: Stefano Brivio --- conf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf.c b/conf.c index 91a6f80..cea124a 100644 --- a/conf.c +++ b/conf.c @@ -264,7 +264,7 @@ static void conf_ports_spec(const struct ctx *c, if (parse_port_range(p, &p, &xrange)) goto bad; - if ((*p != '\0') && (*p != ',')) /* Garbage after the range */ + if (p != ep) /* Garbage after the range */ goto bad; for (i = xrange.first; i <= xrange.last; i++) @@ -303,7 +303,7 @@ static void conf_ports_spec(const struct ctx *c, mapped_range = orig_range; } - if ((*p != '\0') && (*p != ',')) /* Garbage after the ranges */ + if (p != ep) /* Garbage after the ranges */ goto bad; if (orig_range.first == 0) { -- cgit v1.2.3