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