From: Chad Lavoie Date: Tue, 4 Oct 2016 20:10:40 +0000 (-0400) Subject: MINOR: stats: Escape equals sign on socket dump X-Git-Tag: v1.7-dev5~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1666930f031c5075d305cb58b5a06f8fc5e82089;p=thirdparty%2Fhaproxy.git MINOR: stats: Escape equals sign on socket dump Greetings, Was recently working with a stick table storing URL's and one had an equals sign in it (e.g. 127.0.0.1/f=ab) which made it difficult to easily split the key and value without a regex. This patch will change it so that the key looks like "key=127.0.0.1/f\=ab" instead of "key=127.0.0.1/f=ab". Not very important given that there are ways to work around it. Thanks, - Chad --- diff --git a/src/dumpstats.c b/src/dumpstats.c index 4647fb8491..8d43ce559c 100644 --- a/src/dumpstats.c +++ b/src/dumpstats.c @@ -639,7 +639,7 @@ static void stats_dump_csv_header() /* print a string of text buffer to . The format is : * Non-printable chars \t, \n, \r and \e are * encoded in C format. - * Other non-printable chars are encoded "\xHH". Space and '\' are also escaped. + * Other non-printable chars are encoded "\xHH". Space, '\', and '=' are also escaped. * Print stopped if null char or is reached, or if no more place in the chunk. */ static int dump_text(struct chunk *out, const char *buf, int bsize) @@ -649,12 +649,12 @@ static int dump_text(struct chunk *out, const char *buf, int bsize) while (buf[ptr] && ptr < bsize) { c = buf[ptr]; - if (isprint(c) && isascii(c) && c != '\\' && c != ' ') { + if (isprint(c) && isascii(c) && c != '\\' && c != ' ' && c != '=') { if (out->len > out->size - 1) break; out->str[out->len++] = c; } - else if (c == '\t' || c == '\n' || c == '\r' || c == '\e' || c == '\\' || c == ' ') { + else if (c == '\t' || c == '\n' || c == '\r' || c == '\e' || c == '\\' || c == ' ' || c == '=') { if (out->len > out->size - 2) break; out->str[out->len++] = '\\'; @@ -665,6 +665,7 @@ static int dump_text(struct chunk *out, const char *buf, int bsize) case '\r': c = 'r'; break; case '\e': c = 'e'; break; case '\\': c = '\\'; break; + case '=': c = '='; break; } out->str[out->len++] = c; }