ID: 27728
Updated by: [EMAIL PROTECTED]
Reported By: mail at patrickwitte dot de
Status: Assigned
Bug Type: Reproducible crash
Operating System: *
PHP Version: 5.0.0RC1
Assigned To: ilia
New Comment:
I also stumbled upon this, today.
Here is my reproduce code:
if (!php_check_syntax(NULL)) { die(); }
(segfaults)
Seems this is not related to __FILE__
I concur that if exit (die) is not called, no segfault.
S
Previous Comments:
------------------------------------------------------------------------
[2004-03-27 16:30:33] mail at patrickwitte dot de
I made a few more test to get more systematic results:
1) Check of file(test.php) with parse error, no matter if
'php_check_syntax()' is followed by 'exit' or not, results in debug
message:
/home/patrick/php-5.0.0RC1/main/streams/streams.c(371) : Stream of type
'STDIO' 0x4047363c (path:test.php) was not closed
2) Check of correct or non-existant file:
2a) without following 'exit': result as expected
2b) with following 'exit': segfault
After looking in streams.c it seems to be a memory leak.
------------------------------------------------------------------------
[2004-03-27 08:39:10] [EMAIL PROTECTED]
Valgrind reports errors while parsing the parameter. Perhaps we free
the __FILE__ stuff too early? Assigning to Ilia :)
==3720== Invalid read of size 4
==3720== at 0x8293343: zend_parse_arg_impl (zend_API.c:301)
==3720== by 0x8293887: zend_parse_arg (zend_API.c:450)
==3720== by 0x8293BC1: zend_parse_va_args (zend_API.c:542)
==3720== by 0x8293C43: zend_parse_parameters (zend_API.c:569)
==3720== by 0x81BF10C: zif_php_check_syntax
(basic_functions.c:2247)
==3720== by 0x82B89D4: zend_do_fcall_common_helper
(zend_execute.c:2689)
==3720== by 0x82B90D0: zend_do_fcall_handler (zend_execute.c:2818)
==3720== by 0x82B53C6: execute (zend_execute.c:1381)
==3720== Address 0x4B20E38C is not stack'd, malloc'd or free'd
==3720==
------------------------------------------------------------------------
[2004-03-27 07:47:38] mail at patrickwitte dot de
Description:
------------
This happens no matter if the checked file is syntactically ok or not
or even doesn't exists.
In all cases the result of php_check_syntax() is the expexted, but if
exit (or die()) is called afterwards you get a segfault.
Experienced with sapi-module and cli on linux and cli on win32.
(win32-sapi not tested)
Reproduce code:
---------------
<?php
echo php_check_syntax(__FILE__) ? "Ok" : "failed";
exit;
?>
Expected result:
----------------
Ok
Actual result:
--------------
Ok
segfault
Backtrace:
#0 _emalloc (size=Cannot access memory at address 0xc
) at /home/patrick/php-5.0.0RC1/Zend/zend_alloc.c:140
140 CALCULATE_REAL_SIZE_AND_CACHE_INDEX(size);
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=27728&edit=1