From 48d4c180355258edf63b72e566846e9c5a8c7f32 Mon Sep 17 00:00:00 2001 From: June McEnroe Date: Fri, 17 Jun 2022 23:08:13 -0400 Subject: edit: Validate size is power of two --- extra/edit/edit.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/extra/edit/edit.c b/extra/edit/edit.c index 51c913c..793e413 100644 --- a/extra/edit/edit.c +++ b/extra/edit/edit.c @@ -236,7 +236,6 @@ static const char *Boolean[] = { "no-names", "no-sts", "palaver", "sasl-external", "verbose", }; -// FIXME: size needs to be validated for power of two static const char *Integer[] = { "local-port", "port", "queue-interval", "size", }; @@ -290,8 +289,12 @@ static const char *validate(const char *name, const char *value) { if (!safe(name)) return "cannot be set"; if (!value) return "requires a value"; char *end; - strtoul(value, &end, 10); - return (!*value || *end ? "must be an integer" : NULL); + size_t n = strtoull(value, &end, 10); + if (!*value || *end) return "must be an integer"; + if (!strcmp(name, "size") && (!n || n & (n-1))) { + return "must be a power of two"; + } + return NULL; } for (size_t i = 0; i < ARRAY_LEN(String); ++i) { if (strcmp(String[i], name)) continue; -- cgit 1.4.1