ecpg: Catch zero-length Unicode identifiers correctly
authorPeter Eisentraut <peter@eisentraut.org>
Wed, 12 Jan 2022 09:39:57 +0000 (10:39 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Wed, 12 Jan 2022 09:39:57 +0000 (10:39 +0100)
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 <tgl@sss.pgh.pa.us>
Discussion: https://www.postgresql.org/message-id/flat/82fafa79-331c-9d65-e51b-8b5d1b2383fc%40enterprisedb.com

src/interfaces/ecpg/preproc/pgc.l

index 39e578e86856ec7d3cefdbca32608feea063f801..9286a0355d6e9580ee36f8a546aa67299ad64114 100644 (file)
@@ -737,7 +737,7 @@ cppline                     {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+
                                }
 <xui>{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);