ID: 41621 Updated by: [EMAIL PROTECTED] Reported By: php at mike2k dot com -Status: Open +Status: Bogus Bug Type: Unknown/Other Function Operating System: Ubuntu Edgy & CentOS / Linux 2.6 PHP Version: 5.2.3 New Comment:
>this is the function again: Thanks, but I asked for COMPLETE reproduce case. >it is apparent that the issue is an infinite loop. Then it's apparent that this is stack oveflow. Previous Comments: ------------------------------------------------------------------------ [2007-06-07 09:36:07] php at mike2k dot com this is the function again: <?php $config['base_dir'] = "/home/foo"; $uri = ereg_replace('^/bootstrap.php', '', $_SERVER['PATH_INFO']).'/'; function uri_check($uri, $level) { global $config; $uri = substr($uri, 0, strrpos($uri, '/')); if(file_exists($config['base_dir'].$uri.'.php') || file_exists($config['base_dir'].$uri.'/index.php')) { echo "something"; } uri_check($uri, $level+1); } uri_check($uri, 1); ?> it is apparent that the issue is an infinite loop. i need to put the uri_check() call inside of the file_exists() stuff. the expected result would be a friendlier crash. something about a maximum recursion limit reached (i thought that error already existed?) ------------------------------------------------------------------------ [2007-06-07 09:28:29] [EMAIL PROTECTED] Thank you for this bug report. To properly diagnose the problem, we need a short but complete example script to be able to reproduce this bug ourselves. A proper reproducing script starts with <?php and ends with ?>, is max. 10-20 lines long and does not require any external resources such as databases, etc. If the script requires a database to demonstrate the issue, please make sure it creates all necessary tables, stored procedures etc. Please avoid embedding huge scripts into the report. ------------------------------------------------------------------------ [2007-06-07 09:22:05] php at mike2k dot com I understand this code doesn't actually make sense, it's not finished. But during the trial and erroring process is when I figured out it was crashing. If anything it should execute and give me the wrong results, show an error, or get caught in an infinite loop. Actually, the infinite loop piece might be it. Is there any way to trap this? Some sort of recursion limitation? Now that I am looking at the online manual, this page http://www.php.net/functions has the exact same concept. However, the expected result would be that PHP kills it, at least with a message. ------------------------------------------------------------------------ [2007-06-07 09:16:51] php at mike2k dot com Description: ------------ The simple code below somehow magically triggers a segfault. PHP is compiled with './configure' '--enable-fastcgi' '--enable-discard-path' '--enable-force-cgi-redirect' '--enable-cli' '--with-mysql' '--with-mysqli=/usr/bin/mysql_config' '--with-curl' '--enable-mbstring' '--with-zlib' '--with-gd' '--enable -track-vars' '--enable-inline-optimization' '--disable-rpath' '--disable-ipv6' '--disable-debug' '--with-jpeg-dir=/usr' '-- with-png-dir=/usr' '--with-freetype-dir' '--enable-gd-native-ttf' '--enable-shmop' '--with-xsl' '--enable-sockets' '--enabl e-pcntl' '--with-mcrypt' '--with-bz2' '--enable-sqlite-utf8' '--with-tidy' '--with-pcre-dir' '--enable-exif' NO bytecode caches or optimizers currently running either. Reproduce code: --------------- <? $uri = ereg_replace('^/bootstrap.php', '', $_SERVER['PATH_INFO']).'/'; function uri_check($uri, $level) { global $config; $uri = substr($uri, 0, strrpos($uri, '/')); if(file_exists($config['base_dir'].$uri.'.php') || file_exists($config['base_dir'].$uri.'/index.php')) { } uri_check($uri, $level+1); } uri_check($uri, 1); ?> Expected result: ---------------- Webserver returns a bad gateway 502 error. This shows up in dmesg/system logs, one per request: php-cgi[10541]: segfault at 0000007fbf3ffd48 rip 00000000006d7055 rsp 0000007fbf3ffd50 error 6 php-cgi[10546]: segfault at 0000007fbf3ffd48 rip 00000000006d7055 rsp 0000007fbf3ffd50 error 6 php-cgi[10548]: segfault at 0000007fbf3ffd48 rip 00000000006d7055 rsp 0000007fbf3ffd50 error 6 php-cgi[10535]: segfault at 0000007fbf3ffd48 rip 00000000006d7055 rsp 0000007fbf3ffd50 error 6 php-cgi[10596]: segfault at 0000007fbf3fff98 rip 00000000006d7055 rsp 0000007fbf3fffa0 error 6 Actual result: -------------- it's a pretty simple recursive function. no classes, nothing. putting that code by itself in a file without any other code (includes, anything) consistently crashes. hopefully it does for someone else who is more skilled with the debugging process. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=41621&edit=1