I am out of ideas on this one. I started chasing a problem yesterday where we were crashing repeatedly on y2. I removed APC and a couple of other things to rule those out. The crash is consistently in exactly the same place. It is always on a request to:

  http://www.php.net/manual/en/ref.mysql.php

in the highlight_string() call from layout.inc:

function highlight_php($code, $return = FALSE)
{
    // Using OB, as highlight_string() only supports
    // returning the result from 4.2.0
    ob_start();
    highlight_string($code);
    $highlighted = ob_get_contents();
    ob_end_clean();

and it is always on the second note on that page. I yanked the raw note data out of the backend files and tried to reproduce it with:

  http://www.php.net/~rasmus/note.php

note.phps for source

But no luck. Somehow CG(op_array) is getting set to crap coming into that call, but only sometimes. Yet if it is random memory corruption like that, why is the crash always exactly the same? It looks like this:

(gdb) bt
#0  0x0000000800b59953 in strlen () from /lib/libc.so.6
#1 0x000000080109dac6 in lex_scan (zendlval=0x7fffffff8d20) at zend_language_scanner.l:1301 #2 0x00000008010b1214 in zend_highlight (syntax_highlighter_ini=0x7fffffff8e10) at /home/rasmus/php51/Zend/zend_highlight.c:178 #3 0x00000008010a03b4 in highlight_string (str=0x7fffffff8d80, syntax_highlighter_ini=0x7fffffff8e10, str_name=0x981d18 "/home/local/Web/sites/www.php.net/include/layout.inc(21) : highlighted code") at zend_language_scanner.l:621 #4 0x00000008010072ac in zif_highlight_string (ht=40, return_value=0x986c58, return_value_ptr=0xc, this_ptr=0x978340, return_value_used=19651040)
    at /home/rasmus/php51/ext/standard/basic_functions.c:2537
#5 0x00000008010d9407 in zend_do_fcall_common_helper_SPEC (execute_data=0x7fffffff91e0) at zend_vm_execute.h:200 #6 0x00000008010d8d21 in execute (op_array=0x893f00) at zend_vm_execute.h:92 #7 0x00000008010d8ff5 in zend_do_fcall_common_helper_SPEC (execute_data=0x7fffffff9440) at zend_vm_execute.h:234 #8 0x00000008010d8d21 in execute (op_array=0x8f5400) at zend_vm_execute.h:92 #9 0x00000008010d8ff5 in zend_do_fcall_common_helper_SPEC (execute_data=0x7fffffff9b80) at zend_vm_execute.h:234 #10 0x00000008010d8d21 in execute (op_array=0x842300) at zend_vm_execute.h:92 #11 0x00000008010d8ff5 in zend_do_fcall_common_helper_SPEC (execute_data=0x7fffffffa370) at zend_vm_execute.h:234 #12 0x00000008010d8d21 in execute (op_array=0x842000) at zend_vm_execute.h:92 #13 0x00000008010d8ff5 in zend_do_fcall_common_helper_SPEC (execute_data=0x7fffffffa7a0) at zend_vm_execute.h:234 #14 0x00000008010d8d21 in execute (op_array=0x816b00) at zend_vm_execute.h:92 #15 0x00000008010d8ff5 in zend_do_fcall_common_helper_SPEC (execute_data=0x7fffffffc750) at zend_vm_execute.h:234 #16 0x00000008010d8d21 in execute (op_array=0x7e8a18) at zend_vm_execute.h:92 #17 0x00000008010bc4a9 in zend_execute_scripts (type=8, retval=0x0, file_count=3) at /home/rasmus/php51/Zend/zend.c:1109 #18 0x000000080107d17d in php_execute_script (primary_file=0x7fffffffdfd0) at /home/rasmus/php51/main/main.c:1726 #19 0x0000000801130d4f in apache_php_module_main (r=0x28, display_source_mode=0) at /home/rasmus/php51/sapi/apache/sapi_apache.c:53 #20 0x0000000801131995 in send_php (r=0x7bf060, display_source_mode=0, filename=0x0) at /home/rasmus/php51/sapi/apache/mod_php5.c:661
#21 0x0000000000427cec in ap_invoke_handler ()
#22 0x0000000000439a6c in process_request_internal ()
#23 0x0000000000439bad in ap_process_request ()
#24 0x000000000043132f in child_main ()
#25 0x00000000004316b9 in make_child ()
#26 0x000000000043295e in standalone_main ()
#27 0x0000000000433453 in main ()

(gdb) up
#1 0x000000080109dac6 in lex_scan (zendlval=0x7fffffff8d20) at zend_language_scanner.l:1301
1301            zendlval->value.str.len = strlen(func_name);
(gdb) p func_name
$3 = 0x28 <Address 0x28 out of bounds>

(gdb) frame 2
#2 0x00000008010b1214 in zend_highlight (syntax_highlighter_ini=0x7fffffff8e10) at /home/rasmus/php51/Zend/zend_highlight.c:178
178                     token.type = 0;
(gdb) l
173                                             break;
174                             }
175                     } else if (token_type == T_END_HEREDOC) {
176                             efree(token.value.str.val);
177                     }
178                     token.type = 0;
179             }
180     done:
181             if (last_color != syntax_highlighter_ini->highlight_html) {
182                     zend_printf("</span>\n");
(gdb) p token
$8 = {value = {lval = 12225272, dval = 6.0400869062649078e-317, str = {val = 0xba8af8 "::", len = 2}, ht = 0xba8af8, obj = {handle = 12225272, handlers = 0x2}}, refcount = 4294937984, type = 0 '\0', is_ref = 127 '\177'}

(gdb) frame 3
#3 0x00000008010a03b4 in highlight_string (str=0x7fffffff8d80, syntax_highlighter_ini=0x7fffffff8e10, str_name=0x981d18 "/home/local/Web/sites/www.php.net/include/layout.inc(21) : highlighted code") at zend_language_scanner.l:621
621             zend_highlight(syntax_highlighter_ini TSRMLS_CC);
(gdb) p *str
$5 = {value = {lval = 9998360, dval = 4.9398461907532858e-317, str = {
val = 0x989018 "This is a small function I wrote to handle queries on a table.\nIt can query a table, order and sort, and supports inner joins.\n\nThis function also returns the result as a single row or all rows.\n\nEnjo"..., len = 3374}, ht = 0x989018, obj = {handle = 9998360,
      handlers = 0xd2e}}, refcount = 3, type = 6 '\006', is_ref = 0 '\0'}

(gdb) frame 4
#4 0x00000008010072ac in zif_highlight_string (ht=40, return_value=0x986c58, return_value_ptr=0xc, this_ptr=0x978340, return_value_used=19651040)
    at /home/rasmus/php51/ext/standard/basic_functions.c:2537
2537 if (highlight_string(expr, &syntax_highlighter_ini, hicompiled_string_description TSRMLS_CC) == FAILURE) {
(gdb) p *expr
$2 = {value = {lval = 9994264, dval = 4.9378224978679201e-317, str = {
val = 0x988018 "This is a small function I wrote to handle queries on a table.\nIt can query a table, order and sort, and supports inner joins.\n\nThis function also returns the result as a single row or all rows.\n\nEnjo"..., len = 3374}, ht = 0x988018, obj = {handle = 9994264,
      handlers = 0xd2e}}, refcount = 3, type = 6 '\006', is_ref = 0 '\0'}

I have also tried to reproduce this running under valgrind, but no luck there either. So it could be 64-bit specific, or somehow I didn't recreate the exact same environment for it. Since it is the second user note with code to highlight on that page that always crashes, it could be some sort of re-entrancy problem as well. Or perhaps it is totally unrelated, although the fact that it is always the exact same crash is extremely suspicious.

If you have an account on y2, do:

  gdb /local/httpd/bin/httpd /local/httpd/httpd.core

This is running PHP_5_1 as of yesterday.

-Rasmus

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to