Package: libmdbodbc Version: 0.5.99.0.6pre1.0.20051109-4 Severity: important Tags: patch
When used with libmdbodbc, no unixODBC based disconnection function will actually close a database connection. This means the following PHP code (supported by a well-configured odbc.ini etc.) will return rows instead of dying with an error: $db = odbc_connect('Northwind', null, null); odbc_close($db); $sql = "SELECT CompanyName, PostalCode, Country FROM Suppliers"; $result=odbc_exec($db, $sql) or die('ERROR: Cannot execute query!'); This bug is less terrible when libmdbodbc is used with scripts that reliably terminate, but by watching lsof I found that it led apache2 to spawn abnormally long-lived children and thus constituted a memory leak. Yes, I run an apache based site that talks to an Access database. Besides the poor design decisions I have to support, this bug warrants attention as Zend itself recommends that libmdbodbc be used. The following patch has solved the problem for me: --- odbc.c 2008-12-15 13:35:35.280274615 -0800 +++ odbc.c 2008-12-15 13:37:19.415771536 -0800 @@ -711,7 +711,10 @@ SQLRETURN SQL_API SQLDisconnect( SQLHDBC hdbc) { - TRACE("SQLDisconnect"); + struct _hdbc *dbc = (struct _hdbc *) hdbc; + struct _henv *env = (struct _henv *) dbc->henv; + mdb_sql_close(env->sql); + return SQL_SUCCESS; } -- System Information: Debian Release: lenny/sid APT prefers testing APT policy: (500, 'testing') Architecture: i386 (i686) Kernel: Linux 2.6.24-etchnhalf.1-486 Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/bash Versions of packages libmdbodbc depends on: ii libc6 2.7-15 GNU C Library: Shared libraries ii libglib2.0-0 2.16.6-1 The GLib library of C routines ii libmdbtools 0.5.99.0.6pre1.0.20051109-4 mdbtools libraries ii odbcinst1deb 2.2.11-16 Support library and helper program libmdbodbc recommends no packages. libmdbodbc suggests no packages. -- no debconf information