for (s = lex->token_start + 1; *s != '"'; ++s)
{
/* Per RFC4627, these characters MUST be escaped. */
- if (*s < 32)
+ if ((unsigned char) *s < 32)
{
/* A NUL byte marks the (premature) end of the string. */
if (*s == '\0')
ereport(ERROR,
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
errmsg("invalid input syntax for type json"),
- errdetail_internal("line %d: Character \"%c\" must be escaped.",
- lex->line_number, *s)));
+ errdetail_internal("line %d: Character with value \"0x%02x\" must be escaped.",
+ lex->line_number, (unsigned char) *s)));
}
else if (*s == '\\')
{
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
errmsg("invalid input syntax for type json: \"%s\"",
lex->input),
- errdetail_internal(detail, lex->line_number, token)));
+ detail ? errdetail_internal(detail, lex->line_number, token) : 0));
}
/*
ERROR: invalid input syntax for type json
LINE 1: SELECT '"abc
^
-DETAIL: line 1: Character "
-" must be escaped.
+DETAIL: line 1: Character with value "0x0a" must be escaped.
SELECT '"\n\"\\"'::json; -- OK, legal escapes
json
----------