krakjoe / uopz

User Operations for Zend
Other
356 stars 47 forks source link

SIGSEGV (11) on uopz_add_function #139

Closed keywinf closed 3 years ago

keywinf commented 3 years ago

Hi, I was able to accurately isolate the cause of segmentation faults when running some of my PHPUnit tests.

It seems to be caused by the use of uopz_add_function. Other methods such as uopz_set_return, or whatever, seem to be fine.

I'm using https://github.com/krakjoe/uopz/archive/73a6b2d85548e09702a60a35cfa1df2e94902247.tar.gz, which is a php8 version of the package.

This is intermittent, but tends to be something like 60/70% of failures when running one of my unit tests.

Here is a (dirty) gdb backtrace

#0  0x0000563069e21dd1 in _emalloc ()
No symbol table info available.
#1  0x0000563069e4087d in zend_string_tolower_ex ()
No symbol table info available.
#2  0x0000563069e249c9 in ?? ()
No symbol table info available.
#3  0x0000563069e31e86 in ?? ()
No symbol table info available.
#4  0x0000563069e3087e in ?? ()
No symbol table info available.
#5  0x0000563069e2c679 in ?? ()
No symbol table info available.
#6  0x0000563069e2fdea in ?? ()
No symbol table info available.
#7  0x0000563069e2c695 in ?? ()
No symbol table info available.
#8  0x0000563069e34304 in ?? ()
No symbol table info available.
#9  0x0000563069e2c43d in ?? ()
No symbol table info available.
#10 0x0000563069e34abe in ?? ()
No symbol table info available.
#11 0x0000563069e358b7 in ?? ()
No symbol table info available.
#12 0x0000563069e34c52 in ?? ()
No symbol table info available.
#13 0x0000563069e3614a in ?? ()
No symbol table info available.
#14 0x0000563069e34ca4 in ?? ()
No symbol table info available.
#15 0x0000563069e358b7 in ?? ()
No symbol table info available.
#16 0x0000563069e34c52 in ?? ()
No symbol table info available.
#17 0x0000563069e366f6 in ?? ()
No symbol table info available.
#18 0x0000563069e37ee4 in ?? ()
No symbol table info available.
#19 0x0000563069e37f10 in ?? ()
No symbol table info available.
#20 0x0000563069e0cb5f in ?? ()
No symbol table info available.
#21 0x0000563069e0e56a in compile_file ()
No symbol table info available.
#22 0x0000563069ce60d9 in ?? ()
No symbol table info available.
#23 0x0000563069e0e5e2 in compile_filename ()
No symbol table info available.
#24 0x0000563069e77c05 in ?? ()
No symbol table info available.
#25 0x0000563069e8d70a in ?? ()
No symbol table info available.
#26 0x0000563069ea9b3c in execute_ex ()
No symbol table info available.
#27 0x0000563069e3b5ea in zend_call_function ()
No symbol table info available.
#28 0x0000563069e3ba25 in zend_call_known_function ()
No symbol table info available.
#29 0x0000563069d17f7a in ?? ()
No symbol table info available.
#30 0x0000563069e3a7c5 in zend_lookup_class_ex ()
No symbol table info available.
#31 0x0000563069e3bd0c in zend_fetch_class_by_name ()
No symbol table info available.
#32 0x0000563069e8b177 in ?? ()
No symbol table info available.
#33 0x0000563069ea8ad6 in execute_ex ()
No symbol table info available.
#34 0x0000563069eb0e0e in zend_execute ()
No symbol table info available.
#35 0x0000563069e48d3d in zend_execute_scripts ()
No symbol table info available.
#36 0x0000563069de635e in php_execute_script ()

I guess it has something to do with this line then : https://github.com/krakjoe/uopz/blob/8ac783d8c151485b5bea8f917a654bb39e1a61d9/src/function.c#L35

Hoping someone more skillful than me on the subject will find the trick! Thanks!

Clues :

Edit : I'm also having a bug with uopz_del_function :

#0  0x0000558e4e4c4dd1 in _emalloc ()
No symbol table info available.
#1  0x0000558e4e4b5184 in lex_scan ()
No symbol table info available.
#2  0x0000558e4e4ca83a in ?? ()
No symbol table info available.
#3  0x0000558e4e4ad15e in zendparse ()
No symbol table info available.
#4  0x0000558e4e4afae4 in ?? ()
No symbol table info available.
#5  0x0000558e4e4b156a in compile_file ()
No symbol table info available.
#6  0x0000558e4e3890d9 in ?? ()
No symbol table info available.
#7  0x0000558e4e4b15e2 in compile_filename ()
No symbol table info available.
#8  0x0000558e4e51ac05 in ?? ()
No symbol table info available.
#9  0x0000558e4e53070a in ?? ()
No symbol table info available.
#10 0x0000558e4e54cb3c in execute_ex ()
No symbol table info available.
#11 0x0000558e4e4de5ea in zend_call_function ()
No symbol table info available.
#12 0x0000558e4e4dea25 in zend_call_known_function ()
No symbol table info available.
#13 0x0000558e4e3baf7a in ?? ()
No symbol table info available.
#14 0x0000558e4e4dd7c5 in zend_lookup_class_ex ()
No symbol table info available.
#15 0x0000558e4e4ded0c in zend_fetch_class_by_name ()
No symbol table info available.
#16 0x0000558e4e52e177 in ?? ()
No symbol table info available.
#17 0x0000558e4e54bad6 in execute_ex ()
No symbol table info available.
#18 0x0000558e4e553e0e in zend_execute ()
No symbol table info available.
#19 0x0000558e4e4ebd3d in zend_execute_scripts ()
No symbol table info available.
#20 0x0000558e4e48935e in php_execute_script ()
No symbol table info available.
#21 0x0000558e4e5795ae in ?? ()
No symbol table info available.
#22 0x0000558e4e21580b in ?? ()
No symbol table info available.
#23 0x00007fa21fd9209b in __libc_start_main (main=0x558e4e2153c0, argc=5, argv=0x7ffc18a1d848, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffc18a1d838) at ../csu/libc-start.c:308
        self = <optimized out>
        result = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {0, -8065550558408034088, 94069684526880, 140720721745984, 0, 0, -4254277171083560744, -4302684209370842920}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x7ffc18a1d878, 0x7fa220b6c190}, data = {
              prev = 0x0, cleanup = 0x0, canceltype = 413259896}}}
        not_first_call = <optimized out>
#24 0x0000558e4e215f4a in _start ()
No symbol table info available.