Possible bug in array handling dbd-pg 2.17.1

[email protected] (Paul Bagyenda)
Newsgroups perl.dbd.pg
Message-ID <[email protected]>
Hi,

 I tripped over a case where dbd-pg 2.17.1 crashes under Bucardo (burcardo.org). Based on the gdb backtrace, I was able to track it down and fix with the patch attached. 

 I am not able to reproduce the bug with smaller perl scripts, but the situation is as follows:

 - When transfering PostgreSQL bigint array's that contain NULL array entries, dbd-pg causes perl to crash on SuSE 11.1 

Sorry I can't be more specific :(

Paul.
dbd-pg-2.17.1.diff (application/octet-stream, 884 B)
diff -Naur /tmp/DBD-Pg-2.17.1/dbdimp.c DBD-Pg-2.17.1/dbdimp.c
--- /tmp/DBD-Pg-2.17.1/dbdimp.c	2010-04-07 22:49:52.000000000 +0200
+++ DBD-Pg-2.17.1/dbdimp.c	2010-05-31 13:11:30.000000000 +0200
@@ -2472,12 +2472,15 @@
 			sv_catpv(value, "{");
 		}
 		for (yz=0; yz < array_items; yz++) {
-			svitem = *av_fetch(currarr, yz, 0);
-
-			if (SvROK(svitem))
+		    SV **svitem_ptr = av_fetch(currarr, yz, 0);
+		    if (svitem_ptr)
+		      svitem = *svitem_ptr; 
+		    else 
+		      svitem = NULL;
+			if (svitem != NULL && SvROK(svitem))
 				croak("Arrays must contain only scalars and other arrays");
 
-			if (!SvOK(svitem)) { /* Insert NULL if we can */
+			if (svitem == NULL || !SvOK(svitem)) { /* Insert NULL if we can */
 				/* Only version 8.2 and up can handle NULLs in arrays */
 				if (server_version < 80200)
 					croak("Cannot use NULLs in arrays until version 8.2");
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.