From: Peter Eisentraut Date: Wed, 12 Jan 2022 09:39:57 +0000 (+0100) Subject: ecpg: Catch zero-length Unicode identifiers correctly X-Git-Tag: REL_15_BETA1~929 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a18b6d2dc288dfa6e7905ede1d4462edd6a8af47;p=thirdparty%2Fpostgresql.git ecpg: Catch zero-length Unicode identifiers correctly The previous code to detect a zero-length identifier when using Unicode identifiers such as exec sql select u&""; did not work. This fixes that. Reviewed-by: Tom Lane Discussion: https://www.postgresql.org/message-id/flat/82fafa79-331c-9d65-e51b-8b5d1b2383fc%40enterprisedb.com --- diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l index 39e578e8685..9286a0355d6 100644 --- a/src/interfaces/ecpg/preproc/pgc.l +++ b/src/interfaces/ecpg/preproc/pgc.l @@ -737,7 +737,7 @@ cppline {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+ } {dquote} { BEGIN(state_before_str_start); - if (literallen == 2) /* "U&" */ + if (literallen == 0) mmerror(PARSE_ERROR, ET_ERROR, "zero-length delimited identifier"); /* The backend will truncate the identifier here. We do not as it does not change the result. */ base_yylval.str = psprintf("U&\"%s\"", literalbuf);