diff --git a/src/backend/utils/adt/json.c b/src/backend/utils/adt/json.c index 8ab47de..1326d34 100644 --- a/src/backend/utils/adt/json.c +++ b/src/backend/utils/adt/json.c @@ -419,7 +419,7 @@ json_lex_string(JsonLexContext *lex) 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') @@ -430,8 +430,8 @@ json_lex_string(JsonLexContext *lex) 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 == '\\') { diff --git a/src/test/regress/expected/json.out b/src/test/regress/expected/json.out index ed8b237..4b1ad89 100644 --- a/src/test/regress/expected/json.out +++ b/src/test/regress/expected/json.out @@ -26,8 +26,7 @@ def"'::json; -- ERROR, unescaped newline in string constant 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 ----------