json-lex-string-lookahead-speed.diff
text/x-diff
Filename: json-lex-string-lookahead-speed.diff
Type: text/x-diff
Part: 0
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/common/jsonapi.c | 16 | 1 |
diff --git i/src/common/jsonapi.c w/src/common/jsonapi.c
index 98e4ef09426..63d92c66aec 100644
--- i/src/common/jsonapi.c
+++ w/src/common/jsonapi.c
@@ -858,10 +858,25 @@ json_lex_string(JsonLexContext *lex)
}
else if (lex->strval != NULL)
{
+ size_t chunklen = 1;
+
if (hi_surrogate != -1)
return JSON_UNICODE_LOW_SURROGATE;
- appendStringInfoChar(lex->strval, *s);
+ while (len + chunklen < lex->input_length)
+ {
+ char next = *(s + chunklen);
+
+ if (next == '\\' || next == '"' || (unsigned char) next < 32)
+ break;
+
+ chunklen++;
+ }
+
+ appendBinaryStringInfo(lex->strval, s, chunklen);
+
+ s += (chunklen - 1);
+ len += (chunklen - 1);
}
}