From: | Peter Eisentraut <peter(dot)eisentraut(at)enterprisedb(dot)com> |
---|---|
To: | pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: small bug in ecpg unicode identifier error handling |
Date: | 2022-01-12 10:00:21 |
Message-ID: | 217295c2-efd8-7c2e-b4a9-5f0c2cee1059@enterprisedb.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 10.01.22 14:14, Peter Eisentraut wrote:
> I think this patch is necessary:
>
> diff --git a/src/interfaces/ecpg/preproc/pgc.l
> b/src/interfaces/ecpg/preproc/pgc.l
> index 07fee80a9c..3529b2ea86 100644
> --- a/src/interfaces/ecpg/preproc/pgc.l
> +++ b/src/interfaces/ecpg/preproc/pgc.l
> @@ -753,7 +753,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);
>
> The old code doesn't make sense. The literallen is the length of the
> data in literalbuf, which clearly doesn't include the "U&" as the
> comment suggests.
>
> A test case is to preprocess a file like this (ecpg test.pgc):
>
> exec sql select u&"
>
> which currently does *not* give the above error, but it should.
Committed.
For the record, the correct test case was actually
exec sql select u&"";
From | Date | Subject | |
---|---|---|---|
Next Message | Amit Kapila | 2022-01-12 10:14:25 | Re: 2022-01 Commitfest |
Previous Message | Julien Rouhaud | 2022-01-12 09:54:31 | Re: [PATCH] Disable bgworkers during servers start in pg_upgrade |