[svn:DBD-Pg] r11981 - in DBD-Pg/trunk: . t

[email protected]
Newsgroups perl.dbd.pg.changes
Message-ID <[email protected]>
Author: turnstep
Date: Wed Oct 15 17:49:02 2008
New Revision: 11981

Modified:
   DBD-Pg/trunk/Changes
   DBD-Pg/trunk/dbdimp.c
   DBD-Pg/trunk/t/12placeholders.t

Log:
Fix bug 40075


Modified: DBD-Pg/trunk/Changes
==============================================================================
--- DBD-Pg/trunk/Changes	(original)
+++ DBD-Pg/trunk/Changes	Wed Oct 15 17:49:02 2008
@@ -1,6 +1,11 @@
 ('GSM' is Greg Sabino Mullane, [email protected])
 
-2.11.1 Released October 14, 2008
+
+2.11.2 Released October 15, 2008
+
+	- Fix core dump when invalid placeholders used. (CPAN bug #40075) [GSM]
+
+2.11.1 Released October 14, 2008 (subversion r11980)
 
 	- $sth->{ParamTypes} returns 'TYPE' when possible.
 

Modified: DBD-Pg/trunk/dbdimp.c
==============================================================================
--- DBD-Pg/trunk/dbdimp.c	(original)
+++ DBD-Pg/trunk/dbdimp.c	Wed Oct 15 17:49:02 2008
@@ -3037,7 +3037,8 @@
 			New(0, statement, execsize+1, char); /* freed below */
 			statement[0] = '\0';
 			for (currseg=imp_sth->seg; NULL != currseg; currseg=currseg->nextseg) {
-				strcat(statement, currseg->segment);
+				if (currseg->segment != NULL)
+					strcat(statement, currseg->segment);
 				if (currseg->placeholder!=0)
 					sprintf(strchr(statement, '\0'), "$%d", currseg->placeholder);
 			}
@@ -3097,7 +3098,8 @@
 			New(0, statement, execsize+1, char); /* freed below */
 			statement[0] = '\0';
 			for (currseg=imp_sth->seg; NULL != currseg; currseg=currseg->nextseg) {
-				strcat(statement, currseg->segment);
+				if (currseg->segment != NULL)
+					strcat(statement, currseg->segment);
 				if (currseg->placeholder!=0)
 					strcat(statement, currseg->ph->quoted);
 			}

Modified: DBD-Pg/trunk/t/12placeholders.t
==============================================================================
--- DBD-Pg/trunk/t/12placeholders.t	(original)
+++ DBD-Pg/trunk/t/12placeholders.t	Wed Oct 15 17:49:02 2008
@@ -15,7 +15,7 @@
 if (! defined $dbh) {
 	plan skip_all => 'Connection to database failed, cannot continue testing';
 }
-plan tests => 27;
+plan tests => 28;
 
 my $t='Connect to database for placeholder testing';
 isnt ($dbh, undef, $t);
@@ -152,6 +152,13 @@
 };
 is ($@, q{}, $t);
 
+$t='Calling do() with invalid crowded placeholders fails cleanly';
+$dbh->commit();
+eval {
+  $dbh->do(q{SELECT ??}, undef, 'public', 'error');
+};
+like ($@, qr{ERROR}, $t);
+
 $t='Prepare/execute with non-DML placeholder works';
 $dbh->commit();
 eval {
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.