From 5715da269d6ec1e178b04d1c7aa25982e10873d7 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 25 Feb 2020 08:37:37 +0100 Subject: [PATCH] BUG/MINOR: sample: fix the json converter's endian-sensitivity 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. --- src/sample.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sample.c b/src/sample.c index eb903ec6d..0fb5f9aa7 100644 --- a/src/sample.c +++ b/src/sample.c @@ -2058,7 +2058,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 */