BUG/MEDIUM: mworker: execvp failure depending on argv[0]
The copy_argv() function lacks a check on '-' to remove the -x, -sf and
-st parameters.
When reloading a master process with a path starting by /st, /sf, or
/x.. the copy_argv() function skipped argv[0] leading to an execvp()
without the binary.
diff --git a/src/haproxy.c b/src/haproxy.c
index e98420e..20b18f8 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -1242,7 +1242,8 @@
while (i < argc) {
/* -sf or -st or -x */
- if ((argv[i][1] == 's' && (argv[i][2] == 'f' || argv[i][2] == 't')) || argv[i][1] == 'x' ) {
+ if (i > 0 && argv[i][0] == '-' &&
+ ((argv[i][1] == 's' && (argv[i][2] == 'f' || argv[i][2] == 't')) || argv[i][1] == 'x' )) {
/* list of pids to finish ('f') or terminate ('t') or unix socket (-x) */
i++;
while (i < argc && argv[i][0] != '-') {