BUG in PgODBC found/fixed (win32) - Mailing list pgsql-interfaces

From Sam O'Connor
Subject BUG in PgODBC found/fixed (win32)
Date
Msg-id 38123272.955C19B9@OConnor.net
Whole thread Raw
List pgsql-interfaces
The lo id is currently stored in the parameter EXEC_buffer pointer
with a cast, and is pulled out again later when it is needed.
Bit of a hack but it works.
Later on if EXEC_buffer is not NULL it is freed. Opps.
The fix is just to check for type SQL_LONGVARBINARY before
doing the deallocation.

I'm not sure who the current maintainer is, I've just been happily using
the stuff recently without having to do any work on it. Yey :)
Should I just be putting fixes like this straight into CVS?
If so where can I get access.

- Sam

BTW. Is anyone else using postgres large objects through ODBC in
windows?

Here are some diffs:

diff -c -r pgodbc_vendor/bind.c pgodbc/bind.c
*** pgodbc_vendor/bind.c    Fri Jan 08 10:32:46 1999
--- pgodbc/bind.c    Sat Oct 23 13:08:50 1999
***************
*** 123,131 ****         stmt->parameters[ipar].EXEC_used = NULL;     } 
!     if (stmt->parameters[ipar].EXEC_buffer) {
!         free(stmt->parameters[ipar].EXEC_buffer);         stmt->parameters[ipar].EXEC_buffer = NULL;     }      /*
Dataat exec macro only valid for C char/binary data */
 
--- 123,135 ----         stmt->parameters[ipar].EXEC_used = NULL;     } 
!     if ( stmt->parameters[ipar].SQLType == SQL_LONGVARBINARY) {         stmt->parameters[ipar].EXEC_buffer = NULL;
+     } else {
+         if (stmt->parameters[ipar].EXEC_buffer) {
+             free(stmt->parameters[ipar].EXEC_buffer);
+             stmt->parameters[ipar].EXEC_buffer = NULL;
+         }     }      /*    Data at exec macro only valid for C char/binary data */
diff -c -r pgodbc_vendor/statement.c pgodbc/statement.c
*** pgodbc_vendor/statement.c    Thu Sep 02 22:08:04 1999
--- pgodbc/statement.c    Sat Oct 23 13:07:24 1999
***************
*** 326,334 ****                 self->parameters[i].EXEC_used = NULL;             } 
!             if (self->parameters[i].EXEC_buffer) {
!                 free(self->parameters[i].EXEC_buffer);                 self->parameters[i].EXEC_buffer = NULL;
    }         }     }
 
--- 326,338 ----                 self->parameters[i].EXEC_used = NULL;             } 
!             if ( self->parameters[i].SQLType == SQL_LONGVARBINARY) {                 self->parameters[i].EXEC_buffer
=NULL;
 
+             } else {
+                 if (self->parameters[i].EXEC_buffer) {
+                     free(self->parameters[i].EXEC_buffer);
+                     self->parameters[i].EXEC_buffer = NULL;
+                 }             }         }     }



pgsql-interfaces by date:

Previous
From: Hans Matzen
Date:
Subject: pgaccess - Print Reports
Next
From: Hans Matzen
Date:
Subject: Re: [INTERFACES] pgaccess - Print Reports