Received: from mb3.mailbank.com (mb3.mailbank.com [209.133.104.8]) by hub.org (8.9.3/8.9.3) with ESMTP id WAA50850 for ; Sat, 23 Oct 1999 22:02:14 -0400 (EDT) (envelope-from Sam@OConnor.net) Received: from OConnor.net (nice.eiffel.com [198.68.147.4]) by mb3.mailbank.com (8.9.1/8.9.1) with ESMTP id TAA02253 for ; Sat, 23 Oct 1999 19:02:09 -0700 Message-ID: <38123272.955C19B9@OConnor.net> Date: Sat, 23 Oct 1999 15:10:58 -0700 From: "Sam O'Connor" X-Mailer: Mozilla 4.6 [en] (WinNT; I) X-Accept-Language: en MIME-Version: 1.0 To: pgsql-interfaces@postgreSQL.org Subject: BUG in PgODBC found/fixed (win32) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit 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; } /* Data at 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; + } } } }