mirror of
https://github.com/postgres/postgres.git
synced 2025-06-08 22:02:03 +03:00
Fix detection of unfinished Unicode surrogate pair at end of string.
The U&'...' and U&"..." syntaxes silently discarded a surrogate pair start (that is, a code between U+D800 and U+DBFF) if it occurred at the very end of the string. This seems like an obvious oversight, since we throw an error for every other invalid combination of surrogate characters, including the very same situation in E'...' syntax. This has been wrong since the pair processing was added (in 9.0), so back-patch to all supported branches. Discussion: https://postgr.es/m/19113.1482337898@sss.pgh.pa.us
This commit is contained in:
parent
b5fe1d4cd9
commit
d0f60e4cc5
@ -1395,7 +1395,15 @@ litbuf_udeescape(unsigned char escape, core_yyscan_t yyscanner)
|
||||
}
|
||||
}
|
||||
|
||||
/* unfinished surrogate pair? */
|
||||
if (pair_first)
|
||||
{
|
||||
ADVANCE_YYLLOC(in - litbuf + 3); /* 3 for U&" */
|
||||
yyerror("invalid Unicode surrogate pair");
|
||||
}
|
||||
|
||||
*out = '\0';
|
||||
|
||||
/*
|
||||
* We could skip pg_verifymbstr if we didn't process any non-7-bit-ASCII
|
||||
* codes; but it's probably not worth the trouble, since this isn't
|
||||
|
Loading…
x
Reference in New Issue
Block a user