]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: cfgparse: visually show the input line on empty args
authorWilly Tarreau <w@1wt.eu>
Mon, 5 May 2025 14:13:33 +0000 (16:13 +0200)
committerWilly Tarreau <w@1wt.eu>
Mon, 5 May 2025 14:17:24 +0000 (16:17 +0200)
Now when an empty arg is found on a line, we emit the sanitized
input line and the position of the first empty arg so as to help
the user figure the cause (likely an empty environment variable).

Co-authored-by: Valentine Krasnobaeva <vkrasnobaeva@haproxy.com>
src/cfgparse.c

index 2123dd4c5d3328a9d31d6cfb14f121c38ba105ff..3421a09971e30f37a43f3f1c405206cbc9276ff8 100644 (file)
@@ -2066,11 +2066,17 @@ next_line:
                        }
 
                        for (check_arg = 0; check_arg < arg; check_arg++) {
-                               if (*args[check_arg])
-                                       continue;
-                               ha_warning("parsing [%s:%d]: argument number %d is empty and marks the end of the argument list; all subsequent arguments will be ignored.\n",
-                                          file, linenum, check_arg + 1);
-                               break;
+                               if (!*args[check_arg]) {
+                                       /* if an empty arg was found, its pointer is in <errptr> */
+                                       size_t newpos;
+
+                                       /* sanitize input line in-place */
+                                       newpos = sanitize_for_printing(line, errptr - line, 80);
+                                       ha_warning("parsing [%s:%d]: argument number %d at position %d is empty and marks the end of the "
+                                                  "argument list; all subsequent arguments will be ignored:\n  %s\n  %*s\n",
+                                                  file, linenum, check_arg + 1, (int)(errptr - thisline + 1), line, (int)(newpos+1), "^");
+                                       break;
+                               }
                        }
 
                        /* everything's OK */