Fixed parsing of JSON encoded UTF-16 surrogate pairs.
This commit is contained in:
@@ -1375,31 +1375,28 @@ nxt_conf_json_parse_string(nxt_mp_t *mp, nxt_conf_value_t *value, u_char *start,
|
|||||||
|
|
||||||
p += 4;
|
p += 4;
|
||||||
|
|
||||||
if (utf < 0xd800 || utf > 0xdbff || utf_high) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
utf_high = utf;
|
|
||||||
utf = 0;
|
|
||||||
|
|
||||||
if (p[0] != '\\' || p[1] != 'u') {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
p += 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (utf_high != 0) {
|
if (utf_high != 0) {
|
||||||
if (nxt_slow_path(utf_high < 0xd800
|
if (nxt_slow_path(utf < 0xdc00 || utf > 0xdfff)) {
|
||||||
|| utf_high > 0xdbff
|
|
||||||
|| utf < 0xdc00
|
|
||||||
|| utf > 0xdfff))
|
|
||||||
{
|
|
||||||
/* Invalid surrogate pair. */
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
utf = ((utf_high - 0xd800) << 10) + (utf - 0xdc00);
|
utf = ((utf_high - 0xd800) << 10) + (utf - 0xdc00) + 0x10000;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (utf < 0xd800 || utf > 0xdfff) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (utf > 0xdbff || p[0] != '\\' || p[1] != 'u') {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
p += 2;
|
||||||
|
|
||||||
|
utf_high = utf;
|
||||||
|
utf = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
s = nxt_utf8_encode(s, utf);
|
s = nxt_utf8_encode(s, utf);
|
||||||
|
|||||||
Reference in New Issue
Block a user