Re: DBD::Pg errstr method doesn't return full error messages - Mailing list pgsql-general

From Peter Haworth
Subject Re: DBD::Pg errstr method doesn't return full error messages
Date
Msg-id PGM.20010504114957.21664.386@edison.ioppublishing.com
Whole thread Raw
In response to DBD::Pg errstr method doesn't return full error messages  (Vivek Khera <khera@kcilink.com>)
Responses Permissions and views.  (Dariusz Pietrzak <dariush@ajax.umcs.lublin.pl>)
Re: DBD::Pg errstr method doesn't return full error messages  (Bruce Momjian <pgman@candle.pha.pa.us>)
List pgsql-general
On Thu, 3 May 2001 15:24:31 -0400, Vivek Khera wrote:
> Hi, I'm using DBD::Pg version 0.98 with Postgres 7.1.  I'm noticing
> that quite often on an error, the $dbh->errstr method doesn't return
> the full error.

Here's a patch to DBD::Pg 0.98 which fixes this:

--- dbdimp.c.orig       Tue May  1 11:46:47 2001
+++ dbdimp.c    Tue May  1 11:55:26 2001
@@ -72,18 +72,21 @@
     char *error_msg;
 {
     D_imp_xxh(h);
-    char *err, *src, *dst;
+    char *err, *src, *dst, *end;
     int  len  = strlen(error_msg);

-    err = (char *)malloc(strlen(error_msg + 1));
+    err = (char *)malloc(len + 1);
     if (!err) {
       return;
     }
+    /* Remove trailing newlines, allowing for multi-line messages */
+    for(end = error_msg + len; end > error_msg && end[-1] == '\n'; --end);
+
     src = error_msg;
     dst = err;

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

--
    Peter Haworth    pmh@edison.ioppublishing.com
"A good messenger expects to get shot."
    --Larry Wall

pgsql-general by date:

Previous
From: Renaud Thonnart
Date:
Subject: psql always ends with a SEGV:
Next
From: Dariusz Pietrzak
Date:
Subject: Permissions and views.