dreamsxin / cphalcon7

Dao7 - Web framework for PHP,QQ群 316911641 & 515414530
https://dreamsxin.github.io/phalcon7-docs/
247 stars 66 forks source link

Segmentation fault on addAround #495

Closed sergeyklay closed 4 years ago

sergeyklay commented 4 years ago
<?php
// Test
use Phalcon\Aop\Joinpoint;
use Phalcon\Aop;

class AspektTest {
    public function foo() {
        return 'intest';
    }
}

$interceptor = new Aop();
$interceptor->addAround(
    'AspektTest::foo()',
    function (JoinPoint $jp) {
        return 'nocall';
    }
);

$test = new AspektTest();
echo $test->foo();
$ php -d phalcon.aop.enable_aop=1 -d extension=ext/modules/phalcon.so manual.php
Segmentation fault (core dumped)
0  0x0000555555d7cf07 in zend_gc_delref (p=0x74726f7070757320) at /home/klay/src/php/source/7.4.0/Zend/zend_types.h:1033
1  0x0000555555d7d1ce in i_zval_ptr_dtor (zval_ptr=0x7ffff3e14120) at /home/klay/src/php/source/7.4.0/Zend/zend_variables.h:43
2  0x0000555555d7d3f0 in zval_ptr_dtor (zval_ptr=0x7ffff3e14120) at /home/klay/src/php/source/7.4.0/Zend/zend_variables.c:84
3  0x00007ffff1cae3e9 in phalcon_aop_do_func_execute (pos=1, pointcut_table=0x7ffff3e58c60, ex=0x7ffff3e14130, aop_object=0x7fffffff9d50) at /home/klay/work/cphalcon7/ext/aop.c:732
4  0x00007ffff1caeb7f in func_pointcut_and_execute (ex=0x7ffff3e14130) at /home/klay/work/cphalcon7/ext/aop.c:834
5  0x00007ffff1caef4a in phalcon_aop_execute_ex (ex=0x7ffff3e14130) at /home/klay/work/cphalcon7/ext/aop.c:897
6  0x00007ffff1cbbc44 in async_execute_ex (exec=0x7ffff3e14130) at /home/klay/work/cphalcon7/ext/async/core.c:51
7  0x0000555555df9166 in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /home/klay/src/php/source/7.4.0/Zend/zend_vm_execute.h:1713
8  0x0000555555e5cd59 in execute_ex (ex=0x7ffff3e14020) at /home/klay/src/php/source/7.4.0/Zend/zend_vm_execute.h:53575
9  0x00007ffff1caef11 in phalcon_aop_execute_ex (ex=0x7ffff3e14020) at /home/klay/work/cphalcon7/ext/aop.c:893
10 0x00007ffff1cbba98 in execute_root (exec=0x7ffff3e14020) at /home/klay/work/cphalcon7/ext/async/core.c:30
11 0x00007ffff1cbbc2f in async_execute_ex (exec=0x7ffff3e14020) at /home/klay/work/cphalcon7/ext/async/core.c:49
12 0x0000555555e60e92 in zend_execute (op_array=0x7ffff3e8a400, return_value=0x0) at /home/klay/src/php/source/7.4.0/Zend/zend_vm_execute.h:57651
13 0x0000555555d82ad2 in zend_execute_scripts (type=8, retval=0x0, file_count=3) at /home/klay/src/php/source/7.4.0/Zend/zend.c:1663
14 0x0000555555ccf528 in php_execute_script (primary_file=0x7fffffffd710) at /home/klay/src/php/source/7.4.0/main/main.c:2619
15 0x0000555555e6396c in do_cli (argc=6, argv=0x555556bab060) at /home/klay/src/php/source/7.4.0/sapi/cli/php_cli.c:961
16 0x0000555555e64a6f in main (argc=6, argv=0x555556bab060) at /home/klay/src/php/source/7.4.0/sapi/cli/php_cli.c:1352
$ php -v
PHP 7.4.0 (cli) (built: Nov 28 2019 20:49:56) ( ZTS DEBUG )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.0, Copyright (c), by Zend Technologies
$ php -d extension=ext/modules/phalcon.so -r 'echo Phalcon\Version::get();'
1.3.3

Take a look at this code: https://github.com/dreamsxin/cphalcon7/blob/d8c91fd32e6653bff078e82e7dfbd62d41d2a727/ext/aop.c#L731-L733

sergeyklay commented 4 years ago

Fast fix:

-  zval_ptr_dtor(ex->return_value);
+  // TODO(dreamsxin): Fixme
+  if (Z_TYPE_P(ex->return_value) > IS_NULL && Z_TYPE_P(ex->return_value) < 21) {
+      zval_ptr_dtor(ex->return_value);
+  }