]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: mworker: fix mworker-max-reloads parser
authorValentine Krasnobaeva <vkrasnobaeva@haproxy.com>
Sat, 12 Oct 2024 12:02:53 +0000 (14:02 +0200)
committerWilliam Lallemand <wlallemand@haproxy.com>
Mon, 21 Oct 2024 08:46:58 +0000 (10:46 +0200)
Before this patch, when wrong argument was provided in the configuration for
mworker-max-reloads keyword, parser shows these errors below on the stderr:

[WARNING]  (1820317) : config : parsing [haproxy.cfg:154] : (null)parsing [haproxy.cfg:154] : 'mworker-max-reloads' expects an integer argument.

In a case, when by mistake two arguments were provided instead of one, this has
also triggered a buggy error message:

[ALERT]    (1820668) : config : parsing [haproxy.cfg:154] : 'mworker-max-reloads' cannot handle unexpected argument '45'.
[WARNING]  (1820668) : config : parsing [haproxy.cfg:154] : (null)

So, as 'mworker-max-reloads' is parsed in discovery mode by master process
let's align now its parser with all others, which could be called for this
mode. Like this in cases, when there are too many args or argument isn't a
valid integer we return proper error codes to global section parser and
messages are formated properly.

This fix should be backported in all stable versions.

src/mworker.c

index 29bf80cbf4a6d730e558575174ebf5564d8a3ff7..a311e76fc5bbd74f1752710faca5c3f0998e9ec0 100644 (file)
@@ -802,29 +802,29 @@ static int cli_io_handler_show_loadstatus(struct appctx *appctx)
 static int mworker_parse_global_max_reloads(char **args, int section_type, struct proxy *curpx,
            const struct proxy *defpx, const char *file, int linenum, char **err)
 {
-
-       int err_code = 0;
        if (!(global.mode & MODE_DISCOVERY))
                return 0;
 
-       if (alertif_too_many_args(1, file, linenum, args, &err_code))
-               goto out;
+       if (strcmp(args[0], "mworker-max-reloads") == 0) {
+               if (too_many_args(1, args, err, NULL))
+                       return -1;
 
-       if (*(args[1]) == 0) {
-               memprintf(err, "%sparsing [%s:%d] : '%s' expects an integer argument.\n", *err, file, linenum, args[0]);
-               err_code |= ERR_ALERT | ERR_FATAL;
-               goto out;
-       }
+               if (*(args[1]) == 0) {
+                       memprintf(err, "'%s' expects an integer argument.", args[0]);
+                       return -1;
+               }
 
-       max_reloads = atol(args[1]);
-       if (max_reloads < 0) {
-               memprintf(err, "%sparsing [%s:%d] '%s' : invalid value %d, must be >= 0", *err, file, linenum, args[0], max_reloads);
-               err_code |= ERR_ALERT | ERR_FATAL;
-               goto out;
+               max_reloads = atol(args[1]);
+               if (max_reloads < 0) {
+                       memprintf(err, "'%s' expects a positive value or zero.", args[0]);
+                       return -1;
+               }
+       } else {
+               BUG_ON(1, "Triggered in mworker_parse_global_max_reloads() by unsupported keyword.\n");
+               return -1;
        }
 
-out:
-       return err_code;
+       return 0;
 }
 
 void mworker_free_child(struct mworker_proc *child)