ID: 36884 Comment by: dombug at aggmedia dot net Reported By: guenther dot unterrainer at gknsintermetals dot com Status: No Feedback Bug Type: Apache related Operating System: SLES9 SP3 x86-64 PHP Version: 4.4.2 New Comment:
Been seeing the double linked list problem reported in bug #37201 and tried to reproduce it using simple code, but ended up instead reproducing this bug instead. I'm guessing they're related. Working on a more detailed backtrace (w/gdb/enable-debug), php config, and PHP 4.4.8 (untested), but for now here is the reproduce that segfaults on PHP 4.3.8 and 4.4.0, followed by the simple backtrace. Looks like a problem with cyclic references, in that an object with a dom as a property of itself, will seemingly corrupt memory if the dom is modified. See the code below. PHPINFO ------- PHP Version => 4.4.0 System => Linux lnx04 2.6.16.21-0.8-smp #1 SMP Mon Jul 3 18:25:39 UTC 2006 x86_64 Build Date => Aug 28 2007 12:57:58 Configure Command => './configure' '--prefix=/usr' '--datadir=/usr/share/php' '--mandir=/usr/share/man' '--bindir=/usr/bin' '--libdir=/usr/share' '--includedir=/usr/include' '--sysconfdir=/etc' '--with-_lib=lib64' '--with-config-file-path=/etc' '--with-exec-dir=/usr/lib64/php/bin' '--disable-debug' '--enable-inline-optimization' '--enable-memory-limit' '--enable-magic-quotes' '--enable-safe-mode' '--enable-sigchild' '--disable-ctype' '--disable-session' '--without-mysql' '--disable-cli' '--without-pear' '--with-openssl' '--enable-force-cgi-redirect' '--enable-discard-path' '--enable-cli' '--with-pear' 'x86_64-suse-linux' REPRODUCE --------- class dummy { var $dom = null; var $me = null; function setDomByXpath ($xpath, $value) { $context = $this->dom->xpath_new_context(); $result = xpath_eval($context, $xpath); $nodes = $result->nodeset; $nodes[0]->set_content($value); } } $xml = '<a><b/></a>'; $o = new dummy(); $o->dom = domxml_open_mem($xml); $o->setDomByXpath('/a/b','xxxx'); // comment this out and it works $o->me = $o; $o->me = $o; // comment this out and it works echo $o->dom->dump_mem()."\n"; echo time().': '.memory_get_usage();flush(); SEGFAULT -------- [EMAIL PROTECTED]:/tmp> ./domtest.php <?xml version="1.0"?> <a><b>xxxx</b></a> 1195108231: 46536*** glibc detected *** /usr/local/bin/php: double free or corruption (!prev): 0x000000000074d310 *** ======= Backtrace: ========= /lib64/libc.so.6[0x2b459279a37e] /lib64/libc.so.6(__libc_free+0x6c)[0x2b459279b99c] /usr/local/bin/php(shutdown_memory_manager+0x9b)[0x4cdb4b] /usr/local/bin/php(php_request_shutdown+0x2ec)[0x4afbbc] /usr/local/bin/php(main+0x33f)[0x4fb3df] /lib64/libc.so.6(__libc_start_main+0xf4)[0x2b459274c154] /usr/local/bin/php[0x41fd59] Previous Comments: ------------------------------------------------------------------------ [2007-05-23 04:41:24] tuliogs at pgt dot mpt dot gov dot br As noted in the notes for Oracle Funcions online documentation, this issue was already solved in PECL oci8 1.2.1 and later, but is still present in 4.4.7. To solve this, you´ll have to go through the following steps (modified from Rainer Klier´s notes on that page): 0. (before anything): be sure to have the path to instantclient in your LD_LIBRARY_PATH 1. download latest oci8-package from http://pecl.php.net/package/oci8 (if you already have PHP installed), just do "pecl download oci8" 2. extract package somewhere 3. go to php-4.4.x-source directory 4. rm -rf ext/oci8 5. cp extraceted oci8-1.2.x directory to/as ext/oci8 6. make distclean 7. If you use autoconf 2.5 and later (maybe other versions too), present in updated RedHat/CentOS 4.4 and 5, you MUST delete PHP´s configure script, or it will do nothing: rm configure 8./buildconf --force 9. ./configure (with the options you need) --with-oci8=instantclient,/path/to/instantclient (notice you´ll be using PHP5 syntax for --with-oci8) 10. make 11. ONLY for x86_64, and not really mandatory (same effect as manually editing "memory_limit = 128M" in php.ini, if existing): 11.1. create pear-install.ini: ----------------------------------------------- [PHP] memory_limit = 128M ------------------------------------------------ 11.2. edit Makefile: replace: PEAR_INSTALL_FLAGS = -n -dshort_open_tag=0 -dsafe_mode=0 with: PEAR_INSTALL_FLAGS = -cpear-install.ini -dshort_open_tag=0 -dsafe_mode=0 12. make install 13. if not already, set LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/path/to/instantclient" in your environment (one of profile, apachectl, or /etc/rc.d/init.d/httpd scripts, as you prefer) BEFORE starting Apache. No need to set TNS_ADMIN and tnsnames.ora for Instant Client, IF and only if Oracle´s easy syntax is available - see http://download-east.oracle.com/docs/cd/B12037_01/network.101/b10775/naming.htm#i498306 14. have fun! One example of easily reproducing sample for this issue is phpBB-3.0-RC1. I know it´s not small, but it´s very easy and simple to pick, and you´ll probably get this kind of error still in the install screens, past the database settings. Now I think it´s past time to update oci8, ;) this bug is really more than just an annoyance. *Note: presently, oci8 v1.2.3 may cause the following warning in some scripts: "ocilogoff(): supplied resource is not a valid oci8 connection resource in /path/to/script", but this is less troublesome and easily treated with adjusting logging facilities in php.ini while the scripts are adjusted. Cheers! ------------------------------------------------------------------------ [2006-10-13 08:13:02] kutovoy at gmail dot com I found out that this problem (in my case) was connected with unpacking (gz) corrupted(truncated) data from database after some headeik with debugging and testing. I stored compressed data in TEXT field, but data was 85Kb length and was truncated to 65535. I think gzuncompress cause that glibc errors. After altering field to LONGBLOB problem gone. Good luck! ------------------------------------------------------------------------ [2006-10-11 14:01:11] kutovoy at gmail dot com The same errors on big arrays of objects. on PHP 4.4.2, I'm now trying to figure out working version of PHP. *** glibc detected *** free(): invalid pointer: 0x08925b00 *** [Wed Oct 11 09:26:06 2006] [notice] child pid 2610 exit signal Aborted (6) [Wed Oct 11 09:28:38 2006] [error] [client 194.247.xxx.yyy] File does not exist: /xxx/htdocs/yyy/favicon.ico [Wed Oct 11 10:58:43 2006] [notice] child pid 4059 exit signal Segmentation fault (11) and similar with *** glibc detected *** corrupted double-linked list: ------------------------------------------------------------------------ [2006-10-05 21:14:55] ndickerson at gmi-mr dot com I have also encountered this bug on php 4.3.10 using php xmlrpc libraries(phpxmlrpc.sourceforge.net) and processing an array of 20,000 records using the library, which happens to create a large number of objects. *** glibc detected *** double free or corruption (!prev): 0x0fbf24b8 *** is followed by some *** glibc detected *** corrupted double-linked list: 0x006f4858 *** There are also some other errors that I have lost that occur in the place of the double free or corruption error.. This works fine when it is not processing as many objects. ------------------------------------------------------------------------ [2006-10-05 16:53:12] egon at inf dot ufpr dot br The above code works fine in 5.1. It crashes on PHP 4.3.4, 4.4.2 and 4.4.4 on both linux/windows. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/36884 -- Edit this bug report at http://bugs.php.net/?id=36884&edit=1