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: | Xinchen Hui | 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 {