Make ecpg parse.pl more robust with braces
authorPeter Eisentraut <peter@eisentraut.org>
Mon, 8 Dec 2025 14:53:52 +0000 (15:53 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Mon, 8 Dec 2025 14:53:52 +0000 (15:53 +0100)
When parse.pl processes braces, it does not take into account that
braces could also be their own token if single quoted ('{', '}').
This is not currently used but a future patch wants to make use of it.

This fixes that by using lookaround assertions to detect the quotes.

To make sure all Perl versions in play support this and to avoid
surprises later on, let's give this a spin on the buildfarm now.  It
can exist independently of future work.

Reviewed-by: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/a855795d-e697-4fa5-8698-d20122126567@eisentraut.org

src/interfaces/ecpg/preproc/parse.pl

index f22ca213c21a71d7bfbb12b3defbefe91baf454f..7e51339f3fc9ac9fbc50cda76d32091743096f2d 100644 (file)
@@ -256,9 +256,9 @@ sub main
            $has_if_command = 1 if /^\s*if/;
        }
 
-       # Make sure any braces are split into separate fields
-       s/{/ { /g;
-       s/}/ } /g;
+       # Make sure any (unquoted) braces are split into separate fields
+       s/(?<!')\{(?!')/ { /g;
+       s/(?<!')\}(?!')/ } /g;
 
        # Likewise for comment start/end markers
        s|\/\*| /* |g;