char *function_name_strval, *lcname;
int function_name_strlen;
- int ret;
zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
if (IS_CONST == IS_CONST) {
- function_name_strval = Z_STRVAL(opline->op2.u.constant);
- ret = zend_hash_quick_find(EG(function_table), Z_STRVAL(opline->op1.u.constant), Z_STRLEN(opline->op1.u.constant)+1, opline->extended_value, (void **) &EX(fbc));
+ if (zend_hash_quick_find(EG(function_table), Z_STRVAL(opline->op1.u.constant), Z_STRLEN(opline->op1.u.constant)+1, opline->extended_value, (void **) &EX(fbc)) == FAILURE) {
+ zend_error_noreturn(E_ERROR, "Call to undefined function %s()", Z_STRVAL(opline->op2.u.constant));
+ }
} else {
function_name = &opline->op2.u.constant;
} else {
lcname = zend_str_tolower_dup(function_name_strval, function_name_strlen);
}
- ret = zend_hash_find(EG(function_table), lcname, function_name_strlen+1, (void **) &EX(fbc));
+ if (zend_hash_find(EG(function_table), lcname, function_name_strlen+1, (void **) &EX(fbc)) == FAILURE) {
+ zend_error_noreturn(E_ERROR, "Call to undefined function %s()", function_name_strval);
+ }
efree(lcname);
- }
-
- if (ret == FAILURE) {
- zend_error_noreturn(E_ERROR, "Call to undefined function %s()", function_name_strval);
- }
-
- if (IS_CONST != IS_CONST) {
}
char *function_name_strval, *lcname;
int function_name_strlen;
zend_free_op free_op2;
- int ret;
zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
if (IS_TMP_VAR == IS_CONST) {
- function_name_strval = Z_STRVAL(opline->op2.u.constant);
- ret = zend_hash_quick_find(EG(function_table), Z_STRVAL(opline->op1.u.constant), Z_STRLEN(opline->op1.u.constant)+1, opline->extended_value, (void **) &EX(fbc));
+ if (zend_hash_quick_find(EG(function_table), Z_STRVAL(opline->op1.u.constant), Z_STRLEN(opline->op1.u.constant)+1, opline->extended_value, (void **) &EX(fbc)) == FAILURE) {
+ zend_error_noreturn(E_ERROR, "Call to undefined function %s()", Z_STRVAL(opline->op2.u.constant));
+ }
} else {
function_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
} else {
lcname = zend_str_tolower_dup(function_name_strval, function_name_strlen);
}
- ret = zend_hash_find(EG(function_table), lcname, function_name_strlen+1, (void **) &EX(fbc));
+ if (zend_hash_find(EG(function_table), lcname, function_name_strlen+1, (void **) &EX(fbc)) == FAILURE) {
+ zend_error_noreturn(E_ERROR, "Call to undefined function %s()", function_name_strval);
+ }
efree(lcname);
- }
-
- if (ret == FAILURE) {
- zend_error_noreturn(E_ERROR, "Call to undefined function %s()", function_name_strval);
- }
-
- if (IS_TMP_VAR != IS_CONST) {
zval_dtor(free_op2.var);
}
char *function_name_strval, *lcname;
int function_name_strlen;
zend_free_op free_op2;
- int ret;
zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
if (IS_VAR == IS_CONST) {
- function_name_strval = Z_STRVAL(opline->op2.u.constant);
- ret = zend_hash_quick_find(EG(function_table), Z_STRVAL(opline->op1.u.constant), Z_STRLEN(opline->op1.u.constant)+1, opline->extended_value, (void **) &EX(fbc));
+ if (zend_hash_quick_find(EG(function_table), Z_STRVAL(opline->op1.u.constant), Z_STRLEN(opline->op1.u.constant)+1, opline->extended_value, (void **) &EX(fbc)) == FAILURE) {
+ zend_error_noreturn(E_ERROR, "Call to undefined function %s()", Z_STRVAL(opline->op2.u.constant));
+ }
} else {
function_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
} else {
lcname = zend_str_tolower_dup(function_name_strval, function_name_strlen);
}
- ret = zend_hash_find(EG(function_table), lcname, function_name_strlen+1, (void **) &EX(fbc));
+ if (zend_hash_find(EG(function_table), lcname, function_name_strlen+1, (void **) &EX(fbc)) == FAILURE) {
+ zend_error_noreturn(E_ERROR, "Call to undefined function %s()", function_name_strval);
+ }
efree(lcname);
- }
-
- if (ret == FAILURE) {
- zend_error_noreturn(E_ERROR, "Call to undefined function %s()", function_name_strval);
- }
-
- if (IS_VAR != IS_CONST) {
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
}
char *function_name_strval, *lcname;
int function_name_strlen;
- int ret;
zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
if (IS_CV == IS_CONST) {
- function_name_strval = Z_STRVAL(opline->op2.u.constant);
- ret = zend_hash_quick_find(EG(function_table), Z_STRVAL(opline->op1.u.constant), Z_STRLEN(opline->op1.u.constant)+1, opline->extended_value, (void **) &EX(fbc));
+ if (zend_hash_quick_find(EG(function_table), Z_STRVAL(opline->op1.u.constant), Z_STRLEN(opline->op1.u.constant)+1, opline->extended_value, (void **) &EX(fbc)) == FAILURE) {
+ zend_error_noreturn(E_ERROR, "Call to undefined function %s()", Z_STRVAL(opline->op2.u.constant));
+ }
} else {
function_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
} else {
lcname = zend_str_tolower_dup(function_name_strval, function_name_strlen);
}
- ret = zend_hash_find(EG(function_table), lcname, function_name_strlen+1, (void **) &EX(fbc));
+ if (zend_hash_find(EG(function_table), lcname, function_name_strlen+1, (void **) &EX(fbc)) == FAILURE) {
+ zend_error_noreturn(E_ERROR, "Call to undefined function %s()", function_name_strval);
+ }
efree(lcname);
- }
-
- if (ret == FAILURE) {
- zend_error_noreturn(E_ERROR, "Call to undefined function %s()", function_name_strval);
- }
-
- if (IS_CV != IS_CONST) {
}
zval tmp_varname;
HashTable *target_symbol_table;
- if (Z_TYPE_P(varname) != IS_STRING) {
+ if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
tmp_varname = *varname;
zval_copy_ctor(&tmp_varname);
convert_to_string(&tmp_varname);
}
- if (varname == &tmp_varname) {
+ if (IS_CONST != IS_CONST && varname == &tmp_varname) {
zval_dtor(varname);
}
if (!RETURN_VALUE_UNUSED(&opline->result)) {
int retval = i_zend_is_true(&opline->op1.u.constant);
- if (retval) {
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ ZEND_VM_CONTINUE();
+ } else if (EXPECTED(retval != 0)) {
#if DEBUG_ZEND>=2
printf("Conditional jmp on true to %d\n", opline->extended_value);
#endif
- ZEND_VM_JMP(&EX(op_array)->opcodes[opline->extended_value]);
+ ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->extended_value]);
+ ZEND_VM_CONTINUE(); /* CHECK_ME */
} else {
#if DEBUG_ZEND>=2
printf("Conditional jmp on false to %d\n", opline->op2.u.opline_num);
#endif
- ZEND_VM_JMP(&EX(op_array)->opcodes[opline->op2.u.opline_num]);
+ ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->op2.u.opline_num]);
+ ZEND_VM_CONTINUE(); /* CHECK_ME */
}
}
retval_ptr_ptr = NULL;
- if (!retval_ptr_ptr) {
+ if (IS_CONST == IS_VAR && !retval_ptr_ptr) {
zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");
}
zend_op *opline = EX(opline);
- is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
+ is_identical_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
&opline->op2.u.constant TSRMLS_CC);
+ Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !Z_LVAL(EX_T(opline->result.u.var).tmp_var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
- is_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
&opline->op2.u.constant TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) == 0));
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
- is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
&opline->op2.u.constant TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) != 0));
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
- is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
&opline->op2.u.constant TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) < 0));
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
- is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
&opline->op2.u.constant TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) <= 0));
ZEND_VM_NEXT_OPCODE();
if(IS_CONST != IS_UNUSED) {
char *function_name_strval;
int function_name_strlen;
- zend_bool is_const = (IS_CONST == IS_CONST);
- if (is_const) {
+ if (IS_CONST == IS_CONST) {
function_name_strval = Z_STRVAL(opline->op2.u.constant);
function_name_strlen = Z_STRLEN(opline->op2.u.constant);
} else {
EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
}
- if (!is_const) {
+ if (IS_CONST != IS_CONST) {
efree(function_name_strval);
}
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
+ is_identical_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !Z_LVAL(EX_T(opline->result.u.var).tmp_var);
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) == 0));
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) != 0));
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) < 0));
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) <= 0));
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
if(IS_TMP_VAR != IS_UNUSED) {
char *function_name_strval;
int function_name_strlen;
- zend_bool is_const = (IS_TMP_VAR == IS_CONST);
zend_free_op free_op2;
- if (is_const) {
+ if (IS_TMP_VAR == IS_CONST) {
function_name_strval = Z_STRVAL(opline->op2.u.constant);
function_name_strlen = Z_STRLEN(opline->op2.u.constant);
} else {
EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
}
- if (!is_const) {
+ if (IS_TMP_VAR != IS_CONST) {
efree(function_name_strval);
zval_dtor(free_op2.var);
}
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
+ is_identical_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !Z_LVAL(EX_T(opline->result.u.var).tmp_var);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) == 0));
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) != 0));
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) < 0));
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) <= 0));
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
if(IS_VAR != IS_UNUSED) {
char *function_name_strval;
int function_name_strlen;
- zend_bool is_const = (IS_VAR == IS_CONST);
zend_free_op free_op2;
- if (is_const) {
+ if (IS_VAR == IS_CONST) {
function_name_strval = Z_STRVAL(opline->op2.u.constant);
function_name_strlen = Z_STRLEN(opline->op2.u.constant);
} else {
EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
}
- if (!is_const) {
+ if (IS_VAR != IS_CONST) {
efree(function_name_strval);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
}
if(IS_UNUSED != IS_UNUSED) {
char *function_name_strval;
int function_name_strlen;
- zend_bool is_const = (IS_UNUSED == IS_CONST);
- if (is_const) {
+ if (IS_UNUSED == IS_CONST) {
function_name_strval = Z_STRVAL(opline->op2.u.constant);
function_name_strlen = Z_STRLEN(opline->op2.u.constant);
} else {
EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
}
- if (!is_const) {
+ if (IS_UNUSED != IS_CONST) {
efree(function_name_strval);
}
zend_op *opline = EX(opline);
- is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
+ is_identical_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !Z_LVAL(EX_T(opline->result.u.var).tmp_var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
- is_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) == 0));
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
- is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) != 0));
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
- is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) < 0));
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
- is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
&opline->op1.u.constant,
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) <= 0));
ZEND_VM_NEXT_OPCODE();
if(IS_CV != IS_UNUSED) {
char *function_name_strval;
int function_name_strlen;
- zend_bool is_const = (IS_CV == IS_CONST);
- if (is_const) {
+ if (IS_CV == IS_CONST) {
function_name_strval = Z_STRVAL(opline->op2.u.constant);
function_name_strlen = Z_STRLEN(opline->op2.u.constant);
} else {
EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
}
- if (!is_const) {
+ if (IS_CV != IS_CONST) {
efree(function_name_strval);
}
zval tmp_varname;
HashTable *target_symbol_table;
- if (Z_TYPE_P(varname) != IS_STRING) {
+ if (IS_TMP_VAR != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
tmp_varname = *varname;
zval_copy_ctor(&tmp_varname);
convert_to_string(&tmp_varname);
}
- if (varname == &tmp_varname) {
+ if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) {
zval_dtor(varname);
}
if (!RETURN_VALUE_UNUSED(&opline->result)) {
int retval = i_zend_is_true(_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC));
zval_dtor(free_op1.var);
- if (retval) {
+
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ ZEND_VM_CONTINUE();
+ } else if (EXPECTED(retval != 0)) {
#if DEBUG_ZEND>=2
printf("Conditional jmp on true to %d\n", opline->extended_value);
#endif
- ZEND_VM_JMP(&EX(op_array)->opcodes[opline->extended_value]);
+ ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->extended_value]);
+ ZEND_VM_CONTINUE(); /* CHECK_ME */
} else {
#if DEBUG_ZEND>=2
printf("Conditional jmp on false to %d\n", opline->op2.u.opline_num);
#endif
- ZEND_VM_JMP(&EX(op_array)->opcodes[opline->op2.u.opline_num]);
+ ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->op2.u.opline_num]);
+ ZEND_VM_CONTINUE(); /* CHECK_ME */
}
}
retval_ptr_ptr = NULL;
- if (!retval_ptr_ptr) {
+ if (IS_TMP_VAR == IS_VAR && !retval_ptr_ptr) {
zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");
}
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
+ is_identical_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
&opline->op2.u.constant TSRMLS_CC);
+ Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !Z_LVAL(EX_T(opline->result.u.var).tmp_var);
zval_dtor(free_op1.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
&opline->op2.u.constant TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) == 0));
zval_dtor(free_op1.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
&opline->op2.u.constant TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) != 0));
zval_dtor(free_op1.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
&opline->op2.u.constant TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) < 0));
zval_dtor(free_op1.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
&opline->op2.u.constant TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) <= 0));
zval_dtor(free_op1.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
+ is_identical_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !Z_LVAL(EX_T(opline->result.u.var).tmp_var);
zval_dtor(free_op1.var);
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) == 0));
zval_dtor(free_op1.var);
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) != 0));
zval_dtor(free_op1.var);
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) < 0));
zval_dtor(free_op1.var);
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) <= 0));
zval_dtor(free_op1.var);
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
+ is_identical_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !Z_LVAL(EX_T(opline->result.u.var).tmp_var);
zval_dtor(free_op1.var);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) == 0));
zval_dtor(free_op1.var);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) != 0));
zval_dtor(free_op1.var);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) < 0));
zval_dtor(free_op1.var);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) <= 0));
zval_dtor(free_op1.var);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
+ is_identical_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !Z_LVAL(EX_T(opline->result.u.var).tmp_var);
zval_dtor(free_op1.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) == 0));
zval_dtor(free_op1.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) != 0));
zval_dtor(free_op1.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) < 0));
zval_dtor(free_op1.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) <= 0));
zval_dtor(free_op1.var);
ZEND_VM_NEXT_OPCODE();
zval tmp_varname;
HashTable *target_symbol_table;
- if (Z_TYPE_P(varname) != IS_STRING) {
+ if (IS_VAR != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
tmp_varname = *varname;
zval_copy_ctor(&tmp_varname);
convert_to_string(&tmp_varname);
}
- if (varname == &tmp_varname) {
+ if (IS_VAR != IS_CONST && varname == &tmp_varname) {
zval_dtor(varname);
}
if (!RETURN_VALUE_UNUSED(&opline->result)) {
int retval = i_zend_is_true(_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC));
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
- if (retval) {
+
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ ZEND_VM_CONTINUE();
+ } else if (EXPECTED(retval != 0)) {
#if DEBUG_ZEND>=2
printf("Conditional jmp on true to %d\n", opline->extended_value);
#endif
- ZEND_VM_JMP(&EX(op_array)->opcodes[opline->extended_value]);
+ ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->extended_value]);
+ ZEND_VM_CONTINUE(); /* CHECK_ME */
} else {
#if DEBUG_ZEND>=2
printf("Conditional jmp on false to %d\n", opline->op2.u.opline_num);
#endif
- ZEND_VM_JMP(&EX(op_array)->opcodes[opline->op2.u.opline_num]);
+ ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->op2.u.opline_num]);
+ ZEND_VM_CONTINUE(); /* CHECK_ME */
}
}
retval_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- if (!retval_ptr_ptr) {
+ if (IS_VAR == IS_VAR && !retval_ptr_ptr) {
zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");
}
zval *varptr;
varptr_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- if (!varptr_ptr) {
+ if (IS_VAR == IS_VAR && !varptr_ptr) {
zend_error_noreturn(E_ERROR, "Only variables can be passed by reference");
}
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
+ is_identical_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
&opline->op2.u.constant TSRMLS_CC);
+ Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !Z_LVAL(EX_T(opline->result.u.var).tmp_var);
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
&opline->op2.u.constant TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) == 0));
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
&opline->op2.u.constant TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) != 0));
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
&opline->op2.u.constant TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) < 0));
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
&opline->op2.u.constant TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) <= 0));
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
} else {
zend_op *op_data = opline+1;
zval *dim = &opline->op2.u.constant;
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
var_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
increment_opline = 1;
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = &opline->op2.u.constant;
+ zval **container;
if (opline->extended_value == ZEND_FETCH_ADD_LOCK &&
IS_VAR != IS_CV &&
EX_T(opline->op1.u.var).var.ptr_ptr) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
}
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_R TSRMLS_CC);
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = &opline->op2.u.constant;
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_W TSRMLS_CC);
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = &opline->op2.u.constant;
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = &opline->op2.u.constant;
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_IS TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_IS TSRMLS_CC);
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = &opline->op2.u.constant;
+ zval **container;
if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_W TSRMLS_CC);
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (IS_CONST == IS_UNUSED) {
zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
}
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_R TSRMLS_CC);
}
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
SEPARATE_ZVAL_IF_NOT_REF(container);
}
}
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *property = &opline->op2.u.constant;
+ zval **container;
- if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) && IS_VAR != IS_CV) {
+ if (IS_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
}
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *property = &opline->op2.u.constant;
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_RW TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
/* Behave like FETCH_OBJ_W */
zend_free_op free_op1;
zval *property = &opline->op2.u.constant;
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (0) {
MAKE_REAL_ZVAL_PTR(property_name);
}
+ if (IS_VAR == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_assign_to_object(&opline->result, object_ptr, property_name, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
if (0) {
zval_ptr_dtor(&property_name);
zval *dim = &opline->op2.u.constant;
zval **variable_ptr_ptr;
+ if (IS_VAR == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
if(IS_CONST != IS_UNUSED) {
char *function_name_strval;
int function_name_strlen;
- zend_bool is_const = (IS_CONST == IS_CONST);
- if (is_const) {
+ if (IS_CONST == IS_CONST) {
function_name_strval = Z_STRVAL(opline->op2.u.constant);
function_name_strlen = Z_STRLEN(opline->op2.u.constant);
} else {
EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
}
- if (!is_const) {
+ if (IS_CONST != IS_CONST) {
efree(function_name_strval);
}
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
+ is_identical_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !Z_LVAL(EX_T(opline->result.u.var).tmp_var);
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) == 0));
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) != 0));
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) < 0));
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) <= 0));
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
} else {
zend_op *op_data = opline+1;
zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_RW TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), container, dim, 1, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
var_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
increment_opline = 1;
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container;
if (opline->extended_value == ZEND_FETCH_ADD_LOCK &&
IS_VAR != IS_CV &&
EX_T(opline->op1.u.var).var.ptr_ptr) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
}
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_R TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_R TSRMLS_CC);
zval_dtor(free_op2.var);
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_W TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_W TSRMLS_CC);
zval_dtor(free_op2.var);
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_RW TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_RW TSRMLS_CC);
zval_dtor(free_op2.var);
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_IS TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_IS TSRMLS_CC);
zval_dtor(free_op2.var);
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container;
if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_W TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_W TSRMLS_CC);
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (IS_TMP_VAR == IS_UNUSED) {
zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
}
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_R TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_R TSRMLS_CC);
}
zval_dtor(free_op2.var);
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
SEPARATE_ZVAL_IF_NOT_REF(container);
}
}
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_UNSET TSRMLS_CC);
zval_dtor(free_op2.var);
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container;
- if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) && IS_VAR != IS_CV) {
+ if (IS_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
}
if (1) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (1) {
zval_ptr_dtor(&property);
} else {
zval_dtor(free_op2.var);
}
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
if (1) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_RW TSRMLS_CC);
+ }
if (1) {
zval_ptr_dtor(&property);
} else {
zval_dtor(free_op2.var);
}
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
/* Behave like FETCH_OBJ_W */
zend_free_op free_op1, free_op2;
zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
if (1) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (1) {
zval_ptr_dtor(&property);
} else {
zval_dtor(free_op2.var);
}
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (1) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ }
if (1) {
zval_ptr_dtor(&property);
} else {
zval_dtor(free_op2.var);
}
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (1) {
MAKE_REAL_ZVAL_PTR(property_name);
}
+ if (IS_VAR == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_assign_to_object(&opline->result, object_ptr, property_name, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
if (1) {
zval_ptr_dtor(&property_name);
zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
zval **variable_ptr_ptr;
+ if (IS_VAR == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 1, BP_VAR_W TSRMLS_CC);
zval_dtor(free_op2.var);
if(IS_TMP_VAR != IS_UNUSED) {
char *function_name_strval;
int function_name_strlen;
- zend_bool is_const = (IS_TMP_VAR == IS_CONST);
zend_free_op free_op2;
- if (is_const) {
+ if (IS_TMP_VAR == IS_CONST) {
function_name_strval = Z_STRVAL(opline->op2.u.constant);
function_name_strlen = Z_STRLEN(opline->op2.u.constant);
} else {
EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
}
- if (!is_const) {
+ if (IS_TMP_VAR != IS_CONST) {
efree(function_name_strval);
zval_dtor(free_op2.var);
}
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
+ is_identical_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !Z_LVAL(EX_T(opline->result.u.var).tmp_var);
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) == 0));
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) != 0));
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) < 0));
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
- is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) <= 0));
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
} else {
zend_op *op_data = opline+1;
zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
var_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
increment_opline = 1;
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container;
if (opline->extended_value == ZEND_FETCH_ADD_LOCK &&
IS_VAR != IS_CV &&
EX_T(opline->op1.u.var).var.ptr_ptr) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
}
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_R TSRMLS_CC);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_W TSRMLS_CC);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_IS TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_IS TSRMLS_CC);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container;
if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_W TSRMLS_CC);
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (IS_VAR == IS_UNUSED) {
zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
}
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_R TSRMLS_CC);
}
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
SEPARATE_ZVAL_IF_NOT_REF(container);
}
}
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container;
- if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) && IS_VAR != IS_CV) {
+ if (IS_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
}
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
}
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_RW TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
}
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
/* Behave like FETCH_OBJ_W */
zend_free_op free_op1, free_op2;
zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
}
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
}
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (0) {
MAKE_REAL_ZVAL_PTR(property_name);
}
+ if (IS_VAR == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_assign_to_object(&opline->result, object_ptr, property_name, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
if (0) {
zval_ptr_dtor(&property_name);
zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
zval **variable_ptr_ptr;
+ if (IS_VAR == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
}
variable_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if ((IS_VAR == IS_VAR && !value_ptr_ptr) ||
+ (IS_VAR == IS_VAR && !variable_ptr_ptr)) {
+ zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets nor overloaded objects");
+ }
zend_assign_to_variable_reference(variable_ptr_ptr, value_ptr_ptr TSRMLS_CC);
if (!RETURN_VALUE_UNUSED(&opline->result)) {
if(IS_VAR != IS_UNUSED) {
char *function_name_strval;
int function_name_strlen;
- zend_bool is_const = (IS_VAR == IS_CONST);
zend_free_op free_op2;
- if (is_const) {
+ if (IS_VAR == IS_CONST) {
function_name_strval = Z_STRVAL(opline->op2.u.constant);
function_name_strlen = Z_STRLEN(opline->op2.u.constant);
} else {
EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
}
- if (!is_const) {
+ if (IS_VAR != IS_CONST) {
efree(function_name_strval);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
}
} else {
zend_op *op_data = opline+1;
zval *dim = NULL;
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
var_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
increment_opline = 1;
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = NULL;
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_W TSRMLS_CC);
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = NULL;
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = NULL;
+ zval **container;
if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_W TSRMLS_CC);
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (IS_UNUSED == IS_UNUSED) {
zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
}
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_R TSRMLS_CC);
}
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
zval *dim = NULL;
zval **variable_ptr_ptr;
+ if (IS_VAR == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
if(IS_UNUSED != IS_UNUSED) {
char *function_name_strval;
int function_name_strlen;
- zend_bool is_const = (IS_UNUSED == IS_CONST);
- if (is_const) {
+ if (IS_UNUSED == IS_CONST) {
function_name_strval = Z_STRVAL(opline->op2.u.constant);
function_name_strlen = Z_STRLEN(opline->op2.u.constant);
} else {
EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
}
- if (!is_const) {
+ if (IS_UNUSED != IS_CONST) {
efree(function_name_strval);
}
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
+ is_identical_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !Z_LVAL(EX_T(opline->result.u.var).tmp_var);
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) == 0));
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) != 0));
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) < 0));
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
- is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) <= 0));
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
} else {
zend_op *op_data = opline+1;
zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
var_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
increment_opline = 1;
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container;
if (opline->extended_value == ZEND_FETCH_ADD_LOCK &&
IS_VAR != IS_CV &&
EX_T(opline->op1.u.var).var.ptr_ptr) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
}
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_R TSRMLS_CC);
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_W TSRMLS_CC);
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_IS TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_IS TSRMLS_CC);
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container;
if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_W TSRMLS_CC);
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (IS_CV == IS_UNUSED) {
zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
}
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_R TSRMLS_CC);
}
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
SEPARATE_ZVAL_IF_NOT_REF(container);
}
}
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container;
- if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) && IS_VAR != IS_CV) {
+ if (IS_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
}
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_RW TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
/* Behave like FETCH_OBJ_W */
zend_free_op free_op1;
zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_VAR == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (0) {
MAKE_REAL_ZVAL_PTR(property_name);
}
+ if (IS_VAR == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_assign_to_object(&opline->result, object_ptr, property_name, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
if (0) {
zval_ptr_dtor(&property_name);
zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
zval **variable_ptr_ptr;
+ if (IS_VAR == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
}
variable_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ if ((IS_CV == IS_VAR && !value_ptr_ptr) ||
+ (IS_VAR == IS_VAR && !variable_ptr_ptr)) {
+ zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets nor overloaded objects");
+ }
zend_assign_to_variable_reference(variable_ptr_ptr, value_ptr_ptr TSRMLS_CC);
if (!RETURN_VALUE_UNUSED(&opline->result)) {
if(IS_CV != IS_UNUSED) {
char *function_name_strval;
int function_name_strlen;
- zend_bool is_const = (IS_CV == IS_CONST);
- if (is_const) {
+ if (IS_CV == IS_CONST) {
function_name_strval = Z_STRVAL(opline->op2.u.constant);
function_name_strlen = Z_STRLEN(opline->op2.u.constant);
} else {
EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
}
- if (!is_const) {
+ if (IS_CV != IS_CONST) {
efree(function_name_strval);
}
} else {
zend_op *op_data = opline+1;
zval *dim = &opline->op2.u.constant;
+ zval **container = NULL;
- zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), NULL, dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
var_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
increment_opline = 1;
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *property = &opline->op2.u.constant;
+ zval **container;
- if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) && IS_UNUSED != IS_CV) {
+ if (IS_UNUSED == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
}
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC);
+ container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_UNUSED == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *property = &opline->op2.u.constant;
+ zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_RW TSRMLS_CC);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_RW TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_UNUSED == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
/* Behave like FETCH_OBJ_W */
zend_free_op free_op1;
zval *property = &opline->op2.u.constant;
+ zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_UNUSED == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_UNUSED == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (0) {
MAKE_REAL_ZVAL_PTR(property_name);
}
+ if (IS_UNUSED == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_assign_to_object(&opline->result, object_ptr, property_name, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
if (0) {
zval_ptr_dtor(&property_name);
} else {
zend_op *op_data = opline+1;
zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = NULL;
- zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), NULL, dim, 1, BP_VAR_RW TSRMLS_CC);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), container, dim, 1, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
var_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
increment_opline = 1;
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container;
- if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) && IS_UNUSED != IS_CV) {
+ if (IS_UNUSED == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
}
if (1) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC);
+ container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (1) {
zval_ptr_dtor(&property);
} else {
zval_dtor(free_op2.var);
}
if (IS_UNUSED == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
if (1) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_RW TSRMLS_CC);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_RW TSRMLS_CC);
+ }
if (1) {
zval_ptr_dtor(&property);
} else {
zval_dtor(free_op2.var);
}
if (IS_UNUSED == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
/* Behave like FETCH_OBJ_W */
zend_free_op free_op1, free_op2;
zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
if (1) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (1) {
zval_ptr_dtor(&property);
} else {
zval_dtor(free_op2.var);
}
if (IS_UNUSED == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (1) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ }
if (1) {
zval_ptr_dtor(&property);
} else {
zval_dtor(free_op2.var);
}
if (IS_UNUSED == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (1) {
MAKE_REAL_ZVAL_PTR(property_name);
}
+ if (IS_UNUSED == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_assign_to_object(&opline->result, object_ptr, property_name, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
if (1) {
zval_ptr_dtor(&property_name);
} else {
zend_op *op_data = opline+1;
zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = NULL;
- zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), NULL, dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
var_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
increment_opline = 1;
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container;
- if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) && IS_UNUSED != IS_CV) {
+ if (IS_UNUSED == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
}
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC);
+ container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
}
if (IS_UNUSED == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_RW TSRMLS_CC);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_RW TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
}
if (IS_UNUSED == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
/* Behave like FETCH_OBJ_W */
zend_free_op free_op1, free_op2;
zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
}
if (IS_UNUSED == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
}
if (IS_UNUSED == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (0) {
MAKE_REAL_ZVAL_PTR(property_name);
}
+ if (IS_UNUSED == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_assign_to_object(&opline->result, object_ptr, property_name, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
if (0) {
zval_ptr_dtor(&property_name);
} else {
zend_op *op_data = opline+1;
zval *dim = NULL;
+ zval **container = NULL;
- zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), NULL, dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
var_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
increment_opline = 1;
} else {
zend_op *op_data = opline+1;
zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container = NULL;
- zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), NULL, dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
var_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
increment_opline = 1;
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container;
- if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) && IS_UNUSED != IS_CV) {
+ if (IS_UNUSED == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
}
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC);
+ container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_UNUSED == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_RW TSRMLS_CC);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_RW TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_UNUSED == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
/* Behave like FETCH_OBJ_W */
zend_free_op free_op1;
zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_UNUSED == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_UNUSED == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_UNUSED == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (0) {
MAKE_REAL_ZVAL_PTR(property_name);
}
+ if (IS_UNUSED == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_assign_to_object(&opline->result, object_ptr, property_name, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
if (0) {
zval_ptr_dtor(&property_name);
zval tmp_varname;
HashTable *target_symbol_table;
- if (Z_TYPE_P(varname) != IS_STRING) {
+ if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
tmp_varname = *varname;
zval_copy_ctor(&tmp_varname);
convert_to_string(&tmp_varname);
}
- if (varname == &tmp_varname) {
+ if (IS_CV != IS_CONST && varname == &tmp_varname) {
zval_dtor(varname);
}
if (!RETURN_VALUE_UNUSED(&opline->result)) {
int retval = i_zend_is_true(_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC));
- if (retval) {
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ ZEND_VM_CONTINUE();
+ } else if (EXPECTED(retval != 0)) {
#if DEBUG_ZEND>=2
printf("Conditional jmp on true to %d\n", opline->extended_value);
#endif
- ZEND_VM_JMP(&EX(op_array)->opcodes[opline->extended_value]);
+ ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->extended_value]);
+ ZEND_VM_CONTINUE(); /* CHECK_ME */
} else {
#if DEBUG_ZEND>=2
printf("Conditional jmp on false to %d\n", opline->op2.u.opline_num);
#endif
- ZEND_VM_JMP(&EX(op_array)->opcodes[opline->op2.u.opline_num]);
+ ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->op2.u.opline_num]);
+ ZEND_VM_CONTINUE(); /* CHECK_ME */
}
}
retval_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
- if (!retval_ptr_ptr) {
+ if (IS_CV == IS_VAR && !retval_ptr_ptr) {
zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");
}
zval *varptr;
varptr_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
- if (!varptr_ptr) {
+ if (IS_CV == IS_VAR && !varptr_ptr) {
zend_error_noreturn(E_ERROR, "Only variables can be passed by reference");
}
zend_op *opline = EX(opline);
- is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
+ is_identical_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
&opline->op2.u.constant TSRMLS_CC);
+ Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !Z_LVAL(EX_T(opline->result.u.var).tmp_var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
- is_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
&opline->op2.u.constant TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) == 0));
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
- is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
&opline->op2.u.constant TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) != 0));
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
- is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
&opline->op2.u.constant TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) < 0));
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
- is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
&opline->op2.u.constant TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) <= 0));
ZEND_VM_NEXT_OPCODE();
} else {
zend_op *op_data = opline+1;
zval *dim = &opline->op2.u.constant;
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
- zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
var_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
increment_opline = 1;
zend_op *opline = EX(opline);
zval *dim = &opline->op2.u.constant;
+ zval **container;
if (opline->extended_value == ZEND_FETCH_ADD_LOCK &&
IS_CV != IS_CV &&
EX_T(opline->op1.u.var).var.ptr_ptr) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
}
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
+ container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_R TSRMLS_CC);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = &opline->op2.u.constant;
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_W TSRMLS_CC);
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = &opline->op2.u.constant;
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zval *dim = &opline->op2.u.constant;
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC);
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC), dim, 0, BP_VAR_IS TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_IS TSRMLS_CC);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = &opline->op2.u.constant;
+ zval **container;
if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
+ container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_W TSRMLS_CC);
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (IS_CONST == IS_UNUSED) {
zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
}
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
+ container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_R TSRMLS_CC);
}
SEPARATE_ZVAL_IF_NOT_REF(container);
}
}
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *property = &opline->op2.u.constant;
+ zval **container;
- if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) && IS_CV != IS_CV) {
+ if (IS_CV == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
}
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
+ container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *property = &opline->op2.u.constant;
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_RW TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
/* Behave like FETCH_OBJ_W */
zend_free_op free_op1;
zval *property = &opline->op2.u.constant;
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (0) {
MAKE_REAL_ZVAL_PTR(property_name);
}
+ if (IS_CV == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_assign_to_object(&opline->result, object_ptr, property_name, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
if (0) {
zval_ptr_dtor(&property_name);
zval *dim = &opline->op2.u.constant;
zval **variable_ptr_ptr;
+ if (IS_CV == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
+ is_identical_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !Z_LVAL(EX_T(opline->result.u.var).tmp_var);
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) == 0));
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) != 0));
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) < 0));
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) <= 0));
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
} else {
zend_op *op_data = opline+1;
zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
- zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 1, BP_VAR_RW TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), container, dim, 1, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
var_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
increment_opline = 1;
zend_op *opline = EX(opline);
zend_free_op free_op2;
zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container;
if (opline->extended_value == ZEND_FETCH_ADD_LOCK &&
IS_CV != IS_CV &&
EX_T(opline->op1.u.var).var.ptr_ptr) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
}
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), dim, 1, BP_VAR_R TSRMLS_CC);
+ container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_R TSRMLS_CC);
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 1, BP_VAR_W TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_W TSRMLS_CC);
zval_dtor(free_op2.var);
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 1, BP_VAR_RW TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_RW TSRMLS_CC);
zval_dtor(free_op2.var);
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op2;
zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC);
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC), dim, 1, BP_VAR_IS TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_IS TSRMLS_CC);
zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container;
if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 1, BP_VAR_W TSRMLS_CC);
+ container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_W TSRMLS_CC);
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (IS_TMP_VAR == IS_UNUSED) {
zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
}
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), dim, 1, BP_VAR_R TSRMLS_CC);
+ container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_R TSRMLS_CC);
}
zval_dtor(free_op2.var);
SEPARATE_ZVAL_IF_NOT_REF(container);
}
}
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_UNSET TSRMLS_CC);
zval_dtor(free_op2.var);
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container;
- if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) && IS_CV != IS_CV) {
+ if (IS_CV == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
}
if (1) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
+ container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (1) {
zval_ptr_dtor(&property);
} else {
zval_dtor(free_op2.var);
}
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
if (1) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_RW TSRMLS_CC);
+ }
if (1) {
zval_ptr_dtor(&property);
} else {
zval_dtor(free_op2.var);
}
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
/* Behave like FETCH_OBJ_W */
zend_free_op free_op1, free_op2;
zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
if (1) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (1) {
zval_ptr_dtor(&property);
} else {
zval_dtor(free_op2.var);
}
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (1) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ }
if (1) {
zval_ptr_dtor(&property);
} else {
zval_dtor(free_op2.var);
}
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (1) {
MAKE_REAL_ZVAL_PTR(property_name);
}
+ if (IS_CV == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_assign_to_object(&opline->result, object_ptr, property_name, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
if (1) {
zval_ptr_dtor(&property_name);
zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
zval **variable_ptr_ptr;
+ if (IS_CV == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 1, BP_VAR_W TSRMLS_CC);
zval_dtor(free_op2.var);
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
+ is_identical_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !Z_LVAL(EX_T(opline->result.u.var).tmp_var);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) == 0));
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) != 0));
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) < 0));
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op2;
- is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) <= 0));
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
} else {
zend_op *op_data = opline+1;
zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
- zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
var_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
increment_opline = 1;
zend_op *opline = EX(opline);
zend_free_op free_op2;
zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container;
if (opline->extended_value == ZEND_FETCH_ADD_LOCK &&
IS_CV != IS_CV &&
EX_T(opline->op1.u.var).var.ptr_ptr) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
}
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
+ container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_R TSRMLS_CC);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_W TSRMLS_CC);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op2;
zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC);
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC), dim, 0, BP_VAR_IS TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_IS TSRMLS_CC);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container;
if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
+ container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_W TSRMLS_CC);
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (IS_VAR == IS_UNUSED) {
zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
}
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
+ container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_R TSRMLS_CC);
}
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
SEPARATE_ZVAL_IF_NOT_REF(container);
}
}
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container;
- if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) && IS_CV != IS_CV) {
+ if (IS_CV == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
}
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
+ container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
}
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1, free_op2;
zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_RW TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
}
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
/* Behave like FETCH_OBJ_W */
zend_free_op free_op1, free_op2;
zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
}
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
}
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (0) {
MAKE_REAL_ZVAL_PTR(property_name);
}
+ if (IS_CV == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_assign_to_object(&opline->result, object_ptr, property_name, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
if (0) {
zval_ptr_dtor(&property_name);
zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
zval **variable_ptr_ptr;
+ if (IS_CV == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC);
if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
}
variable_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
+ if ((IS_VAR == IS_VAR && !value_ptr_ptr) ||
+ (IS_CV == IS_VAR && !variable_ptr_ptr)) {
+ zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets nor overloaded objects");
+ }
zend_assign_to_variable_reference(variable_ptr_ptr, value_ptr_ptr TSRMLS_CC);
if (!RETURN_VALUE_UNUSED(&opline->result)) {
} else {
zend_op *op_data = opline+1;
zval *dim = NULL;
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
- zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
var_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
increment_opline = 1;
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = NULL;
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_W TSRMLS_CC);
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = NULL;
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = NULL;
+ zval **container;
if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
+ container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_W TSRMLS_CC);
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (IS_UNUSED == IS_UNUSED) {
zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
}
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
+ container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_R TSRMLS_CC);
}
zval *dim = NULL;
zval **variable_ptr_ptr;
+ if (IS_CV == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
zend_op *opline = EX(opline);
- is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
+ is_identical_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !Z_LVAL(EX_T(opline->result.u.var).tmp_var);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
- is_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) == 0));
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
- is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) != 0));
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
- is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) < 0));
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
- is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
+ compare_function(&EX_T(opline->result.u.var).tmp_var,
_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
+ ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var,
+ (Z_LVAL(EX_T(opline->result.u.var).tmp_var) <= 0));
ZEND_VM_NEXT_OPCODE();
} else {
zend_op *op_data = opline+1;
zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
- zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
var_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
increment_opline = 1;
zend_op *opline = EX(opline);
zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container;
if (opline->extended_value == ZEND_FETCH_ADD_LOCK &&
IS_CV != IS_CV &&
EX_T(opline->op1.u.var).var.ptr_ptr) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
}
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
+ container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_R TSRMLS_CC);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_W TSRMLS_CC);
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_RW TSRMLS_CC);
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC);
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC), dim, 0, BP_VAR_IS TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_IS TSRMLS_CC);
ZEND_VM_NEXT_OPCODE();
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container;
if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
+ container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_W TSRMLS_CC);
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (IS_CV == IS_UNUSED) {
zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
}
- zend_fetch_dimension_address_read(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
+ container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address_read(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_R TSRMLS_CC);
}
SEPARATE_ZVAL_IF_NOT_REF(container);
}
}
- zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
+ zend_fetch_dimension_address(&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container;
- if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) && IS_CV != IS_CV) {
+ if (IS_CV == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
}
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
+ container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_RW TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
/* Behave like FETCH_OBJ_W */
zend_free_op free_op1;
zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_W TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (0) {
MAKE_REAL_ZVAL_PTR(property);
}
- zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ if (IS_CV == IS_VAR && !container) {
+ zend_error(E_WARNING, "Cannot use string offset as an array");
+ EX_T(opline->result.u.var).var.ptr_ptr = &EG(error_zval_ptr);
+ PZVAL_LOCK(EG(error_zval_ptr));
+ } else {
+ zend_fetch_property_address(&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
+ }
if (0) {
zval_ptr_dtor(&property);
} else {
}
if (IS_CV == IS_VAR && 0 &&
- READY_TO_DESTROY(free_op1.var) &&
- !RETURN_VALUE_UNUSED(&opline->result)) {
+ READY_TO_DESTROY(free_op1.var)) {
AI_USE_PTR(EX_T(opline->result.u.var).var);
if (!PZVAL_IS_REF(*EX_T(opline->result.u.var).var.ptr_ptr) &&
Z_REFCOUNT_PP(EX_T(opline->result.u.var).var.ptr_ptr) > 2) {
if (0) {
MAKE_REAL_ZVAL_PTR(property_name);
}
+ if (IS_CV == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_assign_to_object(&opline->result, object_ptr, property_name, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
if (0) {
zval_ptr_dtor(&property_name);
zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
zval **variable_ptr_ptr;
+ if (IS_CV == IS_VAR && !object_ptr) {
+ zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
+ }
zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC);
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
}
variable_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
+ if ((IS_CV == IS_VAR && !value_ptr_ptr) ||
+ (IS_CV == IS_VAR && !variable_ptr_ptr)) {
+ zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets nor overloaded objects");
+ }
zend_assign_to_variable_reference(variable_ptr_ptr, value_ptr_ptr TSRMLS_CC);
if (!RETURN_VALUE_UNUSED(&opline->result)) {