summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2005-12-01 12:50:58 +0000
committerDmitry Stogov <dmitry@php.net>2005-12-01 12:50:58 +0000
commit916ad6c8f71b340a13800f2be08cd83c96242874 (patch)
treecebd43c77e4b4099e4e3d8184133a942a163ab0d /Zend
parent8768ab94b38f96e540995f31ce17bb4e1e4210f8 (diff)
downloadphp-git-916ad6c8f71b340a13800f2be08cd83c96242874.tar.gz
Fixed bug #35437 (Segfault or Invalid Opcode 137/1/4)
Diffstat (limited to 'Zend')
-rwxr-xr-xZend/tests/bug35437.phpt27
-rw-r--r--Zend/zend_vm_execute.h4
-rw-r--r--Zend/zend_vm_execute.skl4
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;