mirror of
https://github.com/php/php-src.git
synced 2024-09-24 03:17:26 +00:00
Safe exit from executor()
This commit is contained in:
parent
d4664800ac
commit
21f68908b9
@ -1446,7 +1446,7 @@ ZEND_API void execute_internal(zend_execute_data *execute_data_ptr, int return_v
|
|||||||
EX(opline)++; \
|
EX(opline)++; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ZEND_VM_RETURN_FROM_EXECUTE_LOOP() \
|
#define ZEND_VM_EXIT_FROM_EXECUTE_LOOP() \
|
||||||
free_alloca(EX(CVs)); \
|
free_alloca(EX(CVs)); \
|
||||||
if (EX(op_array)->T < TEMP_VAR_STACK_LIMIT) { \
|
if (EX(op_array)->T < TEMP_VAR_STACK_LIMIT) { \
|
||||||
free_alloca(EX(Ts)); \
|
free_alloca(EX(Ts)); \
|
||||||
@ -1455,7 +1455,10 @@ ZEND_API void execute_internal(zend_execute_data *execute_data_ptr, int return_v
|
|||||||
} \
|
} \
|
||||||
EG(in_execution) = EX(original_in_execution); \
|
EG(in_execution) = EX(original_in_execution); \
|
||||||
EG(current_execute_data) = EX(prev_execute_data); \
|
EG(current_execute_data) = EX(prev_execute_data); \
|
||||||
EG(opline_ptr) = NULL; \
|
EG(opline_ptr) = NULL;
|
||||||
|
|
||||||
|
#define ZEND_VM_RETURN_FROM_EXECUTE_LOOP() \
|
||||||
|
ZEND_VM_EXIT_FROM_EXECUTE_LOOP(); \
|
||||||
ZEND_VM_RETURN()
|
ZEND_VM_RETURN()
|
||||||
|
|
||||||
#include "zend_vm_execute.h"
|
#include "zend_vm_execute.h"
|
||||||
|
@ -3885,6 +3885,7 @@ ZEND_VM_HANDLER(79, ZEND_EXIT, CONST|TMP|VAR|UNUSED|CV, ANY)
|
|||||||
FREE_OP1();
|
FREE_OP1();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
ZEND_VM_EXIT_FROM_EXECUTE_LOOP();
|
||||||
zend_bailout();
|
zend_bailout();
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
}
|
}
|
||||||
@ -4159,7 +4160,7 @@ ZEND_VM_HANDLER(150, ZEND_USER_OPCODE, ANY, ANY)
|
|||||||
case ZEND_USER_OPCODE_CONTINUE:
|
case ZEND_USER_OPCODE_CONTINUE:
|
||||||
ZEND_VM_CONTINUE();
|
ZEND_VM_CONTINUE();
|
||||||
case ZEND_USER_OPCODE_RETURN:
|
case ZEND_USER_OPCODE_RETURN:
|
||||||
ZEND_VM_RETURN();
|
ZEND_VM_RETURN_FROM_EXECUTE_LOOP();
|
||||||
case ZEND_USER_OPCODE_DISPATCH:
|
case ZEND_USER_OPCODE_DISPATCH:
|
||||||
ZEND_VM_DISPATCH(EX(opline)->opcode, EX(opline));
|
ZEND_VM_DISPATCH(EX(opline)->opcode, EX(opline));
|
||||||
default:
|
default:
|
||||||
|
@ -615,7 +615,7 @@ static int ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
|||||||
case ZEND_USER_OPCODE_CONTINUE:
|
case ZEND_USER_OPCODE_CONTINUE:
|
||||||
ZEND_VM_CONTINUE();
|
ZEND_VM_CONTINUE();
|
||||||
case ZEND_USER_OPCODE_RETURN:
|
case ZEND_USER_OPCODE_RETURN:
|
||||||
ZEND_VM_RETURN();
|
ZEND_VM_RETURN_FROM_EXECUTE_LOOP();
|
||||||
case ZEND_USER_OPCODE_DISPATCH:
|
case ZEND_USER_OPCODE_DISPATCH:
|
||||||
ZEND_VM_DISPATCH(EX(opline)->opcode, EX(opline));
|
ZEND_VM_DISPATCH(EX(opline)->opcode, EX(opline));
|
||||||
default:
|
default:
|
||||||
@ -2194,6 +2194,7 @@ static int ZEND_EXIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
|||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
ZEND_VM_EXIT_FROM_EXECUTE_LOOP();
|
||||||
zend_bailout();
|
zend_bailout();
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
}
|
}
|
||||||
@ -5402,6 +5403,7 @@ static int ZEND_EXIT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
|||||||
zval_dtor(free_op1.var);
|
zval_dtor(free_op1.var);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
ZEND_VM_EXIT_FROM_EXECUTE_LOOP();
|
||||||
zend_bailout();
|
zend_bailout();
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
}
|
}
|
||||||
@ -8854,6 +8856,7 @@ static int ZEND_EXIT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
|||||||
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
|
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
ZEND_VM_EXIT_FROM_EXECUTE_LOOP();
|
||||||
zend_bailout();
|
zend_bailout();
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
}
|
}
|
||||||
@ -16467,6 +16470,7 @@ static int ZEND_EXIT_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
|||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
ZEND_VM_EXIT_FROM_EXECUTE_LOOP();
|
||||||
zend_bailout();
|
zend_bailout();
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
}
|
}
|
||||||
@ -22219,6 +22223,7 @@ static int ZEND_EXIT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
|||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
ZEND_VM_EXIT_FROM_EXECUTE_LOOP();
|
||||||
zend_bailout();
|
zend_bailout();
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user