View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001790 | Xdebug | Step Debugging | public | 2020-05-26 15:03 | 2020-05-28 14:38 |
Reporter | dustinmailc | Assigned To | derick | ||
Priority | high | Severity | crash | Reproducibility | always |
Status | closed | Resolution | fixed | ||
OS | Linux | OS Version | Debian | ||
Product Version | 2.9.5 | ||||
Fixed in Version | 2.9.6 | ||||
Summary | 0001790: Segfault in var_dump() or while debugging with protobuf extension | ||||
Description | While debugging scripts with classes that use the protobuf extension, the php interpreter segfaults reliably when xdebug inspects instances of classes from the extension. The crash also occurs when calling var_dump() with xdebug's var_dump() override enabled. This crash prevents us from using step debugging when the protobuf extension is enabled. | ||||
Steps To Reproduce | Since this requires a separate extension to reproduce, I put together a containerized demonstration of this here: https://github.com/dcloues/xdebug-protobuf-segfault I used the protobuf extension for this, but I believe the crash will occur with any internal class that has a get_properties() handler that returns null. | ||||
Additional Information | I tested adding a null check here: https://github.com/xdebug/xdebug/blob/00a928eb760833a07e01a7b17cc040e4f3a8a077/src/lib/var_export_text.c#L250 which seems to resolve the issue. I'd be happy to open a pull request for this change. | ||||
Tags | SIGSEGV | ||||
Attached Files | |||||
Operating System | Debian Linux | ||||
PHP Version | 7.4.0-7.4.4 | ||||
|
I forgot to include a gdb backtrace from this - sorry about that! I attached it here. backtrace.txt (4,331 bytes)
Program received signal SIGSEGV, Segmentation fault. xdebug_zend_hash_is_recursive (ht=ht@entry=0x0) at /tmp/pear/temp/xdebug/src/lib/compat.c:433 #0 xdebug_zend_hash_is_recursive (ht=ht@entry=0x0) at /tmp/pear/temp/xdebug/src/lib/compat.c:433 433 /tmp/pear/temp/xdebug/src/lib/compat.c: No such file or directory. No locals. #1 0x00007efeecef3575 in xdebug_var_export_text_ansi (struc=struc@entry=0x7fff826d8b58, str=str@entry=0x55dcd58eade0, mode=mode@entry=0, level=level@entry=1, debug_zval=debug_zval@entry=0, options=options@entry=0x55dcd58ea230) at /tmp/pear/temp/xdebug/src/lib/var_export_text.c:250 myht = 0x0 tmp_str = <optimized out> tmp_len = <optimized out> num = <optimized out> key = <optimized out> val = <optimized out> tmpz = 0x0 #2 0x00007efeecef444d in xdebug_var_export_text_ansi (options=0x55dcd58ea230, debug_zval=0, level=1, mode=0, str=0x55dcd58eade0, struc=0x7fff826d8b58) at /tmp/pear/temp/xdebug/src/lib/var_export_text.c:323 myht = <optimized out> tmp_str = <optimized out> tmp_len = <optimized out> key = <optimized out> val = <optimized out> num = <optimized out> tmpz = <optimized out> myht = <optimized out> tmp_str = <optimized out> tmp_len = <optimized out> num = <optimized out> key = <optimized out> val = <optimized out> tmpz = <optimized out> pattern = <optimized out> pattern_len = <optimized out> i_string = <optimized out> tmp_zstr = <optimized out> __ht = <optimized out> _p = <optimized out> _end = <optimized out> _z = <optimized out> __ht = <optimized out> _p = <optimized out> _end = <optimized out> _z = <optimized out> type_name = <optimized out> #3 xdebug_get_zval_value_text_ansi (val=<optimized out>, val@entry=0x7efeecc61050, mode=0, debug_zval=0, options=0x55dcd58ea230) at /tmp/pear/temp/xdebug/src/lib/var_export_text.c:323 str = 0x55dcd58eade0 default_options = 1 #4 0x00007efeecee6375 in zif_xdebug_var_dump (execute_data=<optimized out>, return_value=<optimized out>) at /tmp/pear/temp/xdebug/xdebug.c:811 args = 0x7efeecc61050 argc = <optimized out> i = <optimized out> val = <optimized out> #5 0x00007efeecee747d in xdebug_execute_internal (current_execute_data=0x7efeecc120a0, return_value=0x7fff826d8c28) at /tmp/pear/temp/xdebug/src/base/base.c:466 edata = <optimized out> fse = 0x55dcd5790470 function_nr = 2 function_call_traced = 0 restore_error_handler_situation = 0 tmp_error_cb = 0x0 #6 0x000055dcd31a8aa4 in ?? () No symbol table info available. #7 0x000055dcd34f7bfd in execute_ex () No symbol table info available. #8 0x00007efeecee6b26 in xdebug_execute_ex (execute_data=0x7efeecc12020) at /tmp/pear/temp/xdebug/src/base/base.c:380 op_array = 0x7efeecc7c2a0 edata = <optimized out> fse = 0x55dcd57a9ea0 xfse = <optimized out> function_nr = 0 le = <optimized out> code_coverage_function_name = 0x0 code_coverage_file_name = 0x0 code_coverage_init = 0 #9 0x000055dcd34feda3 in zend_execute () No symbol table info available. #10 0x000055dcd346b9cc in zend_eval_stringl () No symbol table info available. #11 0x000055dcd346bb69 in zend_eval_stringl_ex () No symbol table info available. #12 0x000055dcd3500a65 in ?? () No symbol table info available. #13 0x000055dcd31b667b in ?? () No symbol table info available. #14 0x00007efeefd4609b in __libc_start_main (main=0x55dcd31b6230, argc=3, argv=0x7fff826da4c8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fff826da4b8) at ../csu/libc-start.c:308 self = <optimized out> result = <optimized out> unwind_buf = {cancel_jmp_buf = {{jmp_buf = {0, -5124611990319189412, 94406922956176, 140735381611712, 0, 0, -1394115934335978916, -1250380556739857828}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x7fff826da4e8, 0x7efef0b16190}, data = {prev = 0x0, cleanup = 0x0, canceltype = -2106743576}}} not_first_call = <optimized out> #15 0x000055dcd31b6dba in _start () No symbol table info available. |
|
Hi Dustin, thanks for the report. It was quite easy to reproduce, even without Docker. However, the fix (https://github.com/xdebug/xdebug/commit/009c26f723ab7680084b90401de17aaeee35c386) wasn't as easy as just adding the test for null on the line that you indicated. In the end, it needed to be done in different places making sure that it wouldn't also ignore the whole class. The fix for this report has just been merged into xdebug_2_9 for the 2.9.6 release, as well as into master. thanks! cheers, |
|
Thanks so much! I (and my coworkers) really appreciate it. |
Date Modified | Username | Field | Change |
---|---|---|---|
2020-05-26 15:03 | dustinmailc | New Issue | |
2020-05-26 15:03 | dustinmailc | Tag Attached: SIGSEGV | |
2020-05-26 15:07 | dustinmailc | File Added: backtrace.txt | |
2020-05-26 15:07 | dustinmailc | Note Added: 0005416 | |
2020-05-28 09:17 | derick | Assigned To | => derick |
2020-05-28 09:17 | derick | Status | new => closed |
2020-05-28 09:17 | derick | Resolution | open => fixed |
2020-05-28 09:17 | derick | Fixed in Version | => 2.9.6 |
2020-05-28 09:17 | derick | Note Added: 0005417 | |
2020-05-28 14:38 | dustinmailc | Note Added: 0005421 |