com php-src: Merge branch 'master' into catchable-fatals/methods-on-non-objects: Zend/zend_vm_def .h Zend/zend_vm_execute.h run-tests.php
| From: | Tjerk Anne Meesters | Date: | Thu, 25 Sep 2014 17:45:05 +0000 |
| Subject: | com php-src: Merge branch 'master' into catchable-fatals/methods-on-non-objects: Zend/zend_vm_def .h Zend/zend_vm_execute.h run-tests.php | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-82124@lists.php.net to get a copy of this message | ||
Commit: e83580c1f00a60d4ad926e849052028211480af9
Author: Timm Friebe <thekid@thekid.de> Thu, 25 Sep 2014 19:45:05 +0200
Parents: 3db67313c9207ca12a512a08d1bdd54347f821c8 eabad90acbdac82a5b3f78d71477727354f9e64d
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=e83580c1f00a60d4ad926e849052028211480af9
Log:
Merge branch 'master' into catchable-fatals/methods-on-non-objects
Changed paths:
MM Zend/zend_vm_def.h
MM Zend/zend_vm_execute.h
MM run-tests.php
Diff:
diff --cc Zend/zend_vm_execute.h
index 884278b,df53c72..2008f8d
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@@ -10420,48 -11956,11 +11993,48 @@@ static int ZEND_FASTCALL ZEND_INIT_MET
object = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ zend_uint nesting = 1;
+
if (UNEXPECTED(EG(exception) != NULL)) {
- zval_dtor(free_op2.var);
+ zval_ptr_dtor_nogc(free_op2.var);
HANDLE_EXCEPTION();
}
- zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s",
Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
+
+ zend_error(E_RECOVERABLE_ERROR, "Call to a member function %s() on %s",
Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
+ zval_dtor(free_op2.var);
+
+ if (EG(exception) != NULL) {
+ HANDLE_EXCEPTION();
+ }
+
+ /* No exception raised: Skip over arguments until fcall opcode with correct
+ * nesting level. Return NULL (except when return value unused) */
+ do {
+ opline++;
+
+ if (opline->opcode == ZEND_INIT_FCALL ||
+ opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_METHOD_CALL ||
+ opline->opcode == ZEND_INIT_STATIC_METHOD_CALL ||
+ opline->opcode == ZEND_INIT_USER_CALL ||
+ opline->opcode == ZEND_NEW
+ ) {
+ nesting++;
+ } else if (opline->opcode == ZEND_DO_FCALL) {
+ nesting--;
+ }
+ } while (nesting);
+
+ if (RETURN_VALUE_USED(opline)) {
+ ZVAL_NULL(EX_VAR(opline->result.var));
+ }
+
+ /* We've skipped EXT_FCALL_BEGIND, so also skip the ending opcode */
+ if ((opline + 1)->opcode == ZEND_EXT_FCALL_END) {
+ opline++;
+ }
+ ZEND_VM_JMP(++opline);
}
obj = Z_OBJ_P(object);
@@@ -18410,49 -20542,11 +20728,49 @@@ static int ZEND_FASTCALL ZEND_INIT_MET
object = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ zend_uint nesting = 1;
+
if (UNEXPECTED(EG(exception) != NULL)) {
- zval_dtor(free_op2.var);
+ zval_ptr_dtor_nogc(free_op2.var);
HANDLE_EXCEPTION();
}
- zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s",
Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
+
+ zend_error(E_RECOVERABLE_ERROR, "Call to a member function %s() on %s",
Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
+ zval_dtor(free_op2.var);
+ zval_ptr_dtor_nogc(free_op1.var);
+
+ if (EG(exception) != NULL) {
+ HANDLE_EXCEPTION();
+ }
+
+ /* No exception raised: Skip over arguments until fcall opcode with correct
+ * nesting level. Return NULL (except when return value unused) */
+ do {
+ opline++;
+
+ if (opline->opcode == ZEND_INIT_FCALL ||
+ opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_METHOD_CALL ||
+ opline->opcode == ZEND_INIT_STATIC_METHOD_CALL ||
+ opline->opcode == ZEND_INIT_USER_CALL ||
+ opline->opcode == ZEND_NEW
+ ) {
+ nesting++;
+ } else if (opline->opcode == ZEND_DO_FCALL) {
+ nesting--;
+ }
+ } while (nesting);
+
+ if (RETURN_VALUE_USED(opline)) {
+ ZVAL_NULL(EX_VAR(opline->result.var));
+ }
+
+ /* We've skipped EXT_FCALL_BEGIND, so also skip the ending opcode */
+ if ((opline + 1)->opcode == ZEND_EXT_FCALL_END) {
+ opline++;
+ }
+ ZEND_VM_JMP(++opline);
}
obj = Z_OBJ_P(object);
@@@ -27112,48 -29028,11 +29365,48 @@@ static int ZEND_FASTCALL ZEND_INIT_MET
object = _get_obj_zval_ptr_unused(TSRMLS_C);
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ zend_uint nesting = 1;
+
if (UNEXPECTED(EG(exception) != NULL)) {
- zval_dtor(free_op2.var);
+ zval_ptr_dtor_nogc(free_op2.var);
HANDLE_EXCEPTION();
}
- zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s",
Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
+
+ zend_error(E_RECOVERABLE_ERROR, "Call to a member function %s() on %s",
Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
+ zval_dtor(free_op2.var);
+
+ if (EG(exception) != NULL) {
+ HANDLE_EXCEPTION();
+ }
+
+ /* No exception raised: Skip over arguments until fcall opcode with correct
+ * nesting level. Return NULL (except when return value unused) */
+ do {
+ opline++;
+
+ if (opline->opcode == ZEND_INIT_FCALL ||
+ opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_METHOD_CALL ||
+ opline->opcode == ZEND_INIT_STATIC_METHOD_CALL ||
+ opline->opcode == ZEND_INIT_USER_CALL ||
+ opline->opcode == ZEND_NEW
+ ) {
+ nesting++;
+ } else if (opline->opcode == ZEND_DO_FCALL) {
+ nesting--;
+ }
+ } while (nesting);
+
+ if (RETURN_VALUE_USED(opline)) {
+ ZVAL_NULL(EX_VAR(opline->result.var));
+ }
+
+ /* We've skipped EXT_FCALL_BEGIND, so also skip the ending opcode */
+ if ((opline + 1)->opcode == ZEND_EXT_FCALL_END) {
+ opline++;
+ }
+ ZEND_VM_JMP(++opline);
}
obj = Z_OBJ_P(object);
@@@ -35730,48 -37386,11 +37871,48 @@@ static int ZEND_FASTCALL ZEND_INIT_MET
object = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ zend_uint nesting = 1;
+
if (UNEXPECTED(EG(exception) != NULL)) {
- zval_dtor(free_op2.var);
+ zval_ptr_dtor_nogc(free_op2.var);
HANDLE_EXCEPTION();
}
- zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s",
Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
+
+ zend_error(E_RECOVERABLE_ERROR, "Call to a member function %s() on %s",
Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
+ zval_dtor(free_op2.var);
+
+ if (EG(exception) != NULL) {
+ HANDLE_EXCEPTION();
+ }
+
+ /* No exception raised: Skip over arguments until fcall opcode with correct
+ * nesting level. Return NULL (except when return value unused) */
+ do {
+ opline++;
+
+ if (opline->opcode == ZEND_INIT_FCALL ||
+ opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
+ opline->opcode == ZEND_INIT_METHOD_CALL ||
+ opline->opcode == ZEND_INIT_STATIC_METHOD_CALL ||
+ opline->opcode == ZEND_INIT_USER_CALL ||
+ opline->opcode == ZEND_NEW
+ ) {
+ nesting++;
+ } else if (opline->opcode == ZEND_DO_FCALL) {
+ nesting--;
+ }
+ } while (nesting);
+
+ if (RETURN_VALUE_USED(opline)) {
+ ZVAL_NULL(EX_VAR(opline->result.var));
+ }
+
+ /* We've skipped EXT_FCALL_BEGIND, so also skip the ending opcode */
+ if ((opline + 1)->opcode == ZEND_EXT_FCALL_END) {
+ opline++;
+ }
+ ZEND_VM_JMP(++opline);
}
obj = Z_OBJ_P(object);