com php-src: Fixed segfault while with generating ext info: Zend/zend_execute.h Zend/zend_vm_def.h Zend/zend _vm_execute.h

From: Date: Mon, 06 Jul 2015 07:22:40 +0000
Subject: com php-src: Fixed segfault while with generating ext info: Zend/zend_execute.h Zend/zend_vm_def.h Zend/zend _vm_execute.h
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-87753@lists.php.net to get a copy of this message
Commit: ce550cefdee426d3dc3fcbe3864686c0cab7ad90 Author: Xinchen Hui <laruence@php.net> Mon, 6 Jul 2015 15:22:40 +0800 Parents: a97f7644725fab6a6c3681b3062f40994a218cb6 Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=ce550cefdee426d3dc3fcbe3864686c0cab7ad90 Log: Fixed segfault while with generating ext info Changed paths: M Zend/zend_execute.h M Zend/zend_vm_def..h M Zend/zend_vm_execute.h Diff: diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h index f595edc..2f8f637 100644 --- a/Zend/zend_execute.h +++ b/Zend/zend_execute.h @@ -355,6 +355,13 @@ void zend_cleanup_unfinished_execution(zend_execute_data *execute_data, uint32_t (slot)[1] = (ptr); \ } while (0) +#define SKIP_EXT_OPLINE(opline) do { \ + while (UNEXPECTED((opline)->opcode <= ZEND_TICKS \ + && (opline)->opcode >= ZEND_EXT_STMT)) { \ + (opline)--; \ + } \ + } while (0) + END_EXTERN_C() #endif /* ZEND_EXECUTE_H */ diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index d31bf9b..fb86a8d 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -7868,9 +7868,10 @@ ZEND_VM_HANDLER(151, ZEND_ASSERT_CHECK, ANY, ANY) if (EG(assertions) <= 0) { zend_op *target = OP_JMP_ADDR(opline, opline->op2); - - if (RETURN_VALUE_USED(target-1)) { - ZVAL_TRUE(EX_VAR((target-1)->result.var)); + zend_op *result = target - 1; + SKIP_EXT_OPLINE(result); + if (RETURN_VALUE_USED(result)) { + ZVAL_TRUE(EX_VAR(result->result.var)); } ZEND_VM_JMP(target); } else { diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 1d78881..a948964 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -1657,9 +1657,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND if (EG(assertions) <= 0) { zend_op *target = OP_JMP_ADDR(opline, opline->op2); - - if (RETURN_VALUE_USED(target-1)) { - ZVAL_TRUE(EX_VAR((target-1)->result.var)); + zend_op *result = target - 1; + SKIP_EXT_OPLINE(result); + if (RETURN_VALUE_USED(result)) { + ZVAL_TRUE(EX_VAR(result->result.var)); } ZEND_VM_JMP(target); } else {

« previous php.cvs (#87753) next »