Thread: DBD-Pg-0.98 horrible segfault bug !!!

DBD-Pg-0.98 horrible segfault bug !!!

From
Ivan E. Panchenko
Date:
Dear Edmund,

There is a horrible bug in DBD-Pg introduced in the 0.98 version.
It can lead to a segmentation falut under some random circumstances,
namely, in the case of my applications.

This bug lives in pg_error() , dbdimp.c  near line 90 and consists of two
 ugly mistakes. Please see the patch below.

I would greatly appreciate the prompt  inclusion of this patch in the next
version.

Regards, Ivan


--- DBD-Pg-0.98/dbdimp.c    Wed Apr 25 15:29:06 2001
+++ DBD-Pg-0.98a/dbdimp.c    Thu May 24 20:12:52 2001
@@ -75,15 +75,16 @@
     char *err, *src, *dst;
     int  len  = strlen(error_msg);

-    err = (char *)malloc(strlen(error_msg + 1));
+    err = (char *)malloc(strlen(error_msg) + 1);
     if (!err) {
       return;
     }
     src = error_msg;
     dst = err;

+
     /* copy error message without trailing newlines */
-    while (*dst != '\0' && *dst != '\n') {
+    while (*src != '\0' && *src != '\n') {
         *dst++ = *src++;
     }
     *dst = '\0';

On Wed, 23 May 2001, Zachary Beane wrote:

> I've been having trouble getting the proper value of $handle->errstr
> or $DBI::errstr. For some reason, it's always giving the scalar 7 back
> rather than an informative error message. Here's an script and output:
>
> --- foo.pl ---
> #!/usr/bin/perl
>
> use DBI;
> my $dbh = DBI->connect("dbi:Pg:dbname=template1", "xach", undef);
>
> my $sql = "bogus sql goes here";
> my $sth = $dbh->prepare($sql);
> $sth->execute() or die $sth->errstr;
>
> my ($result) = $sth->fetchrow_array();
>
> $sth->finish;
>
> print $result, "\n";
> $dbh->disconnect();
> --- end ---
>
> When run, it prints out this:
>
>    $ perl foo.pl
>    DBD::Pg::st execute failed:  at foo.pl line 8.
>    7 at foo.pl line 8.
>    Database handle destroyed without explicit disconnect.
>
> Now, I'm not surprised at the "database handle destroyed..." part, but
> I can't figure out why i'm getting "7 at foo.pl" and a blank message
> in the execute failed string. Any ideas?
>
> Zach
>
_____________________________________________________________
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
Sternberg Astronomical Institute, Moscow University (Russia)
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
phone: +007(095)939-16-83, +007(095)939-23-83