BUG/MINOR: sample: fix the json converter's endian-sensitivity
authorWilly Tarreau <w@1wt.eu>
Tue, 25 Feb 2020 07:37:37 +0000 (08:37 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 28 Feb 2020 09:58:31 +0000 (10:58 +0100)
About every time there's a pointer cast in the code, there's a hidden
bug, and this one was no exception, as it passes the first octet of the
native representation of an integer as a single-character string, which
obviously only works on little endian machines. On big-endian machines,
something as simple as "str(foo),json" only returns zeroes.

This bug was introduced with the JSON converter in 1.6-dev1 by commit
317e1c4f1e ("MINOR: sample: add "json" converter"), the fix may be
backported to all stable branches.

(cherry picked from commit 5715da269d6ec1e178b04d1c7aa25982e10873d7)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>

src/sample.c

index 820fa47..891a222 100644 (file)
@@ -2064,7 +2064,8 @@ static int sample_conv_json(const struct arg *arg_p, struct sample *smp, void *p
                }
                else {
                        len = 1;
-                       str = (char *)&c;
+                       _str[0] = c;
+                       str = _str;
                }
 
                /* Check length */