summaryrefslogtreecommitdiff
path: root/json.c
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2018-06-15 11:30:04 -0700
committerGary E. Miller <gem@rellim.com>2018-06-15 11:30:04 -0700
commita399e85c1201400e281f2c1dc29dde21c29b0088 (patch)
tree4fb7e0777f29d516844e493325e17cbe4cc41dc8 /json.c
parent909162bf4df662902ebeb3b7718e84c04e097913 (diff)
downloadgpsd-a399e85c1201400e281f2c1dc29dde21c29b0088.tar.gz
json.c: ECMA-404 says JSON \u must have 4 hex digits
ECMA-404 says \u generates UNICODE, but json.c limits it to latin1 (0 to 0xff).
Diffstat (limited to 'json.c')
-rw-r--r--json.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/json.c b/json.c
index 1d3c4cd9..ab1fa406 100644
--- a/json.c
+++ b/json.c
@@ -403,10 +403,11 @@ static int json_internal_read_object(const char *cp,
uescape[n] = *cp++;
uescape[n] = '\0'; /* terminate */
--cp;
- if (1 != sscanf(uescape, "%4x", &u)) {
+ /* ECMA-404 says JSON \u must have 4 hex digits */
+ if ((4 != n) || (1 != sscanf(uescape, "%4x", &u))) {
return JSON_ERR_BADSTRING;
}
- *pval++ = (unsigned char)u; /* will truncate values above 0xff */
+ *pval++ = (unsigned char)u; /* truncate values above 0xff */
break;
default: /* handles double quote and solidus */
*pval++ = *cp;