#define ZEND_FAST_RET_TO_CATCH 1
#define ZEND_FAST_RET_TO_FINALLY 2
- #define ZEND_FAST_CALL_FOR_CATCH 1
- #define ZEND_FAST_CALL_FOR_FINALLY 2
+ #define ZEND_FAST_CALL_FROM_CATCH 1
+ #define ZEND_FAST_CALL_FROM_FINALLY 2
+#define ZEND_ARRAY_ELEMENT_REF (1<<0)
+#define ZEND_ARRAY_NOT_PACKED (1<<1)
+#define ZEND_ARRAY_SIZE_SHIFT 2
+
END_EXTERN_C()
#define ZEND_CLONE_FUNC_NAME "__clone"
int nest_levels, array_offset;
zend_brk_cont_element *jmp_to;
- nest_levels = Z_LVAL(op_array->literals[opline->op2.constant].constant);
+ nest_levels = Z_LVAL(op_array->literals[opline->op2.constant]);
- array_offset = opline->op1.opline_num;
- do {
- jmp_to = &op_array->brk_cont_array[array_offset];
- if (nest_levels > 1) {
- array_offset = jmp_to->parent;
- }
- } while (--nest_levels > 0);
- zend_resolve_finally_call(op_array, i, opline->opcode == ZEND_BRK ? jmp_to->brk : jmp_to->cont TSRMLS_CC);
- break;
+ if ((array_offset = opline->op1.opline_num) != -1) {
+ do {
+ jmp_to = &op_array->brk_cont_array[array_offset];
+ if (nest_levels > 1) {
+ array_offset = jmp_to->parent;
+ }
+ } while (--nest_levels > 0);
+ zend_resolve_finally_call(op_array, i, opline->opcode == ZEND_BRK ? jmp_to->brk : jmp_to->cont TSRMLS_CC);
+ break;
+ }
}
case ZEND_GOTO:
- if (Z_TYPE(op_array->literals[opline->op2.constant].constant) != IS_LONG) {
+ if (Z_TYPE(op_array->literals[opline->op2.constant]) != IS_LONG) {
zend_uint num = opline->op2.constant;
- opline->op2.zv = &op_array->literals[opline->op2.constant].constant;
+ opline->op2.zv = &op_array->literals[opline->op2.constant];
zend_resolve_goto_label(op_array, opline, 1 TSRMLS_CC);
opline->op2.constant = num;
}
{
USE_OPLINE
- if ((opline->extended_value & ZEND_FAST_CALL_FOR_CATCH) &&
+ if ((opline->extended_value & ZEND_FAST_CALL_FROM_CATCH) &&
UNEXPECTED(EG(prev_exception) != NULL)) {
/* in case of unhandled exception jump to catch block instead of finally */
- ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->op2.opline_num]);
+ ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[opline->op2.opline_num]);
ZEND_VM_CONTINUE();
}
EX(fast_ret) = opline;
{
if (EX(fast_ret)) {
ZEND_VM_SET_OPCODE(EX(fast_ret) + 1);
- if ((EX(fast_ret)->extended_value & ZEND_FAST_CALL_FOR_FINALLY)) {
+ if ((EX(fast_ret)->extended_value & ZEND_FAST_CALL_FROM_FINALLY)) {
- EX(fast_ret) = &EX(op_array)->opcodes[EX(fast_ret)->op2.opline_num];
+ EX(fast_ret) = &EX(func)->op_array.opcodes[EX(fast_ret)->op2.opline_num];
}
ZEND_VM_CONTINUE();
} else {
{
USE_OPLINE
- if ((opline->extended_value & ZEND_FAST_CALL_FOR_CATCH) &&
+ if ((opline->extended_value & ZEND_FAST_CALL_FROM_CATCH) &&
UNEXPECTED(EG(prev_exception) != NULL)) {
/* in case of unhandled exception jump to catch block instead of finally */
- ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->op2.opline_num]);
+ ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[opline->op2.opline_num]);
ZEND_VM_CONTINUE();
}
EX(fast_ret) = opline;
{
if (EX(fast_ret)) {
ZEND_VM_SET_OPCODE(EX(fast_ret) + 1);
- if ((EX(fast_ret)->extended_value & ZEND_FAST_CALL_FOR_FINALLY)) {
+ if ((EX(fast_ret)->extended_value & ZEND_FAST_CALL_FROM_FINALLY)) {
- EX(fast_ret) = &EX(op_array)->opcodes[EX(fast_ret)->op2.opline_num];
+ EX(fast_ret) = &EX(func)->op_array.opcodes[EX(fast_ret)->op2.opline_num];
}
ZEND_VM_CONTINUE();
} else {
}
/* }}} */
- #define PPID2SID \
- convert_to_string((ppid)); \
- PS(id) = STR_INIT(Z_STRVAL_P(ppid), Z_STRLEN_P(ppid), 0)
-static void ppid2sid(zval **ppid TSRMLS_DC) {
- if (Z_TYPE_PP(ppid) != IS_STRING) {
++static void ppid2sid(zval *ppid TSRMLS_DC) {
++ if (Z_TYPE_P(ppid) != IS_STRING) {
+ PS(id) = NULL;
+ PS(send_cookie) = 1;
+ } else {
- convert_to_string((*ppid));
- PS(id) = estrndup(Z_STRVAL_PP(ppid), Z_STRLEN_PP(ppid));
++ convert_to_string(ppid);
++ PS(id) = STR_INIT(Z_STRVAL_P(ppid), Z_STRLEN_P(ppid), 0);
+ PS(send_cookie) = 0;
+ }
+ }
PHPAPI void php_session_reset_id(TSRMLS_D) /* {{{ */
{
* cookie and get variables will be available. */
if (!PS(id)) {
- if (PS(use_cookies) && zend_hash_find(&EG(symbol_table), "_COOKIE", sizeof("_COOKIE"), (void **) &data) == SUCCESS &&
- Z_TYPE_PP(data) == IS_ARRAY &&
- zend_hash_find(Z_ARRVAL_PP(data), PS(session_name), lensess + 1, (void **) &ppid) == SUCCESS
+ if (PS(use_cookies) && (data = zend_hash_str_find(&EG(symbol_table).ht, "_COOKIE", sizeof("_COOKIE") - 1)) &&
+ Z_TYPE_P(data) == IS_ARRAY &&
+ (ppid = zend_hash_str_find(Z_ARRVAL_P(data), PS(session_name), lensess))
) {
- PPID2SID;
+ ppid2sid(ppid TSRMLS_CC);
PS(apply_trans_sid) = 0;
- PS(send_cookie) = 0;
PS(define_sid) = 0;
}
if (!PS(use_only_cookies) && !PS(id) &&
- zend_hash_find(&EG(symbol_table), "_GET", sizeof("_GET"), (void **) &data) == SUCCESS &&
- Z_TYPE_PP(data) == IS_ARRAY &&
- zend_hash_find(Z_ARRVAL_PP(data), PS(session_name), lensess + 1, (void **) &ppid) == SUCCESS
+ (data = zend_hash_str_find(&EG(symbol_table).ht, "_GET", sizeof("_GET") - 1)) &&
+ Z_TYPE_P(data) == IS_ARRAY &&
+ (ppid = zend_hash_str_find(Z_ARRVAL_P(data), PS(session_name), lensess))
) {
- PPID2SID;
- PS(send_cookie) = 0;
+ ppid2sid(ppid TSRMLS_CC);
}
if (!PS(use_only_cookies) && !PS(id) &&
- zend_hash_find(&EG(symbol_table), "_POST", sizeof("_POST"), (void **) &data) == SUCCESS &&
- Z_TYPE_PP(data) == IS_ARRAY &&
- zend_hash_find(Z_ARRVAL_PP(data), PS(session_name), lensess + 1, (void **) &ppid) == SUCCESS
+ (data = zend_hash_str_find(&EG(symbol_table).ht, "_POST", sizeof("_POST") - 1)) &&
+ Z_TYPE_P(data) == IS_ARRAY &&
+ (ppid = zend_hash_str_find(Z_ARRVAL_P(data), PS(session_name), lensess))
) {
- PPID2SID;
- PS(send_cookie) = 0;
+ ppid2sid(ppid TSRMLS_CC);
}
}