Skip to content

Commit c299983

Browse files
committed
Merge branch 'master' of git.php.net:/php-src
2 parents 9881cb3 + b53f5cc commit c299983

File tree

2 files changed

+98
-300
lines changed

2 files changed

+98
-300
lines changed

Zend/zend_vm_def.h

+27-18
Original file line numberDiff line numberDiff line change
@@ -1746,28 +1746,42 @@ ZEND_VM_HANDLER(90, ZEND_FETCH_DIM_IS, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
17461746
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17471747
}
17481748

1749+
ZEND_VM_HELPER(zend_use_tmp_in_write_context_helper, ANY, ANY)
1750+
{
1751+
USE_OPLINE
1752+
1753+
SAVE_OPLINE();
1754+
zend_throw_error(NULL, "Cannot use temporary expression in write context");
1755+
FREE_UNFETCHED_OP2();
1756+
FREE_UNFETCHED_OP1();
1757+
ZVAL_UNDEF(EX_VAR(opline->result.var));
1758+
HANDLE_EXCEPTION();
1759+
}
1760+
1761+
ZEND_VM_HELPER(zend_use_undef_in_read_context_helper, ANY, ANY)
1762+
{
1763+
USE_OPLINE
1764+
1765+
SAVE_OPLINE();
1766+
zend_throw_error(NULL, "Cannot use [] for reading");
1767+
FREE_UNFETCHED_OP2();
1768+
FREE_UNFETCHED_OP1();
1769+
ZVAL_UNDEF(EX_VAR(opline->result.var));
1770+
HANDLE_EXCEPTION();
1771+
}
1772+
17491773
ZEND_VM_HANDLER(93, ZEND_FETCH_DIM_FUNC_ARG, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV)
17501774
{
17511775
USE_OPLINE
17521776

17531777
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
17541778
if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR))) {
1755-
SAVE_OPLINE();
1756-
zend_throw_error(NULL, "Cannot use temporary expression in write context");
1757-
FREE_UNFETCHED_OP2();
1758-
FREE_UNFETCHED_OP1();
1759-
ZVAL_UNDEF(EX_VAR(opline->result.var));
1760-
HANDLE_EXCEPTION();
1779+
ZEND_VM_DISPATCH_TO_HELPER(zend_use_tmp_in_write_context_helper);
17611780
}
17621781
ZEND_VM_DISPATCH_TO_HANDLER(ZEND_FETCH_DIM_W);
17631782
} else {
17641783
if (OP2_TYPE == IS_UNUSED) {
1765-
SAVE_OPLINE();
1766-
zend_throw_error(NULL, "Cannot use [] for reading");
1767-
FREE_UNFETCHED_OP2();
1768-
FREE_UNFETCHED_OP1();
1769-
ZVAL_UNDEF(EX_VAR(opline->result.var));
1770-
HANDLE_EXCEPTION();
1784+
ZEND_VM_DISPATCH_TO_HELPER(zend_use_undef_in_read_context_helper);
17711785
}
17721786
ZEND_VM_DISPATCH_TO_HANDLER(ZEND_FETCH_DIM_R);
17731787
}
@@ -2040,12 +2054,7 @@ ZEND_VM_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, CONST|TMP|VAR|UNUSED|THIS|CV, CONST
20402054
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
20412055
/* Behave like FETCH_OBJ_W */
20422056
if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR))) {
2043-
SAVE_OPLINE();
2044-
zend_throw_error(NULL, "Cannot use temporary expression in write context");
2045-
FREE_UNFETCHED_OP2();
2046-
FREE_UNFETCHED_OP1();
2047-
ZVAL_UNDEF(EX_VAR(opline->result.var));
2048-
HANDLE_EXCEPTION();
2057+
ZEND_VM_DISPATCH_TO_HELPER(zend_use_tmp_in_write_context_helper);
20492058
}
20502059

20512060
ZEND_VM_DISPATCH_TO_HANDLER(ZEND_FETCH_OBJ_W);

0 commit comments

Comments
 (0)