#27608 [NEW]: mysql_free_result causes segfault with invalid result and exceptionerrorhandler
by david dot danier at team23 dot de other posts by this author
Mar 15 2004 5:32PM messages near this date
#27609 [Opn]: is_writable returns true for file that can not be written to
|
#27608 [Com]: mysql_free_result causes segfault with invalid result and exceptionerrorhandler
From: david dot danier at team23 dot de
Operating system: Gentoo Linux 1.4
PHP version: 5CVS-2004-03-15 (dev)
PHP Bug Type: Reproducible crash
Bug description: mysql_free_result causes segfault with invalid result and exceptionerrorha
ndler
Description:
------------
We have a class that catches the result of mysql_query (this here in the
example is minimal). In the __descruct()-method it should do an
mysql_free_result(). The errorhandler
throws an exception. Now, if we do an INSERT the
mysql_free_result()-function gives an error (it MUST give an error,
because mysql_query() gives us no valid result if we use INSERT), this
error is passed to error() whith should throw an exception. But it creates
a segmentation fault. :-(
Other exceptions thrown by the error()-function are working perfectly.
SELECT-statements are working. (like they should do)
PHP-Version:
CVS 2004-03-07
(reproduced with CVS 2004-03-15)
Configured with (taken from the PHP4-ebuild, but modified):
./configure --prefix=/usr --host=i686-pc-linux-gnu --mandir=/usr/share/man
--infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc
--localstatedir=/var/lib --with-apxs2=/usr/sbin/apxs2 --with-ndbm=/usr
--with-db4=/usr --with-mcrypt=/usr --with-mhash=/usr --without-interbase
--without-ming --without-swf --without-sybase --with-gdbm=/usr
--with-java=/opt/blackdown-jdk-1.4.1 --without-mcal --without-unixODBC
--without-pgsql --without-snmp --with-xpm-dir=/usr/X11R6
--with-pdflib=/usr --with-gd --enable-gd-native-ttf --with-png=/usr
--with-png-dir=/usr --with-jpeg=/usr --with-jpeg-dir=/usr --enable-exif
--with-tiff=/usr --with-tiff-dir=/usr --with-mysql=/usr
--with-mysql-sock=/var/run/mysqld/mysqld.sock --with-freetype-dir=/usr
--with-ttf=/usr --with-t1lib=/usr --with-gettext --with-qtdom=/usr/qt/3
--with-pspell=/usr --with-openssl=/usr --with-imap=/usr --without-ldap
--with-dom=/usr --with-dom-xslt=/usr --with-dom-exslt=/usr
--without-kerberos --with-pam --disable-memory-limit --disable-ipv6
--without-yaz --without-curl --enable-dbx --with-imap-ssl --with-zlib=/usr
--with-zlib-dir=/usr --with-sablot=/usr --enable-xslt --with-xslt-sablot
--with-xmlrpc --enable-wddx --with-xml --enable-mbstring=all
--enable-mbregex --with-bz2=/usr --with-crack=/usr --with-cdb
--enable-pcntl --enable-bcmath --enable-calendar --enable-dbase
--enable-filepro --enable-ftp --with-mime-magic --enable-sockets
--enable-sysvsem --enable-sysvshm --enable-sysvipc --with-iconv
--enable-shmop --enable-dio --enable-yp --without-ncurses
--without-readline --enable-inline-optimization --enable-track-vars
--enable-trans-sid --enable-versioning
--with-config-file-path=/etc/php/apache2-php5
php.ini:
not changed
Reproduce code:
---------------
<?php
class result
{
var $result;
public function __construct($result)
{
if (!$result)
{
die(mysql_error());
}
echo 'GO ';
$this-> result = $result;
}
public function __destruct()
{
echo 'OK ';
mysql_free_result($this-> result);
}
}
function error($errno, $errstr, $errfile, $errline)
{
throw new Exception();
}
set_error_handler('error', E_ALL);
$db = mysql_connect('localhost', 'default');
mysql_select_db('test', $db);
echo '1 '; // only to get the position the error happens
$test = new result(mysql_query('INSERT INTO blafasl SET text="segfault!"',
$db));
echo '2 ';
unset($test); // if we don't unset $test PHP gives an exception error
echo '3 ';
?>
Expected result:
----------------
Errormessage about uncought exception.....
Actual result:
--------------
(gdb) bt
#0 0x082814dc in _zval_ptr_dtor (zval_ptr=0xbfffd40c)
at /home/goliath/downloads/php/php-src/Zend/zend_execute_API.c:356
#1 0x0828c148 in zend_execute_scripts (type=8, retval=0x0, file_count=3)
at /home/goliath/downloads/php/php-src/Zend/zend.c:1082
#2 0x08252b5f in php_execute_script (primary_file=0xbffff760)
at /home/goliath/downloads/php/php-src/main/main.c:1655
#3 0x082b728c in main (argc=2, argv=0xbffff7e4)
at /home/goliath/downloads/php/php-src/sapi/cli/php_cli.c:943
--
Edit bug report at http://bugs.php.net/?id=27608&edit=1
--
Try a CVS snapshot (php4): http://bugs.php.net/fix.php?id=27608&r=trysnapshot4
Try a CVS snapshot (php5): http://bugs.php.net/fix.php?id=27608&r=trysnapshot5
Fixed in CVS: http://bugs.php.net/fix.php?id=27608&r=fixedcvs
Fixed in release: http://bugs.php.net/fix.php?id=27608&r=alreadyfixed
Need backtrace: http://bugs.php.net/fix.php?id=27608&r=needtrace
Need Reproduce Script: http://bugs.php.net/fix.php?id=27608&r=needscript
Try newer version: http://bugs.php.net/fix.php?id=27608&r=oldversion
Not developer issue: http://bugs.php.net/fix.php?id=27608&r=support
Expected behavior: http://bugs.php.net/fix.php?id=27608&r=notwrong
Not enough info: http://bugs.php.net/fix.php?id=27608&r=notenoughinfo
Submitted twice: http://bugs.php.net/fix.php?id=27608&r=submittedtwice
register_globals: http://bugs.php.net/fix.php?id=27608&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=27608&r=php3
Daylight Savings: http://bugs.php.net/fix.php?id=27608&r=dst
IIS Stability: http://bugs.php.net/fix.php?id=27608&r=isapi
Install GNU Sed: http://bugs.php.net/fix.php?id=27608&r=gnused
Floating point limitations: http://bugs.php.net/fix.php?id=27608&r=float
Thread:
david dot danier at team23 dot de
bobbyp_21 at hotmail dot com
david dot danier at team23 dot de
david dot danier at team23 dot de
david dot danier at team23 dot de
david dot danier at team23 dot de
|