mirror of
https://github.com/php/php-src.git
synced 2025-08-20 01:14:28 +02:00
Merge branch 'master' into openssl_aead
This commit is contained in:
commit
19e60a1f52
14 changed files with 504 additions and 108 deletions
|
@ -646,6 +646,10 @@ ZEND_API int pass_two(zend_op_array *op_array)
|
|||
case ZEND_DECLARE_ANON_CLASS:
|
||||
ZEND_PASS_TWO_UPDATE_JMP_TARGET(op_array, opline, opline->op1);
|
||||
break;
|
||||
case ZEND_CATCH:
|
||||
/* absolute index to relative offset */
|
||||
opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, opline->extended_value);
|
||||
break;
|
||||
case ZEND_JMPZNZ:
|
||||
/* absolute index to relative offset */
|
||||
opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, opline->extended_value);
|
||||
|
|
|
@ -872,7 +872,7 @@ ZEND_VM_HELPER_EX(zend_binary_assign_op_helper, VAR|CV, CONST|TMPVAR|CV, binary_
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(23, ZEND_ASSIGN_ADD, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
||||
ZEND_VM_HANDLER(23, ZEND_ASSIGN_ADD, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV, DIM_OBJ)
|
||||
{
|
||||
#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
|
||||
USE_OPLINE
|
||||
|
@ -892,7 +892,7 @@ ZEND_VM_HANDLER(23, ZEND_ASSIGN_ADD, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
|||
#endif
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(24, ZEND_ASSIGN_SUB, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
||||
ZEND_VM_HANDLER(24, ZEND_ASSIGN_SUB, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV, DIM_OBJ)
|
||||
{
|
||||
#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
|
||||
USE_OPLINE
|
||||
|
@ -912,7 +912,7 @@ ZEND_VM_HANDLER(24, ZEND_ASSIGN_SUB, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
|||
#endif
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(25, ZEND_ASSIGN_MUL, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
||||
ZEND_VM_HANDLER(25, ZEND_ASSIGN_MUL, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV, DIM_OBJ)
|
||||
{
|
||||
#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
|
||||
USE_OPLINE
|
||||
|
@ -932,7 +932,7 @@ ZEND_VM_HANDLER(25, ZEND_ASSIGN_MUL, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
|||
#endif
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(26, ZEND_ASSIGN_DIV, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
||||
ZEND_VM_HANDLER(26, ZEND_ASSIGN_DIV, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV, DIM_OBJ)
|
||||
{
|
||||
#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
|
||||
USE_OPLINE
|
||||
|
@ -952,7 +952,7 @@ ZEND_VM_HANDLER(26, ZEND_ASSIGN_DIV, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
|||
#endif
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(27, ZEND_ASSIGN_MOD, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
||||
ZEND_VM_HANDLER(27, ZEND_ASSIGN_MOD, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV, DIM_OBJ)
|
||||
{
|
||||
#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
|
||||
USE_OPLINE
|
||||
|
@ -972,7 +972,7 @@ ZEND_VM_HANDLER(27, ZEND_ASSIGN_MOD, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
|||
#endif
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(28, ZEND_ASSIGN_SL, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
||||
ZEND_VM_HANDLER(28, ZEND_ASSIGN_SL, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV, DIM_OBJ)
|
||||
{
|
||||
#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
|
||||
USE_OPLINE
|
||||
|
@ -992,7 +992,7 @@ ZEND_VM_HANDLER(28, ZEND_ASSIGN_SL, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
|||
#endif
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(29, ZEND_ASSIGN_SR, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
||||
ZEND_VM_HANDLER(29, ZEND_ASSIGN_SR, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV, DIM_OBJ)
|
||||
{
|
||||
#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
|
||||
USE_OPLINE
|
||||
|
@ -1012,7 +1012,7 @@ ZEND_VM_HANDLER(29, ZEND_ASSIGN_SR, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
|||
#endif
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(30, ZEND_ASSIGN_CONCAT, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
||||
ZEND_VM_HANDLER(30, ZEND_ASSIGN_CONCAT, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV, DIM_OBJ)
|
||||
{
|
||||
#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
|
||||
USE_OPLINE
|
||||
|
@ -1032,7 +1032,7 @@ ZEND_VM_HANDLER(30, ZEND_ASSIGN_CONCAT, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
|||
#endif
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(31, ZEND_ASSIGN_BW_OR, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
||||
ZEND_VM_HANDLER(31, ZEND_ASSIGN_BW_OR, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV, DIM_OBJ)
|
||||
{
|
||||
#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
|
||||
USE_OPLINE
|
||||
|
@ -1052,7 +1052,7 @@ ZEND_VM_HANDLER(31, ZEND_ASSIGN_BW_OR, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
|||
#endif
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(32, ZEND_ASSIGN_BW_AND, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
||||
ZEND_VM_HANDLER(32, ZEND_ASSIGN_BW_AND, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV, DIM_OBJ)
|
||||
{
|
||||
#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
|
||||
USE_OPLINE
|
||||
|
@ -1072,7 +1072,7 @@ ZEND_VM_HANDLER(32, ZEND_ASSIGN_BW_AND, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
|||
#endif
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(33, ZEND_ASSIGN_BW_XOR, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
||||
ZEND_VM_HANDLER(33, ZEND_ASSIGN_BW_XOR, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV, DIM_OBJ)
|
||||
{
|
||||
#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
|
||||
USE_OPLINE
|
||||
|
@ -1092,7 +1092,7 @@ ZEND_VM_HANDLER(33, ZEND_ASSIGN_BW_XOR, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
|||
#endif
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(167, ZEND_ASSIGN_POW, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
||||
ZEND_VM_HANDLER(167, ZEND_ASSIGN_POW, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV, DIM_OBJ)
|
||||
{
|
||||
#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
|
||||
USE_OPLINE
|
||||
|
@ -1564,22 +1564,22 @@ ZEND_VM_HELPER_EX(zend_fetch_var_address_helper, CONST|TMPVAR|CV, UNUSED, int ty
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(80, ZEND_FETCH_R, CONST|TMPVAR|CV, UNUSED)
|
||||
ZEND_VM_HANDLER(80, ZEND_FETCH_R, CONST|TMPVAR|CV, UNUSED, VAR_FETCH)
|
||||
{
|
||||
ZEND_VM_DISPATCH_TO_HELPER_EX(zend_fetch_var_address_helper, type, BP_VAR_R);
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(83, ZEND_FETCH_W, CONST|TMPVAR|CV, UNUSED)
|
||||
ZEND_VM_HANDLER(83, ZEND_FETCH_W, CONST|TMPVAR|CV, UNUSED, VAR_FETCH)
|
||||
{
|
||||
ZEND_VM_DISPATCH_TO_HELPER_EX(zend_fetch_var_address_helper, type, BP_VAR_W);
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(86, ZEND_FETCH_RW, CONST|TMPVAR|CV, UNUSED)
|
||||
ZEND_VM_HANDLER(86, ZEND_FETCH_RW, CONST|TMPVAR|CV, UNUSED, VAR_FETCH)
|
||||
{
|
||||
ZEND_VM_DISPATCH_TO_HELPER_EX(zend_fetch_var_address_helper, type, BP_VAR_RW);
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(92, ZEND_FETCH_FUNC_ARG, CONST|TMPVAR|CV, UNUSED)
|
||||
ZEND_VM_HANDLER(92, ZEND_FETCH_FUNC_ARG, CONST|TMPVAR|CV, UNUSED, VAR_FETCH)
|
||||
{
|
||||
USE_OPLINE
|
||||
|
||||
|
@ -1590,12 +1590,12 @@ ZEND_VM_HANDLER(92, ZEND_FETCH_FUNC_ARG, CONST|TMPVAR|CV, UNUSED)
|
|||
}
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(95, ZEND_FETCH_UNSET, CONST|TMPVAR|CV, UNUSED)
|
||||
ZEND_VM_HANDLER(95, ZEND_FETCH_UNSET, CONST|TMPVAR|CV, UNUSED, VAR_FETCH)
|
||||
{
|
||||
ZEND_VM_DISPATCH_TO_HELPER_EX(zend_fetch_var_address_helper, type, BP_VAR_UNSET);
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(89, ZEND_FETCH_IS, CONST|TMPVAR|CV, UNUSED)
|
||||
ZEND_VM_HANDLER(89, ZEND_FETCH_IS, CONST|TMPVAR|CV, UNUSED, VAR_FETCH)
|
||||
{
|
||||
ZEND_VM_DISPATCH_TO_HELPER_EX(zend_fetch_var_address_helper, type, BP_VAR_IS);
|
||||
}
|
||||
|
@ -2514,7 +2514,7 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY)
|
|||
}
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(42, ZEND_JMP, ANY, ANY)
|
||||
ZEND_VM_HANDLER(42, ZEND_JMP, JMP_ADDR, ANY)
|
||||
{
|
||||
USE_OPLINE
|
||||
|
||||
|
@ -2522,7 +2522,7 @@ ZEND_VM_HANDLER(42, ZEND_JMP, ANY, ANY)
|
|||
ZEND_VM_CONTINUE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(43, ZEND_JMPZ, CONST|TMPVAR|CV, ANY)
|
||||
ZEND_VM_HANDLER(43, ZEND_JMPZ, CONST|TMPVAR|CV, JMP_ADDR)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1;
|
||||
|
@ -2557,7 +2557,7 @@ ZEND_VM_HANDLER(43, ZEND_JMPZ, CONST|TMPVAR|CV, ANY)
|
|||
ZEND_VM_JMP(opline);
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(44, ZEND_JMPNZ, CONST|TMPVAR|CV, ANY)
|
||||
ZEND_VM_HANDLER(44, ZEND_JMPNZ, CONST|TMPVAR|CV, JMP_ADDR)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1;
|
||||
|
@ -2591,7 +2591,7 @@ ZEND_VM_HANDLER(44, ZEND_JMPNZ, CONST|TMPVAR|CV, ANY)
|
|||
ZEND_VM_JMP(opline);
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(45, ZEND_JMPZNZ, CONST|TMPVAR|CV, ANY)
|
||||
ZEND_VM_HANDLER(45, ZEND_JMPZNZ, CONST|TMPVAR|CV, JMP_ADDR, JMP_ADDR)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1;
|
||||
|
@ -2628,7 +2628,7 @@ ZEND_VM_HANDLER(45, ZEND_JMPZNZ, CONST|TMPVAR|CV, ANY)
|
|||
ZEND_VM_JMP(opline);
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(46, ZEND_JMPZ_EX, CONST|TMPVAR|CV, ANY)
|
||||
ZEND_VM_HANDLER(46, ZEND_JMPZ_EX, CONST|TMPVAR|CV, JMP_ADDR)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1;
|
||||
|
@ -2671,7 +2671,7 @@ ZEND_VM_HANDLER(46, ZEND_JMPZ_EX, CONST|TMPVAR|CV, ANY)
|
|||
ZEND_VM_JMP(opline);
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(47, ZEND_JMPNZ_EX, CONST|TMPVAR|CV, ANY)
|
||||
ZEND_VM_HANDLER(47, ZEND_JMPNZ_EX, CONST|TMPVAR|CV, JMP_ADDR)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1;
|
||||
|
@ -2801,7 +2801,7 @@ ZEND_VM_HANDLER(53, ZEND_FAST_CONCAT, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(54, ZEND_ROPE_INIT, UNUSED, CONST|TMPVAR|CV)
|
||||
ZEND_VM_HANDLER(54, ZEND_ROPE_INIT, UNUSED, CONST|TMPVAR|CV, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op2;
|
||||
|
@ -2834,7 +2834,7 @@ ZEND_VM_HANDLER(54, ZEND_ROPE_INIT, UNUSED, CONST|TMPVAR|CV)
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(55, ZEND_ROPE_ADD, TMP, CONST|TMPVAR|CV)
|
||||
ZEND_VM_HANDLER(55, ZEND_ROPE_ADD, TMP, CONST|TMPVAR|CV, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op2;
|
||||
|
@ -2867,7 +2867,7 @@ ZEND_VM_HANDLER(55, ZEND_ROPE_ADD, TMP, CONST|TMPVAR|CV)
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(56, ZEND_ROPE_END, TMP, CONST|TMPVAR|CV)
|
||||
ZEND_VM_HANDLER(56, ZEND_ROPE_END, TMP, CONST|TMPVAR|CV, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op2;
|
||||
|
@ -2920,7 +2920,7 @@ ZEND_VM_HANDLER(56, ZEND_ROPE_END, TMP, CONST|TMPVAR|CV)
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(109, ZEND_FETCH_CLASS, ANY, CONST|TMPVAR|UNUSED|CV)
|
||||
ZEND_VM_HANDLER(109, ZEND_FETCH_CLASS, ANY, CONST|TMPVAR|UNUSED|CV, CLASS_FETCH)
|
||||
{
|
||||
USE_OPLINE
|
||||
|
||||
|
@ -2963,7 +2963,7 @@ ZEND_VM_C_LABEL(try_class_name):
|
|||
}
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|CV, CONST|TMPVAR|CV)
|
||||
ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|CV, CONST|TMPVAR|CV, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *function_name;
|
||||
|
@ -3084,7 +3084,7 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|CV, CONST|TMPVAR
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CONST|VAR, CONST|TMPVAR|UNUSED|CV)
|
||||
ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CONST|VAR, CONST|TMPVAR|UNUSED|CV, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *function_name;
|
||||
|
@ -3220,7 +3220,7 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CONST|VAR, CONST|TMPVA
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(59, ZEND_INIT_FCALL_BY_NAME, ANY, CONST)
|
||||
ZEND_VM_HANDLER(59, ZEND_INIT_FCALL_BY_NAME, ANY, CONST, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_function *fbc;
|
||||
|
@ -3247,7 +3247,7 @@ ZEND_VM_HANDLER(59, ZEND_INIT_FCALL_BY_NAME, ANY, CONST)
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(128, ZEND_INIT_DYNAMIC_CALL, ANY, CONST|TMPVAR|CV)
|
||||
ZEND_VM_HANDLER(128, ZEND_INIT_DYNAMIC_CALL, ANY, CONST|TMPVAR|CV, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_function *fbc;
|
||||
|
@ -3460,7 +3460,7 @@ ZEND_VM_C_LABEL(try_function_name):
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(118, ZEND_INIT_USER_CALL, CONST, CONST|TMPVAR|CV)
|
||||
ZEND_VM_HANDLER(118, ZEND_INIT_USER_CALL, CONST, CONST|TMPVAR|CV, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op2;
|
||||
|
@ -3519,7 +3519,7 @@ ZEND_VM_HANDLER(118, ZEND_INIT_USER_CALL, CONST, CONST|TMPVAR|CV)
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(69, ZEND_INIT_NS_FCALL_BY_NAME, ANY, CONST)
|
||||
ZEND_VM_HANDLER(69, ZEND_INIT_NS_FCALL_BY_NAME, ANY, CONST, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *func_name;
|
||||
|
@ -3552,7 +3552,7 @@ ZEND_VM_HANDLER(69, ZEND_INIT_NS_FCALL_BY_NAME, ANY, CONST)
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(61, ZEND_INIT_FCALL, ANY, CONST)
|
||||
ZEND_VM_HANDLER(61, ZEND_INIT_FCALL, ANY, CONST, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op2;
|
||||
|
@ -4205,7 +4205,7 @@ ZEND_VM_HANDLER(108, ZEND_THROW, CONST|TMP|VAR|CV, ANY)
|
|||
HANDLE_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(107, ZEND_CATCH, CONST, CV)
|
||||
ZEND_VM_HANDLER(107, ZEND_CATCH, CONST, CV, JMP_ADDR)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_class_entry *ce, *catch_ce;
|
||||
|
@ -4215,8 +4215,8 @@ ZEND_VM_HANDLER(107, ZEND_CATCH, CONST, CV)
|
|||
/* Check whether an exception has been thrown, if not, jump over code */
|
||||
zend_exception_restore();
|
||||
if (EG(exception) == NULL) {
|
||||
ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[opline->extended_value]);
|
||||
ZEND_VM_CONTINUE(); /* CHECK_ME */
|
||||
ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
|
||||
ZEND_VM_CONTINUE();
|
||||
}
|
||||
catch_ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
|
||||
if (UNEXPECTED(catch_ce == NULL)) {
|
||||
|
@ -4238,8 +4238,8 @@ ZEND_VM_HANDLER(107, ZEND_CATCH, CONST, CV)
|
|||
zend_throw_exception_internal(NULL);
|
||||
HANDLE_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[opline->extended_value]);
|
||||
ZEND_VM_CONTINUE(); /* CHECK_ME */
|
||||
ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
|
||||
ZEND_VM_CONTINUE();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4255,7 +4255,7 @@ ZEND_VM_HANDLER(107, ZEND_CATCH, CONST, CV)
|
|||
}
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(65, ZEND_SEND_VAL, CONST|TMP, ANY)
|
||||
ZEND_VM_HANDLER(65, ZEND_SEND_VAL, CONST|TMP, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *value, *arg;
|
||||
|
@ -4272,7 +4272,7 @@ ZEND_VM_HANDLER(65, ZEND_SEND_VAL, CONST|TMP, ANY)
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(116, ZEND_SEND_VAL_EX, CONST|TMP, ANY)
|
||||
ZEND_VM_HANDLER(116, ZEND_SEND_VAL_EX, CONST|TMP, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *value, *arg;
|
||||
|
@ -4303,7 +4303,7 @@ ZEND_VM_C_LABEL(send_val_by_ref):
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(117, ZEND_SEND_VAR, VAR|CV, ANY)
|
||||
ZEND_VM_HANDLER(117, ZEND_SEND_VAR, VAR|CV, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *varptr, *arg;
|
||||
|
@ -4342,7 +4342,7 @@ ZEND_VM_HANDLER(117, ZEND_SEND_VAR, VAR|CV, ANY)
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(106, ZEND_SEND_VAR_NO_REF, VAR, ANY)
|
||||
ZEND_VM_HANDLER(106, ZEND_SEND_VAR_NO_REF, VAR, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1;
|
||||
|
@ -4379,7 +4379,7 @@ ZEND_VM_HANDLER(106, ZEND_SEND_VAR_NO_REF, VAR, ANY)
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(67, ZEND_SEND_REF, VAR|CV, ANY)
|
||||
ZEND_VM_HANDLER(67, ZEND_SEND_REF, VAR|CV, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1;
|
||||
|
@ -4414,7 +4414,7 @@ ZEND_VM_HANDLER(67, ZEND_SEND_REF, VAR|CV, ANY)
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(66, ZEND_SEND_VAR_EX, VAR|CV, ANY)
|
||||
ZEND_VM_HANDLER(66, ZEND_SEND_VAR_EX, VAR|CV, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *varptr, *arg;
|
||||
|
@ -4725,7 +4725,7 @@ ZEND_VM_C_LABEL(send_array):
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(120, ZEND_SEND_USER, VAR|CV, ANY)
|
||||
ZEND_VM_HANDLER(120, ZEND_SEND_USER, VAR|CV, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *arg, *param;
|
||||
|
@ -4780,7 +4780,7 @@ ZEND_VM_HANDLER(120, ZEND_SEND_USER, VAR|CV, ANY)
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(63, ZEND_RECV, ANY, ANY)
|
||||
ZEND_VM_HANDLER(63, ZEND_RECV, NUM, ANY)
|
||||
{
|
||||
USE_OPLINE
|
||||
uint32_t arg_num = opline->op1.num;
|
||||
|
@ -4801,7 +4801,7 @@ ZEND_VM_HANDLER(63, ZEND_RECV, ANY, ANY)
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(64, ZEND_RECV_INIT, ANY, CONST)
|
||||
ZEND_VM_HANDLER(64, ZEND_RECV_INIT, NUM, CONST)
|
||||
{
|
||||
USE_OPLINE
|
||||
uint32_t arg_num;
|
||||
|
@ -4840,7 +4840,7 @@ ZEND_VM_HANDLER(64, ZEND_RECV_INIT, ANY, CONST)
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(164, ZEND_RECV_VARIADIC, ANY, ANY)
|
||||
ZEND_VM_HANDLER(164, ZEND_RECV_VARIADIC, NUM, ANY)
|
||||
{
|
||||
USE_OPLINE
|
||||
uint32_t arg_num = opline->op1.num;
|
||||
|
@ -4971,7 +4971,7 @@ ZEND_VM_HANDLER(48, ZEND_CASE, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(68, ZEND_NEW, UNUSED|CONST|VAR, ANY)
|
||||
ZEND_VM_HANDLER(68, ZEND_NEW, UNUSED|CONST|VAR, JMP_ADDR, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval object_zval;
|
||||
|
@ -5106,7 +5106,7 @@ ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|CV, ANY)
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(99, ZEND_FETCH_CONSTANT, UNUSED, CONST)
|
||||
ZEND_VM_HANDLER(99, ZEND_FETCH_CONSTANT, UNUSED, CONST, CONST_FETCH)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_constant *c;
|
||||
|
@ -5225,7 +5225,7 @@ ZEND_VM_HANDLER(181, ZEND_FETCH_CLASS_CONSTANT, VAR|CONST|UNUSED, CONST)
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(72, ZEND_ADD_ARRAY_ELEMENT, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUSED|CV)
|
||||
ZEND_VM_HANDLER(72, ZEND_ADD_ARRAY_ELEMENT, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUSED|CV, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1;
|
||||
|
@ -5324,7 +5324,7 @@ ZEND_VM_C_LABEL(num_index):
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(71, ZEND_INIT_ARRAY, CONST|TMP|VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
|
||||
ZEND_VM_HANDLER(71, ZEND_INIT_ARRAY, CONST|TMP|VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV, ARRAY_INIT)
|
||||
{
|
||||
zval *array;
|
||||
uint32_t size;
|
||||
|
@ -5355,7 +5355,7 @@ ZEND_VM_HANDLER(71, ZEND_INIT_ARRAY, CONST|TMP|VAR|UNUSED|CV, CONST|TMPVAR|UNUSE
|
|||
}
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(21, ZEND_CAST, CONST|TMP|VAR|CV, ANY)
|
||||
ZEND_VM_HANDLER(21, ZEND_CAST, CONST|TMP|VAR|CV, ANY, TYPE)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1;
|
||||
|
@ -5457,7 +5457,7 @@ ZEND_VM_HANDLER(21, ZEND_CAST, CONST|TMP|VAR|CV, ANY)
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY)
|
||||
ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY, EVAL)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_op_array *new_op_array=NULL;
|
||||
|
@ -5586,7 +5586,7 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY)
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(74, ZEND_UNSET_VAR, CONST|TMPVAR|CV, UNUSED)
|
||||
ZEND_VM_HANDLER(74, ZEND_UNSET_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval tmp, *varname;
|
||||
|
@ -5828,7 +5828,7 @@ ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|CV, CONST|TMPVAR|CV)
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, ANY)
|
||||
ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1;
|
||||
|
@ -5933,7 +5933,7 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, ANY)
|
|||
}
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, ANY)
|
||||
ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1;
|
||||
|
@ -6097,7 +6097,7 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, ANY)
|
|||
}
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY)
|
||||
ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *array;
|
||||
|
@ -6274,7 +6274,7 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit):
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY)
|
||||
ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *array;
|
||||
|
@ -6475,7 +6475,7 @@ ZEND_VM_C_LABEL(fe_fetch_w_exit):
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMPVAR|CV, UNUSED)
|
||||
ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH|ISSET)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *value;
|
||||
|
@ -6533,7 +6533,7 @@ ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMPVAR|CV, UNUSED)
|
|||
}
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(180, ZEND_ISSET_ISEMPTY_STATIC_PROP, CONST|TMPVAR|CV, UNUSED|CONST|VAR)
|
||||
ZEND_VM_HANDLER(180, ZEND_ISSET_ISEMPTY_STATIC_PROP, CONST|TMPVAR|CV, UNUSED|CONST|VAR, ISSET)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *value;
|
||||
|
@ -6609,7 +6609,7 @@ ZEND_VM_C_LABEL(is_static_prop_return):
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(115, ZEND_ISSET_ISEMPTY_DIM_OBJ, CONST|TMPVAR|UNUSED|CV, CONST|TMPVAR|CV)
|
||||
ZEND_VM_HANDLER(115, ZEND_ISSET_ISEMPTY_DIM_OBJ, CONST|TMPVAR|UNUSED|CV, CONST|TMPVAR|CV, ISSET)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1, free_op2;
|
||||
|
@ -6746,7 +6746,7 @@ ZEND_VM_C_LABEL(isset_dim_obj_exit):
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(148, ZEND_ISSET_ISEMPTY_PROP_OBJ, CONST|TMPVAR|UNUSED|CV, CONST|TMPVAR|CV)
|
||||
ZEND_VM_HANDLER(148, ZEND_ISSET_ISEMPTY_PROP_OBJ, CONST|TMPVAR|UNUSED|CV, CONST|TMPVAR|CV, ISSET)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1, free_op2;
|
||||
|
@ -6865,7 +6865,7 @@ ZEND_VM_HANDLER(58, ZEND_END_SILENCE, TMP, ANY)
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(152, ZEND_JMP_SET, CONST|TMP|VAR|CV, ANY)
|
||||
ZEND_VM_HANDLER(152, ZEND_JMP_SET, CONST|TMP|VAR|CV, JMP_ADDR)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1;
|
||||
|
@ -6904,7 +6904,7 @@ ZEND_VM_HANDLER(152, ZEND_JMP_SET, CONST|TMP|VAR|CV, ANY)
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(169, ZEND_COALESCE, CONST|TMP|VAR|CV, ANY)
|
||||
ZEND_VM_HANDLER(169, ZEND_COALESCE, CONST|TMP|VAR|CV, JMP_ADDR)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1;
|
||||
|
@ -7023,7 +7023,7 @@ ZEND_VM_HANDLER(139, ZEND_DECLARE_CLASS, ANY, ANY)
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(140, ZEND_DECLARE_INHERITED_CLASS, ANY, ANY)
|
||||
ZEND_VM_HANDLER(140, ZEND_DECLARE_INHERITED_CLASS, ANY, ANY, VAR)
|
||||
{
|
||||
USE_OPLINE
|
||||
|
||||
|
@ -7032,7 +7032,7 @@ ZEND_VM_HANDLER(140, ZEND_DECLARE_INHERITED_CLASS, ANY, ANY)
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(145, ZEND_DECLARE_INHERITED_CLASS_DELAYED, ANY, ANY)
|
||||
ZEND_VM_HANDLER(145, ZEND_DECLARE_INHERITED_CLASS_DELAYED, ANY, ANY, VAR)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *zce, *orig_zce;
|
||||
|
@ -7046,7 +7046,7 @@ ZEND_VM_HANDLER(145, ZEND_DECLARE_INHERITED_CLASS_DELAYED, ANY, ANY)
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(171, ZEND_DECLARE_ANON_CLASS, ANY, ANY)
|
||||
ZEND_VM_HANDLER(171, ZEND_DECLARE_ANON_CLASS, JMP_ADDR, ANY)
|
||||
{
|
||||
zend_class_entry *ce;
|
||||
USE_OPLINE
|
||||
|
@ -7067,7 +7067,7 @@ ZEND_VM_HANDLER(171, ZEND_DECLARE_ANON_CLASS, ANY, ANY)
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(172, ZEND_DECLARE_ANON_INHERITED_CLASS, ANY, ANY)
|
||||
ZEND_VM_HANDLER(172, ZEND_DECLARE_ANON_INHERITED_CLASS, JMP_ADDR, ANY, VAR)
|
||||
{
|
||||
zend_class_entry *ce;
|
||||
USE_OPLINE
|
||||
|
@ -7095,7 +7095,7 @@ ZEND_VM_HANDLER(141, ZEND_DECLARE_FUNCTION, ANY, ANY)
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(105, ZEND_TICKS, ANY, ANY)
|
||||
ZEND_VM_HANDLER(105, ZEND_TICKS, ANY, ANY, NUM)
|
||||
{
|
||||
USE_OPLINE
|
||||
|
||||
|
@ -7671,7 +7671,7 @@ ZEND_VM_HANDLER(159, ZEND_DISCARD_EXCEPTION, ANY, ANY)
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(162, ZEND_FAST_CALL, ANY, ANY)
|
||||
ZEND_VM_HANDLER(162, ZEND_FAST_CALL, JMP_ADDR, JMP_ABS, FAST_CALL)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *fast_call = EX_VAR(opline->result.var);
|
||||
|
@ -7687,7 +7687,7 @@ ZEND_VM_HANDLER(162, ZEND_FAST_CALL, ANY, ANY)
|
|||
ZEND_VM_CONTINUE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(163, ZEND_FAST_RET, ANY, ANY)
|
||||
ZEND_VM_HANDLER(163, ZEND_FAST_RET, ANY, JMP_ABS, FAST_RET)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *fast_call = EX_VAR(opline->op1.var);
|
||||
|
@ -7857,7 +7857,7 @@ ZEND_VM_C_LABEL(try_strlen):
|
|||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(123, ZEND_TYPE_CHECK, CONST|TMP|VAR|CV, ANY)
|
||||
ZEND_VM_HANDLER(123, ZEND_TYPE_CHECK, CONST|TMP|VAR|CV, ANY, TYPE)
|
||||
{
|
||||
USE_OPLINE
|
||||
zval *value;
|
||||
|
@ -7913,7 +7913,7 @@ ZEND_VM_HANDLER(122, ZEND_DEFINED, CONST, ANY)
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(151, ZEND_ASSERT_CHECK, ANY, ANY)
|
||||
ZEND_VM_HANDLER(151, ZEND_ASSERT_CHECK, ANY, JMP_ADDR)
|
||||
{
|
||||
USE_OPLINE
|
||||
|
||||
|
@ -7930,7 +7930,7 @@ ZEND_VM_HANDLER(151, ZEND_ASSERT_CHECK, ANY, ANY)
|
|||
}
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(157, ZEND_FETCH_CLASS_NAME, ANY, ANY)
|
||||
ZEND_VM_HANDLER(157, ZEND_FETCH_CLASS_NAME, ANY, ANY, CLASS_FETCH)
|
||||
{
|
||||
uint32_t fetch_type;
|
||||
USE_OPLINE
|
||||
|
|
|
@ -9395,8 +9395,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_CV_HANDLER(ZE
|
|||
/* Check whether an exception has been thrown, if not, jump over code */
|
||||
zend_exception_restore();
|
||||
if (EG(exception) == NULL) {
|
||||
ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[opline->extended_value]);
|
||||
ZEND_VM_CONTINUE(); /* CHECK_ME */
|
||||
ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
|
||||
ZEND_VM_CONTINUE();
|
||||
}
|
||||
catch_ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
|
||||
if (UNEXPECTED(catch_ce == NULL)) {
|
||||
|
@ -9418,8 +9418,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_CV_HANDLER(ZE
|
|||
zend_throw_exception_internal(NULL);
|
||||
HANDLE_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[opline->extended_value]);
|
||||
ZEND_VM_CONTINUE(); /* CHECK_ME */
|
||||
ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
|
||||
ZEND_VM_CONTINUE();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -54,6 +54,69 @@ define("ZEND_VM_KIND_CALL", 1);
|
|||
define("ZEND_VM_KIND_SWITCH", 2);
|
||||
define("ZEND_VM_KIND_GOTO", 3);
|
||||
|
||||
$vm_op_flags = array(
|
||||
"ZEND_VM_OP1_SPEC" => 1<<0,
|
||||
"ZEND_VM_OP1_CONST" => 1<<1,
|
||||
"ZEND_VM_OP1_TMPVAR" => 1<<2,
|
||||
"ZEND_VM_OP1_NUM" => 1<<3,
|
||||
"ZEND_VM_OP1_JMP_ADDR" => 1<<4,
|
||||
"ZEND_VM_OP1_JMP_ABS" => 1<<5,
|
||||
|
||||
"ZEND_VM_OP2_SPEC" => 1<<8,
|
||||
"ZEND_VM_OP2_CONST" => 1<<9,
|
||||
"ZEND_VM_OP2_TMPVAR" => 1<<10,
|
||||
"ZEND_VM_OP2_NUM" => 1<<11,
|
||||
"ZEND_VM_OP2_JMP_ADDR" => 1<<12,
|
||||
"ZEND_VM_OP2_JMP_ABS" => 1<<13,
|
||||
|
||||
"ZEND_VM_EXT_NUM" => 1<<16,
|
||||
"ZEND_VM_EXT_VAR" => 1<<17,
|
||||
"ZEND_VM_EXT_JMP_ADDR" => 1<<18,
|
||||
"ZEND_VM_EXT_DIM_OBJ" => 1<<19,
|
||||
"ZEND_VM_EXT_CLASS_FETCH" => 1<<20,
|
||||
"ZEND_VM_EXT_CONST_FETCH" => 1<<21,
|
||||
"ZEND_VM_EXT_VAR_FETCH" => 1<<22,
|
||||
"ZEND_VM_EXT_ARRAY_INIT" => 1<<23,
|
||||
"ZEND_VM_EXT_TYPE" => 1<<24,
|
||||
"ZEND_VM_EXT_EVAL" => 1<<25,
|
||||
"ZEND_VM_EXT_FAST_CALL" => 1<<26,
|
||||
"ZEND_VM_EXT_FAST_RET" => 1<<27,
|
||||
"ZEND_VM_EXT_ISSET" => 1<<28,
|
||||
);
|
||||
|
||||
foreach ($vm_op_flags as $name => $val) {
|
||||
define($name, $val);
|
||||
}
|
||||
|
||||
$vm_op_decode = array(
|
||||
"ANY" => 0,
|
||||
"CONST" => ZEND_VM_OP1_SPEC | ZEND_VM_OP1_CONST,
|
||||
"TMP" => ZEND_VM_OP1_SPEC,
|
||||
"VAR" => ZEND_VM_OP1_SPEC,
|
||||
"UNUSED" => ZEND_VM_OP1_SPEC,
|
||||
"CV" => ZEND_VM_OP1_SPEC,
|
||||
"TMPVAR" => ZEND_VM_OP1_SPEC | ZEND_VM_OP1_TMPVAR,
|
||||
"NUM" => ZEND_VM_OP1_NUM,
|
||||
"JMP_ADDR" => ZEND_VM_OP1_JMP_ADDR,
|
||||
"JMP_ABS" => ZEND_VM_OP1_JMP_ABS,
|
||||
);
|
||||
|
||||
$vm_ext_decode = array(
|
||||
"NUM" => ZEND_VM_EXT_NUM,
|
||||
"VAR" => ZEND_VM_EXT_VAR,
|
||||
"JMP_ADDR" => ZEND_VM_EXT_JMP_ADDR,
|
||||
"DIM_OBJ" => ZEND_VM_EXT_DIM_OBJ,
|
||||
"CLASS_FETCH" => ZEND_VM_EXT_CLASS_FETCH,
|
||||
"CONST_FETCH" => ZEND_VM_EXT_CONST_FETCH,
|
||||
"VAR_FETCH" => ZEND_VM_EXT_VAR_FETCH,
|
||||
"ARRAY_INIT" => ZEND_VM_EXT_ARRAY_INIT,
|
||||
"TYPE" => ZEND_VM_EXT_TYPE,
|
||||
"EVAL" => ZEND_VM_EXT_EVAL,
|
||||
"FAST_CALL" => ZEND_VM_EXT_FAST_CALL,
|
||||
"FAST_RET" => ZEND_VM_EXT_FAST_RET,
|
||||
"ISSET" => ZEND_VM_EXT_ISSET,
|
||||
);
|
||||
|
||||
$vm_kind_name = array(
|
||||
ZEND_VM_KIND_CALL => "ZEND_VM_KIND_CALL",
|
||||
ZEND_VM_KIND_SWITCH => "ZEND_VM_KIND_SWITCH",
|
||||
|
@ -1310,9 +1373,46 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
|
|||
}
|
||||
}
|
||||
|
||||
function parse_operand_spec($def, $lineno, $str, &$flags) {
|
||||
global $vm_op_decode;
|
||||
|
||||
$flags = 0;
|
||||
$a = explode("|",$str);
|
||||
foreach($a as $val) {
|
||||
if (isset($vm_op_decode[$val])) {
|
||||
$flags |= $vm_op_decode[$val];
|
||||
} else {
|
||||
die("ERROR ($def:$lineno): Wrong operand type '$str'\n");
|
||||
}
|
||||
}
|
||||
if (!($flags & ZEND_VM_OP1_SPEC)) {
|
||||
if (count($a) != 1) {
|
||||
die("ERROR ($def:$lineno): Wrong operand type '$str'\n");
|
||||
}
|
||||
$a = array("ANY");
|
||||
}
|
||||
return array_flip($a);
|
||||
}
|
||||
|
||||
function parse_ext_spec($def, $lineno, $str) {
|
||||
global $vm_ext_decode;
|
||||
|
||||
$flags = 0;
|
||||
$a = explode("|",$str);
|
||||
foreach($a as $val) {
|
||||
if (isset($vm_ext_decode[$val])) {
|
||||
$flags |= $vm_ext_decode[$val];
|
||||
} else {
|
||||
die("ERROR ($def:$lineno): Wrong extended_value type '$str'\n");
|
||||
}
|
||||
}
|
||||
return $flags;
|
||||
}
|
||||
|
||||
function gen_vm($def, $skel) {
|
||||
global $definition_file, $skeleton_file, $executor_file,
|
||||
$op_types, $list, $opcodes, $helpers, $params, $opnames;
|
||||
$op_types, $list, $opcodes, $helpers, $params, $opnames,
|
||||
$vm_op_flags;
|
||||
|
||||
// Load definition file
|
||||
$in = @file($def);
|
||||
|
@ -1342,7 +1442,7 @@ function gen_vm($def, $skel) {
|
|||
if (strpos($line,"ZEND_VM_HANDLER(") === 0) {
|
||||
// Parsing opcode handler's definition
|
||||
if (preg_match(
|
||||
"/^ZEND_VM_HANDLER\(\s*([0-9]+)\s*,\s*([A-Z_]+)\s*,\s*([A-Z|]+)\s*,\s*([A-Z|]+)\s*\)/",
|
||||
"/^ZEND_VM_HANDLER\(\s*([0-9]+)\s*,\s*([A-Z_]+)\s*,\s*([A-Z_|]+)\s*,\s*([A-Z_|]+)\s*(,\s*([A-Z_|]+)\s*)?\)/",
|
||||
$line,
|
||||
$m) == 0) {
|
||||
die("ERROR ($def:$lineno): Invalid ZEND_VM_HANDLER definition.\n");
|
||||
|
@ -1350,8 +1450,12 @@ function gen_vm($def, $skel) {
|
|||
$code = (int)$m[1];
|
||||
$op = $m[2];
|
||||
$len = strlen($op);
|
||||
$op1 = array_flip(explode("|",$m[3]));
|
||||
$op2 = array_flip(explode("|",$m[4]));
|
||||
$op1 = parse_operand_spec($def, $lineno, $m[3], $flags1);
|
||||
$op2 = parse_operand_spec($def, $lineno, $m[4], $flags2);
|
||||
$flags = $flags1 | ($flags2 << 8);
|
||||
if (isset($m[6])) {
|
||||
$flags |= parse_ext_spec($def, $lineno, $m[6]);
|
||||
}
|
||||
|
||||
if ($len > $max_opcode_len) {
|
||||
$max_opcode_len = $len;
|
||||
|
@ -1365,7 +1469,7 @@ function gen_vm($def, $skel) {
|
|||
if (isset($opnames[$op])) {
|
||||
die("ERROR ($def:$lineno): Opcode with name '$op' is already defined.\n");
|
||||
}
|
||||
$opcodes[$code] = array("op"=>$op,"op1"=>$op1,"op2"=>$op2,"code"=>"");
|
||||
$opcodes[$code] = array("op"=>$op,"op1"=>$op1,"op2"=>$op2,"code"=>"","flags"=>$flags);
|
||||
$opnames[$op] = $code;
|
||||
$handler = $code;
|
||||
$helper = null;
|
||||
|
@ -1373,14 +1477,14 @@ function gen_vm($def, $skel) {
|
|||
} else if (strpos($line,"ZEND_VM_HELPER(") === 0) {
|
||||
// Parsing helper's definition
|
||||
if (preg_match(
|
||||
"/^ZEND_VM_HELPER\(\s*([A-Za-z_]+)\s*,\s*([A-Z|]+)\s*,\s*([A-Z|]+)\s*\)/",
|
||||
"/^ZEND_VM_HELPER\(\s*([A-Za-z_]+)\s*,\s*([A-Z_|]+)\s*,\s*([A-Z_|]+)\s*\)/",
|
||||
$line,
|
||||
$m) == 0) {
|
||||
die("ERROR ($def:$lineno): Invalid ZEND_VM_HELPER definition.\n");
|
||||
}
|
||||
$helper = $m[1];
|
||||
$op1 = array_flip(explode("|",$m[2]));
|
||||
$op2 = array_flip(explode("|",$m[3]));
|
||||
$op1 = parse_operand_spec($def, $lineno, $m[2], $flags1);
|
||||
$op2 = parse_operand_spec($def, $lineno, $m[3], $flags2);
|
||||
if (isset($helpers[$helper])) {
|
||||
die("ERROR ($def:$lineno): Helper with name '$helper' is already defined.\n");
|
||||
}
|
||||
|
@ -1390,14 +1494,14 @@ function gen_vm($def, $skel) {
|
|||
} else if (strpos($line,"ZEND_VM_HELPER_EX(") === 0) {
|
||||
// Parsing helper with parameter definition
|
||||
if (preg_match(
|
||||
"/^ZEND_VM_HELPER_EX\(\s*([A-Za-z_]+)\s*,\s*([A-Z|]+)\s*,\s*([A-Z|]+)\s*,\s*(.*)\s*\)/",
|
||||
"/^ZEND_VM_HELPER_EX\(\s*([A-Za-z_]+)\s*,\s*([A-Z_|]+)\s*,\s*([A-Z_|]+)\s*,\s*(.*)\s*\)/",
|
||||
$line,
|
||||
$m) == 0) {
|
||||
die("ERROR ($def:$lineno): Invalid ZEND_VM_HELPER definition.\n");
|
||||
}
|
||||
$helper = $m[1];
|
||||
$op1 = array_flip(explode("|",$m[2]));
|
||||
$op2 = array_flip(explode("|",$m[3]));
|
||||
$op1 = parse_operand_spec($def, $lineno, $m[2], $flags1);
|
||||
$op2 = parse_operand_spec($def, $lineno, $m[3], $flags2);
|
||||
$param = $m[4];
|
||||
if (isset($helpers[$helper])) {
|
||||
die("ERROR ($def:$lineno): Helper with name '$helper' is already defined.\n");
|
||||
|
@ -1493,8 +1597,13 @@ function gen_vm($def, $skel) {
|
|||
fputs($f, "#define ZEND_VM_KIND_GOTO\t" . ZEND_VM_KIND_GOTO . "\n");
|
||||
fputs($f, "#define ZEND_VM_KIND\t\t" . $GLOBALS["vm_kind_name"][ZEND_VM_KIND] . "\n");
|
||||
fputs($f, "\n");
|
||||
foreach($vm_op_flags as $name => $val) {
|
||||
fprintf($f, "#define %-24s 0x%08x\n", $name, $val);
|
||||
}
|
||||
fputs($f, "\n");
|
||||
fputs($f, "BEGIN_EXTERN_C()\n\n");
|
||||
fputs($f, "ZEND_API const char *zend_get_opcode_name(zend_uchar opcode);\n\n");
|
||||
fputs($f, "ZEND_API const char *zend_get_opcode_name(zend_uchar opcode);\n");
|
||||
fputs($f, "ZEND_API uint32_t zend_get_opcode_flags(zend_uchar opcode);\n\n");
|
||||
fputs($f, "END_EXTERN_C()\n\n");
|
||||
|
||||
foreach ($opcodes as $code => $dsc) {
|
||||
|
@ -1503,6 +1612,10 @@ function gen_vm($def, $skel) {
|
|||
fputs($f,"#define $op $code\n");
|
||||
}
|
||||
|
||||
$code = str_pad((string)$max_opcode,$code_len," ",STR_PAD_LEFT);
|
||||
$op = str_pad("ZEND_VM_LAST_OPCODE",$max_opcode_len);
|
||||
fputs($f,"\n#define $op $code\n");
|
||||
|
||||
fputs($f, "\n#endif\n");
|
||||
fclose($f);
|
||||
echo "zend_vm_opcodes.h generated successfully.\n";
|
||||
|
@ -1515,14 +1628,24 @@ function gen_vm($def, $skel) {
|
|||
fputs($f,"#include <stdio.h>\n");
|
||||
fputs($f,"#include <zend.h>\n\n");
|
||||
|
||||
fputs($f,"const char *zend_vm_opcodes_map[".($max_opcode + 1)."] = {\n");
|
||||
fputs($f,"static const char *zend_vm_opcodes_names[".($max_opcode + 1)."] = {\n");
|
||||
for ($i = 0; $i <= $max_opcode; $i++) {
|
||||
fputs($f,"\t".(isset($opcodes[$i]["op"])?'"'.$opcodes[$i]["op"].'"':"NULL").",\n");
|
||||
}
|
||||
fputs($f, "};\n\n");
|
||||
|
||||
fputs($f,"static uint32_t zend_vm_opcodes_flags[".($max_opcode + 1)."] = {\n");
|
||||
for ($i = 0; $i <= $max_opcode; $i++) {
|
||||
fprintf($f, "\t0x%08x,\n", isset($opcodes[$i]["flags"]) ? $opcodes[$i]["flags"] : 0);
|
||||
}
|
||||
fputs($f, "};\n\n");
|
||||
|
||||
fputs($f, "ZEND_API const char* zend_get_opcode_name(zend_uchar opcode) {\n");
|
||||
fputs($f, "\treturn zend_vm_opcodes_map[opcode];\n");
|
||||
fputs($f, "\treturn zend_vm_opcodes_names[opcode];\n");
|
||||
fputs($f, "}\n");
|
||||
|
||||
fputs($f, "ZEND_API uint32_t zend_get_opcode_flags(zend_uchar opcode) {\n");
|
||||
fputs($f, "\treturn zend_vm_opcodes_flags[opcode];\n");
|
||||
fputs($f, "}\n");
|
||||
|
||||
fclose($f);
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#include <stdio.h>
|
||||
#include <zend.h>
|
||||
|
||||
const char *zend_vm_opcodes_map[182] = {
|
||||
static const char *zend_vm_opcodes_names[182] = {
|
||||
"ZEND_NOP",
|
||||
"ZEND_ADD",
|
||||
"ZEND_SUB",
|
||||
|
@ -206,6 +206,194 @@ const char *zend_vm_opcodes_map[182] = {
|
|||
"ZEND_FETCH_CLASS_CONSTANT",
|
||||
};
|
||||
|
||||
static uint32_t zend_vm_opcodes_flags[182] = {
|
||||
0x00000000,
|
||||
0x00000707,
|
||||
0x00000707,
|
||||
0x00000707,
|
||||
0x00000707,
|
||||
0x00000707,
|
||||
0x00000707,
|
||||
0x00000707,
|
||||
0x00000707,
|
||||
0x00000707,
|
||||
0x00000707,
|
||||
0x00000707,
|
||||
0x00000007,
|
||||
0x00000007,
|
||||
0x00000707,
|
||||
0x00000303,
|
||||
0x00000303,
|
||||
0x00000707,
|
||||
0x00000707,
|
||||
0x00000707,
|
||||
0x00000707,
|
||||
0x01000003,
|
||||
0x00000003,
|
||||
0x00080701,
|
||||
0x00080701,
|
||||
0x00080701,
|
||||
0x00080701,
|
||||
0x00080701,
|
||||
0x00080701,
|
||||
0x00080701,
|
||||
0x00080701,
|
||||
0x00080701,
|
||||
0x00080701,
|
||||
0x00080701,
|
||||
0x00000001,
|
||||
0x00000001,
|
||||
0x00000001,
|
||||
0x00000001,
|
||||
0x00000301,
|
||||
0x00000101,
|
||||
0x00000007,
|
||||
0x00000000,
|
||||
0x00000010,
|
||||
0x00001007,
|
||||
0x00001007,
|
||||
0x00041007,
|
||||
0x00001007,
|
||||
0x00001007,
|
||||
0x00000707,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000007,
|
||||
0x00000707,
|
||||
0x00010701,
|
||||
0x00010701,
|
||||
0x00010701,
|
||||
0x00000000,
|
||||
0x00000001,
|
||||
0x00010300,
|
||||
0x00000000,
|
||||
0x00010300,
|
||||
0x00000003,
|
||||
0x00000008,
|
||||
0x00000308,
|
||||
0x00000803,
|
||||
0x00000801,
|
||||
0x00000801,
|
||||
0x00011003,
|
||||
0x00010300,
|
||||
0x00000005,
|
||||
0x00800703,
|
||||
0x00010703,
|
||||
0x02000007,
|
||||
0x00400107,
|
||||
0x00000701,
|
||||
0x00000701,
|
||||
0x00001003,
|
||||
0x00040001,
|
||||
0x00000007,
|
||||
0x00400107,
|
||||
0x00000707,
|
||||
0x00000703,
|
||||
0x00400107,
|
||||
0x00000701,
|
||||
0x00000701,
|
||||
0x00400107,
|
||||
0x00000701,
|
||||
0x00000701,
|
||||
0x00400107,
|
||||
0x00000707,
|
||||
0x00000707,
|
||||
0x00400107,
|
||||
0x00000703,
|
||||
0x00000703,
|
||||
0x00400107,
|
||||
0x00000701,
|
||||
0x00000701,
|
||||
0x00000307,
|
||||
0x00200301,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00010000,
|
||||
0x00000801,
|
||||
0x00040103,
|
||||
0x00000003,
|
||||
0x00100700,
|
||||
0x00000007,
|
||||
0x00000003,
|
||||
0x00010707,
|
||||
0x00010703,
|
||||
0x10400107,
|
||||
0x10000707,
|
||||
0x00000803,
|
||||
0x00000801,
|
||||
0x00010703,
|
||||
0x00000000,
|
||||
0x00000801,
|
||||
0x00000007,
|
||||
0x00000003,
|
||||
0x01000003,
|
||||
0x00000103,
|
||||
0x00001003,
|
||||
0x00040001,
|
||||
0x00000005,
|
||||
0x00010700,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000701,
|
||||
0x00000701,
|
||||
0x00000701,
|
||||
0x00000701,
|
||||
0x00000701,
|
||||
0x00000000,
|
||||
0x00000305,
|
||||
0x00000000,
|
||||
0x00020000,
|
||||
0x00000000,
|
||||
0x00000003,
|
||||
0x00000303,
|
||||
0x00000300,
|
||||
0x00020000,
|
||||
0x00000000,
|
||||
0x00000701,
|
||||
0x10000707,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00001000,
|
||||
0x00001003,
|
||||
0x00000103,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000101,
|
||||
0x00100000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000303,
|
||||
0x00000003,
|
||||
0x04002010,
|
||||
0x08002000,
|
||||
0x00000008,
|
||||
0x00000000,
|
||||
0x00000707,
|
||||
0x00080701,
|
||||
0x00000301,
|
||||
0x00001003,
|
||||
0x00000707,
|
||||
0x00000010,
|
||||
0x00020010,
|
||||
0x00000307,
|
||||
0x00000307,
|
||||
0x00000307,
|
||||
0x00000307,
|
||||
0x00000307,
|
||||
0x00000307,
|
||||
0x00000307,
|
||||
0x10000307,
|
||||
0x00000303,
|
||||
};
|
||||
|
||||
ZEND_API const char* zend_get_opcode_name(zend_uchar opcode) {
|
||||
return zend_vm_opcodes_map[opcode];
|
||||
return zend_vm_opcodes_names[opcode];
|
||||
}
|
||||
ZEND_API uint32_t zend_get_opcode_flags(zend_uchar opcode) {
|
||||
return zend_vm_opcodes_flags[opcode];
|
||||
}
|
||||
|
|
|
@ -28,9 +28,36 @@
|
|||
#define ZEND_VM_KIND_GOTO 3
|
||||
#define ZEND_VM_KIND ZEND_VM_KIND_CALL
|
||||
|
||||
#define ZEND_VM_OP1_SPEC 0x00000001
|
||||
#define ZEND_VM_OP1_CONST 0x00000002
|
||||
#define ZEND_VM_OP1_TMPVAR 0x00000004
|
||||
#define ZEND_VM_OP1_NUM 0x00000008
|
||||
#define ZEND_VM_OP1_JMP_ADDR 0x00000010
|
||||
#define ZEND_VM_OP1_JMP_ABS 0x00000020
|
||||
#define ZEND_VM_OP2_SPEC 0x00000100
|
||||
#define ZEND_VM_OP2_CONST 0x00000200
|
||||
#define ZEND_VM_OP2_TMPVAR 0x00000400
|
||||
#define ZEND_VM_OP2_NUM 0x00000800
|
||||
#define ZEND_VM_OP2_JMP_ADDR 0x00001000
|
||||
#define ZEND_VM_OP2_JMP_ABS 0x00002000
|
||||
#define ZEND_VM_EXT_NUM 0x00010000
|
||||
#define ZEND_VM_EXT_VAR 0x00020000
|
||||
#define ZEND_VM_EXT_JMP_ADDR 0x00040000
|
||||
#define ZEND_VM_EXT_DIM_OBJ 0x00080000
|
||||
#define ZEND_VM_EXT_CLASS_FETCH 0x00100000
|
||||
#define ZEND_VM_EXT_CONST_FETCH 0x00200000
|
||||
#define ZEND_VM_EXT_VAR_FETCH 0x00400000
|
||||
#define ZEND_VM_EXT_ARRAY_INIT 0x00800000
|
||||
#define ZEND_VM_EXT_TYPE 0x01000000
|
||||
#define ZEND_VM_EXT_EVAL 0x02000000
|
||||
#define ZEND_VM_EXT_FAST_CALL 0x04000000
|
||||
#define ZEND_VM_EXT_FAST_RET 0x08000000
|
||||
#define ZEND_VM_EXT_ISSET 0x10000000
|
||||
|
||||
BEGIN_EXTERN_C()
|
||||
|
||||
ZEND_API const char *zend_get_opcode_name(zend_uchar opcode);
|
||||
ZEND_API uint32_t zend_get_opcode_flags(zend_uchar opcode);
|
||||
|
||||
END_EXTERN_C()
|
||||
|
||||
|
@ -212,4 +239,6 @@ END_EXTERN_C()
|
|||
#define ZEND_ISSET_ISEMPTY_STATIC_PROP 180
|
||||
#define ZEND_FETCH_CLASS_CONSTANT 181
|
||||
|
||||
#define ZEND_VM_LAST_OPCODE 181
|
||||
|
||||
#endif
|
||||
|
|
|
@ -516,6 +516,10 @@ static void zend_accel_optimize(zend_op_array *op_array,
|
|||
case ZEND_DECLARE_ANON_INHERITED_CLASS:
|
||||
ZEND_PASS_TWO_UNDO_JMP_TARGET(op_array, opline, ZEND_OP1(opline));
|
||||
break;
|
||||
case ZEND_CATCH:
|
||||
/* relative offset into absolute index */
|
||||
opline->extended_value = ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value);
|
||||
break;
|
||||
case ZEND_JMPZNZ:
|
||||
/* relative offset into absolute index */
|
||||
opline->extended_value = ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value);
|
||||
|
@ -560,6 +564,10 @@ static void zend_accel_optimize(zend_op_array *op_array,
|
|||
case ZEND_DECLARE_ANON_INHERITED_CLASS:
|
||||
ZEND_PASS_TWO_UPDATE_JMP_TARGET(op_array, opline, ZEND_OP1(opline));
|
||||
break;
|
||||
case ZEND_CATCH:
|
||||
/* absolute index to relative offset */
|
||||
opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, opline->extended_value);
|
||||
break;
|
||||
case ZEND_JMPZNZ:
|
||||
/* absolute index to relative offset */
|
||||
opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, opline->extended_value);
|
||||
|
|
|
@ -249,6 +249,8 @@ static void accel_interned_strings_restore_state(void)
|
|||
uint nIndex;
|
||||
Bucket *p;
|
||||
|
||||
memset(ZCSG(interned_strings_saved_top),
|
||||
0, ZCSG(interned_strings_top) - ZCSG(interned_strings_saved_top));
|
||||
ZCSG(interned_strings_top) = ZCSG(interned_strings_saved_top);
|
||||
while (idx > 0) {
|
||||
idx--;
|
||||
|
|
16
ext/openssl/tests/openssl_get_cipher_methods.phpt
Normal file
16
ext/openssl/tests/openssl_get_cipher_methods.phpt
Normal file
|
@ -0,0 +1,16 @@
|
|||
--TEST--
|
||||
openssl_get_cipher_methods basic test
|
||||
--CREDITS--
|
||||
marcosptf - <marcosptf@yahoo.com.br>
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded("openssl")) print "skip";
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
var_dump(is_array(openssl_get_cipher_methods(true)));
|
||||
var_dump(is_array(openssl_get_cipher_methods(false)));
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(true)
|
||||
bool(true)
|
16
ext/openssl/tests/openssl_get_md_methods.phpt
Normal file
16
ext/openssl/tests/openssl_get_md_methods.phpt
Normal file
|
@ -0,0 +1,16 @@
|
|||
--TEST--
|
||||
openssl_get_md_methods basic test
|
||||
--CREDITS--
|
||||
marcosptf - <marcosptf@yahoo.com.br>
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded("openssl")) print "skip";
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
var_dump(is_array(openssl_get_md_methods(true)));
|
||||
var_dump(is_array(openssl_get_md_methods(false)));
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(true)
|
||||
bool(true)
|
|
@ -163,7 +163,7 @@ static int php_array_key_compare(const void *a, const void *b) /* {{{ */
|
|||
l2 = 0;
|
||||
}
|
||||
}
|
||||
} else if (f->key) {
|
||||
} else {
|
||||
if (s->key) {
|
||||
return zendi_smart_strcmp(f->key, s->key);
|
||||
} else {
|
||||
|
@ -5474,17 +5474,17 @@ PHP_FUNCTION(array_chunk)
|
|||
Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values */
|
||||
PHP_FUNCTION(array_combine)
|
||||
{
|
||||
zval *values, *keys;
|
||||
HashTable *values, *keys;
|
||||
uint32_t pos_values = 0;
|
||||
zval *entry_keys, *entry_values;
|
||||
int num_keys, num_values;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "aa", &keys, &values) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "hh", &keys, &values) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
num_keys = zend_hash_num_elements(Z_ARRVAL_P(keys));
|
||||
num_values = zend_hash_num_elements(Z_ARRVAL_P(values));
|
||||
num_keys = zend_hash_num_elements(keys);
|
||||
num_values = zend_hash_num_elements(values);
|
||||
|
||||
if (num_keys != num_values) {
|
||||
php_error_docref(NULL, E_WARNING, "Both parameters should have an equal number of elements");
|
||||
|
@ -5497,12 +5497,12 @@ PHP_FUNCTION(array_combine)
|
|||
return;
|
||||
}
|
||||
|
||||
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(keys), entry_keys) {
|
||||
ZEND_HASH_FOREACH_VAL(keys, entry_keys) {
|
||||
while (1) {
|
||||
if (pos_values >= Z_ARRVAL_P(values)->nNumUsed) {
|
||||
if (pos_values >= values->nNumUsed) {
|
||||
break;
|
||||
} else if (Z_TYPE(Z_ARRVAL_P(values)->arData[pos_values].val) != IS_UNDEF) {
|
||||
entry_values = &Z_ARRVAL_P(values)->arData[pos_values].val;
|
||||
} else if (Z_TYPE(values->arData[pos_values].val) != IS_UNDEF) {
|
||||
entry_values = &values->arData[pos_values].val;
|
||||
if (Z_TYPE_P(entry_keys) == IS_LONG) {
|
||||
entry_values = zend_hash_index_update(Z_ARRVAL_P(return_value),
|
||||
Z_LVAL_P(entry_keys), entry_values);
|
||||
|
|
|
@ -592,6 +592,11 @@ dnl Check for atomic operation API availability in Solaris
|
|||
dnl
|
||||
AC_CHECK_HEADERS([atomic.h])
|
||||
|
||||
dnl
|
||||
dnl Check for arc4random on BSD systems
|
||||
dnl
|
||||
AC_CHECK_DECLS([arc4random_buf])
|
||||
|
||||
dnl
|
||||
dnl Check for getrandom on newer Linux kernels
|
||||
dnl
|
||||
|
|
|
@ -33,6 +33,9 @@
|
|||
#ifdef __linux__
|
||||
# include <sys/syscall.h>
|
||||
#endif
|
||||
#if defined(__OpenBSD__) || defined(__NetBSD__)
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
|
||||
#ifdef ZTS
|
||||
int random_globals_id;
|
||||
|
@ -87,6 +90,8 @@ static int php_random_bytes(void *bytes, size_t size)
|
|||
zend_throw_exception(zend_ce_exception, "Could not gather sufficient random data", 0);
|
||||
return FAILURE;
|
||||
}
|
||||
#elif HAVE_DECL_ARC4RANDOM_BUF && ((defined(__OpenBSD__) && OpenBSD >= 201405) || (defined(__NetBSD__) && __NetBSD_Version__ >= 700000001))
|
||||
arc4random_buf(bytes, size);
|
||||
#elif HAVE_DECL_GETRANDOM
|
||||
/* Linux getrandom(2) syscall */
|
||||
size_t read_bytes = 0;
|
||||
|
|
|
@ -234,7 +234,7 @@ void phpdbg_list_function_byname(const char *str, size_t len) /* {{{ */
|
|||
|
||||
zend_op_array *phpdbg_compile_file(zend_file_handle *file, int type) {
|
||||
phpdbg_file_source data, *dataptr;
|
||||
zend_file_handle fake = {{0}};
|
||||
zend_file_handle fake;
|
||||
zend_op_array *ret;
|
||||
char *filename = (char *)(file->opened_path ? ZSTR_VAL(file->opened_path) : file->filename);
|
||||
uint line;
|
||||
|
@ -253,11 +253,11 @@ zend_op_array *phpdbg_compile_file(zend_file_handle *file, int type) {
|
|||
data.filename = filename;
|
||||
data.line[0] = 0;
|
||||
|
||||
memset(&fake, 0, sizeof(fake));
|
||||
fake.type = ZEND_HANDLE_MAPPED;
|
||||
fake.handle.stream.mmap.buf = data.buf;
|
||||
fake.handle.stream.mmap.len = data.len;
|
||||
fake.free_filename = 0;
|
||||
fake.opened_path = file->opened_path;
|
||||
fake.filename = filename;
|
||||
fake.opened_path = file->opened_path;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue