Edit report at https://bugs.php.net/bug.php?id=52752&edit=1

 ID:                 52752
 Comment by:         jani dot ollikainen at mmd dot net
 Reported by:        paulgao at yeah dot net
 Summary:            Crash when lexing
 Status:             Open
 Type:               Bug
 Package:            Scripting Engine problem
 Operating System:   Centos 5 32bit
 PHP Version:        5.3SVN-2010-08-31 (SVN)
 Block user comment: N
 Private report:     N

 New Comment:

Hi,

After emailing to php-dev and fixing my code I've got rid of the error.
Problem is that I've thought that PHP will handle concurrent stuff so
I don't need to.

My problem was having code that does something like this:

fopen($fp,"file.php");
fputs($fp,"<?php /*code*/ ?>");
fclose($fp);

And also in other parts of code to have:
include("file.php");

Which caused sometimes the include have a broken file. I still think that 
crashing to broken file is not acceptable behavior, but I've understood that 
you can crash PHP by coding something wrong and PHP doesn't protect you or 
crash nicely. Which can be problem in hosted environment if not running basic 
PHP-CGI for every request.

I think include/require documentation should have warning box saying something 
that you have to handle concurrent stuff and/or PHP can crash to broken PHP 
files without nice error. I think that might helped me.

For the fix in my code was to change my writing to file:
fopen($fp,"file.php.tmp.".getmypid());
fputs($fp,"<?php /*code*/ ?>");
fclose($fp);
rename("file.php.tmp.".getmypid(),"file.php");

Pretty easy fix if you know that you have to do it or expect PHP to crash to 
broken files.

Of course I can't say anything about the other crashes, but as the backtraces 
seem similar and the example code to used to crash PHP has similar problem 
might that help.


Previous Comments:
------------------------------------------------------------------------
[2012-12-19 13:17:52] jani dot ollikainen at mmd dot net

Oh and here's the backtraces for the production enviroment using PHP 5.3.3, APC 
3.1.13 on CentOS 6 (x86_64). Backtrace have two options but still problem seems 
to be the same:

Core was generated by `/usr/bin/php-cgi'.
Program terminated with signal 7, Bus error.
#0  lex_scan (zendlval=0x7fff2f98cf48) at Zend/zend_language_scanner.c:931
931                     if (yych != '<') goto yy4;
(gdb) list
926                     };
927
928                     YYDEBUG(0, *YYCURSOR);
929                     YYFILL(8);
930                     yych = *YYCURSOR;
931                     if (yych != '<') goto yy4;
932                     YYDEBUG(2, *YYCURSOR);
933                     yyaccept = 0;
934                     yych = *(YYMARKER = ++YYCURSOR);
935                     if (yych <= '?') {

(gdb) bt
#0  lex_scan (zendlval=0x7fff901eca58) at Zend/zend_language_scanner.c:931
#1  0x000000000058deb0 in zendlex (zendlval=0x7fff901eca50)
    at /usr/src/debug/php-5.3.3/Zend/zend_compile.c:4942
#2  0x00000000005786f7 in zendparse ()
    at /usr/src/debug/php-5.3.3/Zend/zend_language_parser.c:3282
#3  0x0000000000583342 in compile_file (file_handle=0x7fff901edfe0,
    type=<value optimized out>) at Zend/zend_language_scanner.l:354
#4  0x00007f413988da8f in my_compile_file (h=0x7fff901edfe0, type=2)
    at /usr/src/debug/php-pecl-apc-3.1.13/APC-3.1.13/apc_main.c:532
#5  0x00007f4134c64721 in phar_compile_file (file_handle=0x7fff901edfe0,
    type=2) at /usr/src/debug/php-5.3.3/ext/phar/phar.c:3393
#6  0x00000000005d8148 in ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER (
    execute_data=0x1263560)
    at /usr/src/debug/php-5.3.3/Zend/zend_vm_execute.h:5179
#7  0x00000000005cc810 in execute (op_array=0x11f5ce0)
    at /usr/src/debug/php-5.3.3/Zend/zend_vm_execute.h:107
#8  0x00000000005a6f4d in zend_execute_scripts (type=8, retval=0x0,
    file_count=3) at /usr/src/debug/php-5.3.3/Zend/zend.c:1194
#9  0x00000000005551b8 in php_execute_script (primary_file=0x7fff901f07b0)
    at /usr/src/debug/php-5.3.3/main/main.c:2261
#10 0x000000000063081d in main (argc=1, argv=0x7fff901f29c8)
    at /usr/src/debug/php-5.3.3/sapi/cgi/cgi_main.c:2127

(gdb) bt
#0  lex_scan (zendlval=0x7fffa8dc3898) at Zend/zend_language_scanner.c:931
#1  0x000000000058deb0 in zendlex (zendlval=0x7fffa8dc3890)
    at /usr/src/debug/php-5.3.3/Zend/zend_compile.c:4942
#2  0x00000000005786f7 in zendparse ()
    at /usr/src/debug/php-5.3.3/Zend/zend_language_parser.c:3282
#3  0x0000000000583342 in compile_file (file_handle=0x7fffa8dc5340,
    type=<value optimized out>) at Zend/zend_language_scanner.l:354
#4  0x00007f55ee3c65b7 in apc_compile_cache_entry (key=0x7fffa8dc5170,
    h=0x7fffa8dc5340, type=2, t=<value optimized out>,
    op_array=0x7fffa8dc40b8, cache_entry=0x7fffa8dc40c0)
    at /usr/src/debug/php-pecl-apc-3.1.13/APC-3.1.13/apc_main.c:398
#5  0x00007f55ee3c6f9b in my_compile_file (h=0x7fffa8dc5340, type=2)
    at /usr/src/debug/php-pecl-apc-3.1.13/APC-3.1.13/apc_main.c:603
#6  0x00007f55e979d721 in phar_compile_file (file_handle=0x7fffa8dc5340,
    type=2) at /usr/src/debug/php-5.3.3/ext/phar/phar.c:3393
#7  0x00000000005d8148 in ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER (
    execute_data=0x1e26370)
    at /usr/src/debug/php-5.3.3/Zend/zend_vm_execute.h:5179
#8  0x00000000005cc810 in execute (op_array=0x1d187e0)
    at /usr/src/debug/php-5.3.3/Zend/zend_vm_execute.h:107
#9  0x00000000005a6f4d in zend_execute_scripts (type=8, retval=0x0,
    file_count=3) at /usr/src/debug/php-5.3.3/Zend/zend.c:1194
#10 0x00000000005551b8 in php_execute_script (primary_file=0x7fffa8dc7b10)
    at /usr/src/debug/php-5.3.3/main/main.c:2261
#11 0x000000000063081d in main (argc=1, argv=0x7fffa8dc9d28)
    at /usr/src/debug/php-5.3.3/sapi/cgi/cgi_main.c:2127

------------------------------------------------------------------------
[2012-12-19 13:09:36] jani dot ollikainen at mmd dot net

This problem is wider than the report says! It's not just Centos 5 and 32bit. 
Tested with 5.3.19, 5.4.9 and trunk 201212191230 and got bus error.

Suggested workaround by disabling mmap seems to work, so problem lies
in mmap handling. Real fix/patch would be nice and really appreciated.

5.3.19:
Core was generated by `sapi/cli/php test3.php'.
Program terminated with signal 7, Bus error.
#0  lex_scan (zendlval=<value optimized out>)
    at Zend/zend_language_scanner.l:1709
1709                    switch (*YYCURSOR++) {
(gdb) list
1704    }
1705
1706
1707    <ST_IN_SCRIPTING>"#"|"//" {
1708            while (YYCURSOR < YYLIMIT) {
1709                    switch (*YYCURSOR++) {
1710                            case '\r':
1711                                    if (*YYCURSOR == '\n') {
1712                                            YYCURSOR++;
1713                                    }
#0  lex_scan (zendlval=<value optimized out>)
    at Zend/zend_language_scanner.l:1709
#1  0x0000000000636640 in zendlex (zendlval=0x7fff2476cb90)
    at /root/php-5.3.19/Zend/zend_compile.c:4975
#2  0x0000000000620e66 in zendparse ()
    at /root/php-5.3.19/Zend/zend_language_parser.c:3285
#3  0x000000000062bb52 in compile_file (file_handle=0x7fff2476ce80,
    type=<value optimized out>) at Zend/zend_language_scanner.l:364
#4  0x00000000005362d1 in phar_compile_file (file_handle=0x7fff2476ce80,
    type=2) at /root/php-5.3.19/ext/phar/phar.c:3394
#5  0x000000000062b3de in compile_filename (type=2, filename=0x185ac58)
    at Zend/zend_language_scanner.l:407
#6  0x000000000067c63e in ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER (
    execute_data=0x7fe9b5916050)
    at /root/php-5.3.19/Zend/zend_vm_execute.h:1967
#7  0x0000000000675a30 in execute (op_array=0x184f358)
    at /root/php-5.3.19/Zend/zend_vm_execute.h:107
#8  0x000000000064f86f in zend_execute_scripts (type=8, retval=0x0,
    file_count=3) at /root/php-5.3.19/Zend/zend.c:1259
#9  0x00000000005fcd67 in php_execute_script (primary_file=0x7fff24770780)
    at /root/php-5.3.19/main/main.c:2316
#10 0x00000000006da002 in main (argc=2, argv=0x7fff24770a18)
    at /root/php-5.3.19/sapi/cli/php_cli.c:1189

PHP 5.4.9:
Core was generated by `sapi/cli/php test3.php'.
Program terminated with signal 7, Bus error.
#0  lex_scan (zendlval=<value optimized out>)
    at Zend/zend_language_scanner.l:1904
1904                    switch (*YYCURSOR++) {
(gdb) list
1899    }
1900
1901
1902    <ST_IN_SCRIPTING>"#"|"//" {
1903            while (YYCURSOR < YYLIMIT) {
1904                    switch (*YYCURSOR++) {
1905                            case '\r':
1906                                    if (*YYCURSOR == '\n') {
1907                                            YYCURSOR++;
1908                                    }
(gdb) bt
#0  lex_scan (zendlval=<value optimized out>)
    at Zend/zend_language_scanner.l:1904
#1  0x000000000063fd90 in zendlex (zendlval=0x7fff4739ebf0)
    at /root/php-5.4.9/Zend/zend_compile.c:6707
#2  0x0000000000628ba4 in zendparse ()
    at /root/php-5.4.9/Zend/zend_language_parser.c:3430
#3  0x0000000000634d4d in compile_file (file_handle=0x7fff4739ef40,
    type=<value optimized out>) at Zend/zend_language_scanner.l:582
#4  0x0000000000539ae1 in phar_compile_file (file_handle=0x7fff4739ef40,
    type=2) at /root/php-5.4.9/ext/phar/phar.c:3388
#5  0x00000000006344ae in compile_filename (type=2, filename=0x7f66ed826d20)
    at Zend/zend_language_scanner.l:625
#6  0x00000000006acb6b in ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER (
    execute_data=0x7f66ed7ea060) at /root/php-5.4.9/Zend/zend_vm_execute.h:2608
#7  0x00000000006c98a0 in execute (op_array=0x7f66ed81f938)
    at /root/php-5.4.9/Zend/zend_vm_execute.h:410
#8  0x00000000006608cd in zend_execute_scripts (type=8, retval=0x0,
    file_count=3) at /root/php-5.4.9/Zend/zend.c:1309
#9  0x0000000000603e27 in php_execute_script (primary_file=0x7fff473a2680)
    at /root/php-5.4.9/main/main.c:2482
#10 0x000000000070aeac in do_cli (argc=2, argv=0x7fff473a2a88)
    at /root/php-5.4.9/sapi/cli/php_cli.c:988
#11 0x000000000070b608 in main (argc=2, argv=0x7fff473a2a88)
    at /root/php-5.4.9/sapi/cli/php_cli.c:1364

trunk:
Core was generated by `sapi/cli/php test3.php'.
Program terminated with signal 7, Bus error.
#0  lex_scan (zendlval=<value optimized out>)
    at Zend/zend_language_scanner.l:1917
1917                    switch (*YYCURSOR++) {
(gdb) list
1912    }
1913
1914
1915    <ST_IN_SCRIPTING>"#"|"//" {
1916            while (YYCURSOR < YYLIMIT) {
1917                    switch (*YYCURSOR++) {
1918                            case '\r':
1919                                    if (*YYCURSOR == '\n') {
1920                                            YYCURSOR++;
1921                                    }
(gdb) bt
#0  lex_scan (zendlval=<value optimized out>)
    at Zend/zend_language_scanner.l:1917
#1  0x0000000000641c30 in zendlex (zendlval=0x7fff34ca46c0)
    at /root/php-trunk-201212191230/Zend/zend_compile.c:6881
#2  0x000000000062a713 in zendparse ()
    at /root/php-trunk-201212191230/Zend/zend_language_parser.c:3428
#3  0x0000000000636d75 in compile_file (file_handle=0x7fff34ca4a30,
    type=<value optimized out>) at Zend/zend_language_scanner.l:585
#4  0x000000000053a921 in phar_compile_file (file_handle=0x7fff34ca4a30,
    type=2) at /root/php-trunk-201212191230/ext/phar/phar.c:3388
#5  0x000000000063641e in compile_filename (type=2, filename=0x7f6444584978)
    at Zend/zend_language_scanner.l:628
#6  0x00000000006d48eb in ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER (
    execute_data=0x7f64445481e0)
    at /root/php-trunk-201212191230/Zend/zend_vm_execute.h:2695
#7  0x00000000006d4b40 in execute_ex (execute_data=0x7f64445481e0)
    at /root/php-trunk-201212191230/Zend/zend_vm_execute.h:356
#8  0x00000000006634d9 in zend_execute_scripts (type=8, retval=0x0,
    file_count=3) at /root/php-trunk-201212191230/Zend/zend.c:1309
#9  0x0000000000605ed9 in php_execute_script (primary_file=0x7fff34ca8180)
    at /root/php-trunk-201212191230/main/main.c:2468
#10 0x0000000000710d7c in do_cli (argc=2, argv=0x7fff34ca8588)
    at /root/php-trunk-201212191230/sapi/cli/php_cli.c:988
#11 0x00000000007114d8 in main (argc=2, argv=0x7fff34ca8588)
    at /root/php-trunk-201212191230/sapi/cli/php_cli.c:1364

------------------------------------------------------------------------


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

    https://bugs.php.net/bug.php?id=52752


-- 
Edit this bug report at https://bugs.php.net/bug.php?id=52752&edit=1

Reply via email to