If PostgresNode::psql (from the TAP framework) is called with a
timeout set and a timed_out reference, it will attempt to do bitwise
AND and bitshifts on the $ret value from IPC::Run, which is undef if
the command timed out.

This produces annoying errors in the logs.

Fix attached. Should be applied to 9.6 and pg 10.

-- 
 Craig Ringer                   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services
From 2745f52455c4a0c187ec879f009aac8f7d0e2ce1 Mon Sep 17 00:00:00 2001
From: Craig Ringer <cr...@2ndquadrant.com>
Date: Wed, 12 Apr 2017 20:04:34 +0800
Subject: [PATCH] Fix undefined var warnings in PostgresNode.pm with timeout

---
 src/test/perl/PostgresNode.pm | 33 ++++++++++++++++++---------------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm
index bd627b2..84515ad 100644
--- a/src/test/perl/PostgresNode.pm
+++ b/src/test/perl/PostgresNode.pm
@@ -1151,22 +1151,25 @@ 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})
-	{
-		die "psql error: stderr: '$$stderr'\nwhile running '@psql_params'"
-		  if $ret == 1;
-		die "connection error: '$$stderr'\nwhile running '@psql_params'"
-		  if $ret == 2;
-		die "error running SQL: '$$stderr'\nwhile running '@psql_params'"
-		  if $ret == 3;
-		die "psql returns $ret: '$$stderr'\nwhile running '@psql_params'";
+		if ($ret && $params{on_error_die})
+		{
+			die "psql error: stderr: '$$stderr'\nwhile running '@psql_params'"
+			  if $ret == 1;
+			die "connection error: '$$stderr'\nwhile running '@psql_params'"
+			  if $ret == 2;
+			die "error running SQL: '$$stderr'\nwhile running '@psql_params'"
+			  if $ret == 3;
+			die "psql returns $ret: '$$stderr'\nwhile running '@psql_params'";
+		}
 	}
 
 	if (wantarray)
-- 
2.5.5

From 80a2b93b4e3ab3ad132fdcbf68b027d4e1726539 Mon Sep 17 00:00:00 2001
From: Craig Ringer <cr...@2ndquadrant.com>
Date: Wed, 12 Apr 2017 20:08:54 +0800
Subject: [PATCH] Fix undefined var warnings in PostgresNode.pm with timeout

---
 src/test/perl/PostgresNode.pm | 33 ++++++++++++++++++---------------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm
index 0eacd41..5bb4f40 100644
--- a/src/test/perl/PostgresNode.pm
+++ b/src/test/perl/PostgresNode.pm
@@ -1217,22 +1217,25 @@ 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 ($ret && $params{on_error_die})
+	if (defined($ret))
 	{
-		die "psql error: stderr: '$$stderr'\nwhile running '@psql_params'"
-		  if $ret == 1;
-		die "connection error: '$$stderr'\nwhile running '@psql_params'"
-		  if $ret == 2;
-		die "error running SQL: '$$stderr'\nwhile running '@psql_params' with sql '$sql'"
-		  if $ret == 3;
-		die "psql returns $ret: '$$stderr'\nwhile running '@psql_params'";
+		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})
+		{
+			die "psql error: stderr: '$$stderr'\nwhile running '@psql_params'"
+			  if $ret == 1;
+			die "connection error: '$$stderr'\nwhile running '@psql_params'"
+			  if $ret == 2;
+			die "error running SQL: '$$stderr'\nwhile running '@psql_params' with sql '$sql'"
+			  if $ret == 3;
+			die "psql returns $ret: '$$stderr'\nwhile running '@psql_params'";
+		}
 	}
 
 	if (wantarray)
-- 
2.5.5

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to