diff options
| author | Dmitry Stogov <dmitry@php.net> | 2005-12-01 12:50:58 +0000 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@php.net> | 2005-12-01 12:50:58 +0000 |
| commit | 916ad6c8f71b340a13800f2be08cd83c96242874 (patch) | |
| tree | cebd43c77e4b4099e4e3d8184133a942a163ab0d /Zend | |
| parent | 8768ab94b38f96e540995f31ce17bb4e1e4210f8 (diff) | |
| download | php-git-916ad6c8f71b340a13800f2be08cd83c96242874.tar.gz | |
Fixed bug #35437 (Segfault or Invalid Opcode 137/1/4)
Diffstat (limited to 'Zend')
| -rwxr-xr-x | Zend/tests/bug35437.phpt | 27 | ||||
| -rw-r--r-- | Zend/zend_vm_execute.h | 4 | ||||
| -rw-r--r-- | Zend/zend_vm_execute.skl | 4 |
3 files changed, 35 insertions, 0 deletions
diff --git a/Zend/tests/bug35437.phpt b/Zend/tests/bug35437.phpt new file mode 100755 index 0000000000..eecdee9683 --- /dev/null +++ b/Zend/tests/bug35437.phpt @@ -0,0 +1,27 @@ +--TEST-- +Bug #35437 Segfault or Invalid Opcode 137/1/4 +--FILE-- +<?php +function err2exception($errno, $errstr) +{ + throw new Exception("Error occuried: " . $errstr); +} + +set_error_handler('err2exception'); + +class TestClass +{ + function testMethod() + { + $GLOBALS['t'] = new stdClass; + } +} + +try { + TestClass::testMethod(); +} catch (Exception $e) { + echo "Catched: ".$e->getMessage()."\n"; +} +?> +--EXPECT-- +Catched: Error occuried: Non-static method TestClass::testMethod() should not be called statically diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index d87382402a..8abcb9d59c 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -36,6 +36,10 @@ ZEND_API void execute(zend_op_array *op_array TSRMLS_DC) zend_execute_data execute_data; + if (EG(exception)) { + return; + } + /* Initialize execute_data */ EX(fbc) = NULL; EX(object) = NULL; diff --git a/Zend/zend_vm_execute.skl b/Zend/zend_vm_execute.skl index 6cfd1bbcd3..9a3bd5038d 100644 --- a/Zend/zend_vm_execute.skl +++ b/Zend/zend_vm_execute.skl @@ -7,6 +7,10 @@ ZEND_API void {%EXECUTOR_NAME%}(zend_op_array *op_array TSRMLS_DC) {%INTERNAL_LABELS%} + if (EG(exception)) { + return; + } + /* Initialize execute_data */ EX(fbc) = NULL; EX(object) = NULL; |
