BUG/MINOR: mworker/cli: fix the escaping in the master CLI

The master CLI must not do the escaping since it forwards the commands
to another CLI. It should be able to split into words by taking care of
the escaping, but must not remove the forwarded backslashes.

This fix do the same thing as the previous patch applied to the
cli_parse_request() function, by taking care of the escaping during the
word split, but it also remove the part which was removing the
backslashes from the forwarded command.

(cherry picked from commit fe249c3df53127d53d55c3fda8e6be7f22cfa58b)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit e302f6ad583f4332dbeeb7e9f73fe91e140966c1)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
diff --git a/src/cli.c b/src/cli.c
index 7d44946..fc7ef49 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -2128,29 +2128,25 @@
 
 	/* splits the command in words */
 	while (i < MAX_STATS_ARGS && p < end) {
-		int j, k;
-
 		/* skip leading spaces/tabs */
 		p += strspn(p, " \t");
 		if (!*p)
 			break;
 
 		args[i] = p;
-		p += strcspn(p, " \t");
-		*p++ = 0;
-
-		/* unescape backslashes (\) */
-		for (j = 0, k = 0; args[i][k]; k++) {
-			if (args[i][k] == '\\') {
-				if (args[i][k + 1] == '\\')
-					k++;
-				else
-					continue;
+		while (1) {
+			p += strcspn(p, " \t\\");
+			/* escaped chars using backlashes (\) */
+			if (*p == '\\') {
+				if (!*++p)
+					break;
+				if (!*++p)
+					break;
+			} else {
+				break;
 			}
-			args[i][j] = args[i][k];
-			j++;
 		}
-		args[i][j] = 0;
+		*p++ = 0;
 		i++;
 	}