com php-src: Handle ZEND_INIT_NS_FCALL_BY_NAME nest ing: Zend/tests/methods-on-non-objects-nested-calls-ns.ph pt Zend/zend_vm_def.h
Zend/zend_vm_execute.h
| From: | Tjerk Anne Meesters | Date: | Sun, 06 Jul 2014 13:10:50 +0000 |
| Subject: | com php-src: Handle ZEND_INIT_NS_FCALL_BY_NAME nest ing: Zend/tests/methods-on-non-objects-nested-calls-ns.ph pt Zend/zend_vm_def.h Zend/zend_vm_execute.h |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-82137@lists.php.net to get a copy of this message | ||
Commit: 9dbc91f2ff28973d9a0f0e38ccf5e2b1494ce087
Author: Timm Friebe <thekid@thekid.de> Sun, 6 Jul 2014 15:10:43 +0200
Parents: 7cd8ecb33f74a4042238fb821ff18a154b03d1d3
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=9dbc91f2ff28973d9a0f0e38ccf5e2b1494ce087
Log:
Handle ZEND_INIT_NS_FCALL_BY_NAME nesting
Changed paths:
A Zend/tests/methods-on-non-objects-nested-calls-ns.phpt
M Zend/zend_vm_def.h
M Zend/zend_vm_execute.h
Diff:
diff --git a/Zend/tests/methods-on-non-objects-nested-calls-ns.phpt
b/Zend/tests/methods-on-non-objects-nested-calls-ns.phpt
new file mode 100755
index 0000000..fdf9677
--- /dev/null
+++ b/Zend/tests/methods-on-non-objects-nested-calls-ns.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Catch method calls on non-objects with nested calls to namespaced functions with core counterparts
+--FILE--
+<?php namespace test;
+function strlen($str) {
+ throw new LogicException('Should not be called');
+}
+set_error_handler(function($code, $message) {
+ static $i= 0;
+ echo 'Called #'.(++$i)."\n";
+});
+
+$x= null;
+var_dump($x->method(strlen('Test')));
+var_dump($x->method(strlen('Test'), strlen('Test')));
+echo "Alive\n";
+?>
+--EXPECTF--
+Called #1
+NULL
+Called #2
+NULL
+Alive
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 21bf19a..e20729b 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -2481,6 +2481,7 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, TMP|VAR|UNUSED|CV,
CONST|TMP|VAR|CV)
if (opline->opcode == ZEND_INIT_METHOD_CALL ||
opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
opline->opcode == ZEND_INIT_STATIC_METHOD_CALL
) {
nested++;
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 368c20d..d270495 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -9323,6 +9323,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_TMP_CONST_HANDLER(ZEND_OPCO
if (opline->opcode == ZEND_INIT_METHOD_CALL ||
opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
opline->opcode == ZEND_INIT_STATIC_METHOD_CALL
) {
nested++;
@@ -10224,6 +10225,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE
if (opline->opcode == ZEND_INIT_METHOD_CALL ||
opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
opline->opcode == ZEND_INIT_STATIC_METHOD_CALL
) {
nested++;
@@ -11126,6 +11128,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE
if (opline->opcode == ZEND_INIT_METHOD_CALL ||
opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
opline->opcode == ZEND_INIT_STATIC_METHOD_CALL
) {
nested++;
@@ -12608,6 +12611,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_
if (opline->opcode == ZEND_INIT_METHOD_CALL ||
opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
opline->opcode == ZEND_INIT_STATIC_METHOD_CALL
) {
nested++;
@@ -15883,6 +15887,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCO
if (opline->opcode == ZEND_INIT_METHOD_CALL ||
opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
opline->opcode == ZEND_INIT_STATIC_METHOD_CALL
) {
nested++;
@@ -18266,6 +18271,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE
if (opline->opcode == ZEND_INIT_METHOD_CALL ||
opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
opline->opcode == ZEND_INIT_STATIC_METHOD_CALL
) {
nested++;
@@ -20610,6 +20616,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE
if (opline->opcode == ZEND_INIT_METHOD_CALL ||
opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
opline->opcode == ZEND_INIT_STATIC_METHOD_CALL
) {
nested++;
@@ -24104,6 +24111,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_
if (opline->opcode == ZEND_INIT_METHOD_CALL ||
opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
opline->opcode == ZEND_INIT_STATIC_METHOD_CALL
) {
nested++;
@@ -25782,6 +25790,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_O
if (opline->opcode == ZEND_INIT_METHOD_CALL ||
opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
opline->opcode == ZEND_INIT_STATIC_METHOD_CALL
) {
nested++;
@@ -27226,6 +27235,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMP_HANDLER(ZEND_OPC
if (opline->opcode == ZEND_INIT_METHOD_CALL ||
opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
opline->opcode == ZEND_INIT_STATIC_METHOD_CALL
) {
nested++;
@@ -28576,6 +28586,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_VAR_HANDLER(ZEND_OPC
if (opline->opcode == ZEND_INIT_METHOD_CALL ||
opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
opline->opcode == ZEND_INIT_STATIC_METHOD_CALL
) {
nested++;
@@ -30354,6 +30365,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCO
if (opline->opcode == ZEND_INIT_METHOD_CALL ||
opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
opline->opcode == ZEND_INIT_STATIC_METHOD_CALL
) {
nested++;
@@ -33629,6 +33641,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCOD
if (opline->opcode == ZEND_INIT_METHOD_CALL ||
opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
opline->opcode == ZEND_INIT_STATIC_METHOD_CALL
) {
nested++;
@@ -35777,6 +35790,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_
if (opline->opcode == ZEND_INIT_METHOD_CALL ||
opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
opline->opcode == ZEND_INIT_STATIC_METHOD_CALL
) {
nested++;
@@ -37980,6 +37994,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_
if (opline->opcode == ZEND_INIT_METHOD_CALL ||
opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
opline->opcode == ZEND_INIT_STATIC_METHOD_CALL
) {
nested++;
@@ -41184,6 +41199,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_H
if (opline->opcode == ZEND_INIT_METHOD_CALL ||
opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
opline->opcode == ZEND_INIT_STATIC_METHOD_CALL
) {
nested++;