aboutsummaryrefslogtreecommitdiffhomepage
path: root/json.c
diff options
context:
space:
mode:
authorGravatar Gregor Hoffleit <gregor@hoffleit.de>2010-03-04 11:40:03 +0100
committerGravatar Carl Worth <cworth@cworth.org>2010-04-13 08:30:40 -0700
commit4a442846926f7e3d1b30b7afac59dd1def0e5a41 (patch)
tree0c8f6a365bdfd342355ee85567bf914e91568cea /json.c
parent22d117d14497ddea11014cab2f25d1be57210de2 (diff)
Fix json_quote_str to handle non-ASCII characters
The current code in json_quote_str() only accepts strict printable ASCII code points (i.e. 32-127), all other code points are dropped from the JSON output. The code is attempting to drop only non-printable ASCII characters, but doing a signed comparison of the byte value is also dropping characters with values >= 128. This patch uses an unsigned comparison to accept code points 32-255. Reviewed-by: Carl Worth <cworth@cworth.org> (with some additional details for commit message).
Diffstat (limited to 'json.c')
-rw-r--r--json.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/json.c b/json.c
index f90b0fa2..1d0c1694 100644
--- a/json.c
+++ b/json.c
@@ -63,7 +63,7 @@ json_quote_chararray(const void *ctx, const char *str, const size_t len)
for (loop = 0, required = 0, ptr = str;
loop < len;
loop++, required++, ptr++) {
- if (*ptr < 32 || *ptr == '\"' || *ptr == '\\')
+ if ((unsigned char)(*ptr) < 32 || *ptr == '\"' || *ptr == '\\')
required++;
}
@@ -80,7 +80,7 @@ json_quote_chararray(const void *ctx, const char *str, const size_t len)
*ptr2++ = '\"';
for (loop = 0; loop < len; loop++) {
- if (*ptr > 31 && *ptr != '\"' && *ptr != '\\') {
+ if ((unsigned char)(*ptr) > 31 && *ptr != '\"' && *ptr != '\\') {
*ptr2++ = *ptr++;
} else {
*ptr2++ = '\\';