Tweak regex to avoid a bug in Perl 5.16.3.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 28 Feb 2025 20:20:22 +0000 (15:20 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 28 Feb 2025 20:20:24 +0000 (15:20 -0500)
For some reason, 5.16.3 (and perhaps slightly earlier/later versions)
go into an infinite loop with the version-replacement regex installed
by commit fc0d0ce97.  We can work around that by using an explicit
"\n" instead of the line-start metacharacter "^".

Reported-by: Sami Imseih <samimseih@gmail.com>
Discussion: https://postgr.es/m/CAA5RZ0u9dV3CdKqkqdusA_RdvBkwWe0c0rxcFWj++VYoutFYSw@mail.gmail.com

src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm

index ec874852d129eda829561b0fb854989fff962ca1..81a8f44aa9f07ff94d5aaac80a4c4cc79e01a21b 100644 (file)
@@ -296,7 +296,7 @@ sub adjust_old_dumpfile
 
    # Same with version argument to pg_restore_relation_stats() or
    # pg_restore_attribute_stats().
-   $dump =~ s {(^\s+'version',) '\d+'::integer,$}
+   $dump =~ s {\n(\s+'version',) '\d+'::integer,$}
        {$1 '000000'::integer,}mg;
 
    if ($old_version < 16)
@@ -645,7 +645,7 @@ sub adjust_new_dumpfile
 
    # Same with version argument to pg_restore_relation_stats() or
    # pg_restore_attribute_stats().
-   $dump =~ s {(^\s+'version',) '\d+'::integer,$}
+   $dump =~ s {\n(\s+'version',) '\d+'::integer,$}
        {$1 '000000'::integer,}mg;
 
    # pre-v16 dumps do not know about XMLSERIALIZE(NO INDENT).