@@ -1746,28 +1746,42 @@ ZEND_VM_HANDLER(90, ZEND_FETCH_DIM_IS, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
17461746ZEND_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+
17491773ZEND_VM_HANDLER (93 , ZEND_FETCH_DIM_FUNC_ARG , CONST |TMP |VAR |CV , CONST |TMPVAR |UNUSED |NEXT |CV )
17501774{
17511775USE_OPLINE
17521776
17531777if (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 }
17621781ZEND_VM_DISPATCH_TO_HANDLER (ZEND_FETCH_DIM_W );
17631782} else {
17641783if (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}
17721786ZEND_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
20402054if (UNEXPECTED (ZEND_CALL_INFO (EX (call )) & ZEND_CALL_SEND_ARG_BY_REF )) {
20412055/* Behave like FETCH_OBJ_W */
20422056if ((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
20512060ZEND_VM_DISPATCH_TO_HANDLER (ZEND_FETCH_OBJ_W );
0 commit comments