diff options
author | Nikita Popov <nikic@php.net> | 2016-07-14 18:39:48 +0200 |
---|---|---|
committer | Nikita Popov <nikic@php.net> | 2016-07-14 18:39:48 +0200 |
commit | 0bda0422af0a9a920135bf3d7b7b4784eb0df802 (patch) | |
tree | 53c9577143b24f034fb560c97f904077c2f63ba1 | |
parent | 5aaffb79084ba929675a7e8543f91ff324439939 (diff) | |
parent | 411eee7b5ae8b529b10184f98e3f9b02d93ba864 (diff) | |
download | php-git-0bda0422af0a9a920135bf3d7b7b4784eb0df802.tar.gz |
Merge branch 'PHP-7.0'
Conflicts:
Zend/zend_vm_execute.h
-rw-r--r-- | Zend/zend_API.c | 2 | ||||
-rw-r--r-- | Zend/zend_exceptions.c | 2 | ||||
-rw-r--r-- | Zend/zend_execute.c | 5 | ||||
-rw-r--r-- | Zend/zend_vm_def.h | 3 | ||||
-rw-r--r-- | Zend/zend_vm_execute.h | 12 | ||||
-rw-r--r-- | ext/date/php_date.c | 1 |
6 files changed, 23 insertions, 2 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 096b494e30..de9cdfd88d 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -3104,7 +3104,7 @@ get_function_via_handler: retval = 0; } else { zend_throw_error(NULL, "Cannot call abstract method %s::%s()", ZSTR_VAL(fcc->calling_scope->name), ZSTR_VAL(fcc->function_handler->common.function_name)); - return 0; + retval = 0; } } else if (!fcc->object && !(fcc->function_handler->common.fn_flags & ZEND_ACC_STATIC)) { int severity; diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c index 7fd55a4fc8..5301850310 100644 --- a/Zend/zend_exceptions.c +++ b/Zend/zend_exceptions.c @@ -531,6 +531,7 @@ static void _build_trace_args(zval *arg, smart_str *str) /* {{{ */ smart_str_appends(str, "Object("); smart_str_appends(str, ZSTR_VAL(class_name)); smart_str_appends(str, "), "); + zend_string_release(class_name); break; } } @@ -1039,6 +1040,7 @@ ZEND_API ZEND_COLD void zend_throw_exception_object(zval *exception) /* {{{ */ if (!exception_ce || !instanceof_function(exception_ce, zend_ce_throwable)) { zend_throw_error(NULL, "Cannot throw objects that do not implement Throwable"); + zval_ptr_dtor(exception); return; } zend_throw_exception_internal(exception); diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index d1c73917ca..a81ebba418 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -2380,9 +2380,12 @@ static void cleanup_unfinished_calls(zend_execute_data *execute_data, uint32_t o if (UNEXPECTED(opline->opcode == ZEND_INIT_FCALL || opline->opcode == ZEND_INIT_FCALL_BY_NAME || + opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME || opline->opcode == ZEND_INIT_DYNAMIC_CALL || + opline->opcode == ZEND_INIT_USER_CALL || opline->opcode == ZEND_INIT_METHOD_CALL || - opline->opcode == ZEND_INIT_STATIC_METHOD_CALL)) { + opline->opcode == ZEND_INIT_STATIC_METHOD_CALL || + opline->opcode == ZEND_NEW)) { ZEND_ASSERT(op_num); opline--; } diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index a40b2cb39c..ecac3c0dd8 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2445,6 +2445,7 @@ ZEND_VM_HANDLER(39, ZEND_ASSIGN_REF, VAR|CV, VAR|CV, SRC) UNEXPECTED(!Z_ISERROR_P(EX_VAR(opline->op1.var)))) { zend_throw_error(NULL, "Cannot assign by reference to overloaded object"); + FREE_OP1_VAR_PTR(); FREE_OP2_VAR_PTR(); HANDLE_EXCEPTION(); @@ -7494,12 +7495,14 @@ ZEND_VM_HANDLER(142, ZEND_YIELD_FROM, CONST|TMP|VAR|CV, ANY) if (Z_ISUNDEF(new_gen->retval)) { if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) { zend_throw_error(NULL, "Impossible to yield from the Generator being currently run"); + zval_ptr_dtor(val); HANDLE_EXCEPTION(); } else { zend_generator_yield_from(generator, new_gen); } } else if (UNEXPECTED(new_gen->execute_data == NULL)) { zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue"); + zval_ptr_dtor(val); HANDLE_EXCEPTION(); } else { if (RETURN_VALUE_USED(opline)) { diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 5a53938ef3..094fb8f827 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -3903,12 +3903,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER( if (Z_ISUNDEF(new_gen->retval)) { if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) { zend_throw_error(NULL, "Impossible to yield from the Generator being currently run"); + zval_ptr_dtor(val); HANDLE_EXCEPTION(); } else { zend_generator_yield_from(generator, new_gen); } } else if (UNEXPECTED(new_gen->execute_data == NULL)) { zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue"); + zval_ptr_dtor(val); HANDLE_EXCEPTION(); } else { if (RETURN_VALUE_USED(opline)) { @@ -12944,12 +12946,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZE if (Z_ISUNDEF(new_gen->retval)) { if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) { zend_throw_error(NULL, "Impossible to yield from the Generator being currently run"); + zval_ptr_dtor(val); HANDLE_EXCEPTION(); } else { zend_generator_yield_from(generator, new_gen); } } else if (UNEXPECTED(new_gen->execute_data == NULL)) { zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue"); + zval_ptr_dtor(val); HANDLE_EXCEPTION(); } else { if (RETURN_VALUE_USED(opline)) { @@ -16887,12 +16891,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZE if (Z_ISUNDEF(new_gen->retval)) { if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) { zend_throw_error(NULL, "Impossible to yield from the Generator being currently run"); + zval_ptr_dtor(val); HANDLE_EXCEPTION(); } else { zend_generator_yield_from(generator, new_gen); } } else if (UNEXPECTED(new_gen->execute_data == NULL)) { zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue"); + zval_ptr_dtor(val); HANDLE_EXCEPTION(); } else { if (RETURN_VALUE_USED(opline)) { @@ -20399,6 +20405,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLE UNEXPECTED(!Z_ISERROR_P(EX_VAR(opline->op1.var)))) { zend_throw_error(NULL, "Cannot assign by reference to overloaded object"); + if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);}; HANDLE_EXCEPTION(); @@ -24238,6 +24245,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER UNEXPECTED(!Z_ISERROR_P(EX_VAR(opline->op1.var)))) { zend_throw_error(NULL, "Cannot assign by reference to overloaded object"); + if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; HANDLE_EXCEPTION(); @@ -35640,12 +35648,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEN if (Z_ISUNDEF(new_gen->retval)) { if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) { zend_throw_error(NULL, "Impossible to yield from the Generator being currently run"); + zval_ptr_dtor(val); HANDLE_EXCEPTION(); } else { zend_generator_yield_from(generator, new_gen); } } else if (UNEXPECTED(new_gen->execute_data == NULL)) { zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue"); + zval_ptr_dtor(val); HANDLE_EXCEPTION(); } else { if (RETURN_VALUE_USED(opline)) { @@ -40772,6 +40782,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER UNEXPECTED(!Z_ISERROR_P(EX_VAR(opline->op1.var)))) { zend_throw_error(NULL, "Cannot assign by reference to overloaded object"); + if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);}; HANDLE_EXCEPTION(); @@ -45977,6 +45988,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER( zend_throw_error(NULL, "Cannot assign by reference to overloaded object"); + HANDLE_EXCEPTION(); } else if (IS_CV == IS_VAR && diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 4114797702..e960161987 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -3617,6 +3617,7 @@ static int timezone_initialize(php_timezone_obj *tzobj, /*const*/ char *tz, size if (strlen(tz) != tz_len) { php_error_docref(NULL, E_WARNING, "Timezone must not contain null bytes"); + efree(dummy_t); return FAILURE; } |