Fix an issue in PostgreSQL::Test::Cluster:psql()
authorPeter Eisentraut <peter@eisentraut.org>
Thu, 18 Jan 2024 07:46:42 +0000 (08:46 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Thu, 18 Jan 2024 07:46:42 +0000 (08:46 +0100)
Due to the commit c5385929 which made all Perl warnings to fatal, use
of PostgreSQL::Test::Cluster:psql() and safe_psql() with timeout
started to fail with the following error:

Use of uninitialized value $ret in bitwise and (&) at
..src/test/perl/PostgreSQL/Test/Cluster.pm line 2015.

Fix that by placing $ret conversion code in psql() in an if (defined
$ret) block.

With this change, the behavior of psql() becomes same as before, that
is, the whole function returns undef on timeout, which is usefully
different from returning 0.

Author: Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/06f899fd-1826-05ab-42d6-adeb1fd5e200%40eisentraut.org

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

index 406c405015bfa317d430f418da3db14d6720f46b..e2e70d0dbf9ad24c58e8c9830975081159219779 100644 (file)
@@ -2012,12 +2012,15 @@ sub psql
        # We don't use IPC::Run::Simple to limit dependencies.
        #
        # We always die on signal.
-       my $core = $ret & 128 ? " (core dumped)" : "";
-       die "psql exited with signal "
-         . ($ret & 127)
-         . "$core: '$$stderr' while running '@psql_params'"
-         if $ret & 127;
-       $ret = $ret >> 8;
+       if (defined $ret)
+       {
+               my $core = $ret & 128 ? " (core dumped)" : "";
+               die "psql exited with signal "
+                 . ($ret & 127)
+                 . "$core: '$$stderr' while running '@psql_params'"
+                 if $ret & 127;
+               $ret = $ret >> 8;
+       }
 
        if ($ret && $params{on_error_die})
        {