mirror of
https://github.com/php/php-src.git
synced 2025-08-18 15:08:55 +02:00
Converted fatal errors into EngineExceptions
This commit is contained in:
parent
a0eaa37afe
commit
4fd93a4da6
4 changed files with 151 additions and 66 deletions
17
Zend/tests/exception_015.phpt
Normal file
17
Zend/tests/exception_015.phpt
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
--TEST--
|
||||||
|
Exceptions on improper access to string
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
$s = "ABC";
|
||||||
|
try {
|
||||||
|
$s[] = "D";
|
||||||
|
} catch (EngineException $e) {
|
||||||
|
echo "\nException: " . $e->getMessage() . " in " , $e->getFile() . " on line " . $e->getLine() . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$s[] = "D";
|
||||||
|
?>
|
||||||
|
--EXPECTF--
|
||||||
|
Exception: [] operator not supported for strings in %sexception_015.php on line %d
|
||||||
|
|
||||||
|
Fatal error: [] operator not supported for strings in %sexception_015.php on line %d
|
|
@ -1124,7 +1124,9 @@ static zend_never_inline void zend_assign_to_object_dim(zval *retval, zval *obje
|
||||||
|
|
||||||
/* Note: property_name in this case is really the array index! */
|
/* Note: property_name in this case is really the array index! */
|
||||||
if (!Z_OBJ_HT_P(object)->write_dimension) {
|
if (!Z_OBJ_HT_P(object)->write_dimension) {
|
||||||
zend_error_noreturn(E_ERROR, "Cannot use object as array");
|
zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
|
||||||
|
FREE_OP(free_value);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* separate our value if necessary */
|
/* separate our value if necessary */
|
||||||
|
@ -1395,10 +1397,6 @@ static zend_never_inline zend_long zend_check_string_offset(zval *dim, int type)
|
||||||
{
|
{
|
||||||
zend_long offset;
|
zend_long offset;
|
||||||
|
|
||||||
if (dim == NULL) {
|
|
||||||
zend_error_noreturn(E_ERROR, "[] operator not supported for strings");
|
|
||||||
}
|
|
||||||
|
|
||||||
try_again:
|
try_again:
|
||||||
if (UNEXPECTED(Z_TYPE_P(dim) != IS_LONG)) {
|
if (UNEXPECTED(Z_TYPE_P(dim) != IS_LONG)) {
|
||||||
switch(Z_TYPE_P(dim)) {
|
switch(Z_TYPE_P(dim)) {
|
||||||
|
@ -1473,12 +1471,17 @@ convert_to_array:
|
||||||
goto fetch_from_array;
|
goto fetch_from_array;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dim == NULL) {
|
||||||
|
zend_error(E_EXCEPTION | E_ERROR, "[] operator not supported for strings");
|
||||||
|
} else {
|
||||||
zend_check_string_offset(dim, type);
|
zend_check_string_offset(dim, type);
|
||||||
|
}
|
||||||
|
|
||||||
ZVAL_INDIRECT(result, NULL); /* wrong string offset */
|
ZVAL_INDIRECT(result, NULL); /* wrong string offset */
|
||||||
} else if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
} else if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
||||||
if (!Z_OBJ_HT_P(container)->read_dimension) {
|
if (!Z_OBJ_HT_P(container)->read_dimension) {
|
||||||
zend_error_noreturn(E_ERROR, "Cannot use object as array");
|
zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
|
||||||
|
retval = &EG(error_zval);
|
||||||
} else {
|
} else {
|
||||||
retval = Z_OBJ_HT_P(container)->read_dimension(container, dim, type, result);
|
retval = Z_OBJ_HT_P(container)->read_dimension(container, dim, type, result);
|
||||||
|
|
||||||
|
@ -1610,7 +1613,8 @@ try_string_offset:
|
||||||
}
|
}
|
||||||
} else if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
} else if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
||||||
if (!Z_OBJ_HT_P(container)->read_dimension) {
|
if (!Z_OBJ_HT_P(container)->read_dimension) {
|
||||||
zend_error_noreturn(E_ERROR, "Cannot use object as array");
|
zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
|
||||||
|
ZVAL_NULL(result);
|
||||||
} else {
|
} else {
|
||||||
retval = Z_OBJ_HT_P(container)->read_dimension(container, dim, type, result);
|
retval = Z_OBJ_HT_P(container)->read_dimension(container, dim, type, result);
|
||||||
|
|
||||||
|
@ -1704,7 +1708,8 @@ static zend_always_inline void zend_fetch_property_address(zval *result, zval *c
|
||||||
ZVAL_INDIRECT(result, ptr);
|
ZVAL_INDIRECT(result, ptr);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
zend_error_noreturn(E_ERROR, "Cannot access undefined property for object with overloaded property access");
|
zend_error(E_EXCEPTION | E_ERROR, "Cannot access undefined property for object with overloaded property access");
|
||||||
|
ZVAL_INDIRECT(result, &EG(error_zval));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ZVAL_INDIRECT(result, ptr);
|
ZVAL_INDIRECT(result, ptr);
|
||||||
|
|
|
@ -2136,6 +2136,12 @@ ZEND_VM_C_LABEL(try_assign_dim_array):
|
||||||
FREE_OP2();
|
FREE_OP2();
|
||||||
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
|
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
|
||||||
if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
|
if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
|
||||||
|
if (OP2_TYPE == IS_UNUSED) {
|
||||||
|
zend_error(E_EXCEPTION | E_ERROR, "[] operator not supported for strings");
|
||||||
|
FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
||||||
|
FREE_OP1_VAR_PTR();
|
||||||
|
HANDLE_EXCEPTION();
|
||||||
|
} else {
|
||||||
zend_long offset;
|
zend_long offset;
|
||||||
|
|
||||||
dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
||||||
|
@ -2144,6 +2150,7 @@ ZEND_VM_C_LABEL(try_assign_dim_array):
|
||||||
value = get_zval_ptr_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
|
value = get_zval_ptr_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
|
||||||
zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
|
zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
|
||||||
FREE_OP(free_op_data1);
|
FREE_OP(free_op_data1);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
zval_ptr_dtor_nogc(object_ptr);
|
zval_ptr_dtor_nogc(object_ptr);
|
||||||
ZEND_VM_C_LABEL(assign_dim_convert_to_array):
|
ZEND_VM_C_LABEL(assign_dim_convert_to_array):
|
||||||
|
|
|
@ -15705,6 +15705,12 @@ try_assign_dim_array:
|
||||||
|
|
||||||
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
|
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
|
||||||
if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
|
if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
|
||||||
|
if (IS_CONST == IS_UNUSED) {
|
||||||
|
zend_error(E_EXCEPTION | E_ERROR, "[] operator not supported for strings");
|
||||||
|
FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
||||||
|
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
|
||||||
|
HANDLE_EXCEPTION();
|
||||||
|
} else {
|
||||||
zend_long offset;
|
zend_long offset;
|
||||||
|
|
||||||
dim = EX_CONSTANT(opline->op2);
|
dim = EX_CONSTANT(opline->op2);
|
||||||
|
@ -15713,6 +15719,7 @@ try_assign_dim_array:
|
||||||
value = get_zval_ptr_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
|
value = get_zval_ptr_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
|
||||||
zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
|
zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
|
||||||
FREE_OP(free_op_data1);
|
FREE_OP(free_op_data1);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
zval_ptr_dtor_nogc(object_ptr);
|
zval_ptr_dtor_nogc(object_ptr);
|
||||||
assign_dim_convert_to_array:
|
assign_dim_convert_to_array:
|
||||||
|
@ -17307,6 +17314,12 @@ try_assign_dim_array:
|
||||||
|
|
||||||
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
|
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
|
||||||
if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
|
if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
|
||||||
|
if (IS_UNUSED == IS_UNUSED) {
|
||||||
|
zend_error(E_EXCEPTION | E_ERROR, "[] operator not supported for strings");
|
||||||
|
FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
||||||
|
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
|
||||||
|
HANDLE_EXCEPTION();
|
||||||
|
} else {
|
||||||
zend_long offset;
|
zend_long offset;
|
||||||
|
|
||||||
dim = NULL;
|
dim = NULL;
|
||||||
|
@ -17315,6 +17328,7 @@ try_assign_dim_array:
|
||||||
value = get_zval_ptr_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
|
value = get_zval_ptr_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
|
||||||
zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
|
zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
|
||||||
FREE_OP(free_op_data1);
|
FREE_OP(free_op_data1);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
zval_ptr_dtor_nogc(object_ptr);
|
zval_ptr_dtor_nogc(object_ptr);
|
||||||
assign_dim_convert_to_array:
|
assign_dim_convert_to_array:
|
||||||
|
@ -18824,6 +18838,12 @@ try_assign_dim_array:
|
||||||
|
|
||||||
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
|
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
|
||||||
if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
|
if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
|
||||||
|
if (IS_CV == IS_UNUSED) {
|
||||||
|
zend_error(E_EXCEPTION | E_ERROR, "[] operator not supported for strings");
|
||||||
|
FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
||||||
|
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
|
||||||
|
HANDLE_EXCEPTION();
|
||||||
|
} else {
|
||||||
zend_long offset;
|
zend_long offset;
|
||||||
|
|
||||||
dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
|
dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
|
||||||
|
@ -18832,6 +18852,7 @@ try_assign_dim_array:
|
||||||
value = get_zval_ptr_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
|
value = get_zval_ptr_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
|
||||||
zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
|
zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
|
||||||
FREE_OP(free_op_data1);
|
FREE_OP(free_op_data1);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
zval_ptr_dtor_nogc(object_ptr);
|
zval_ptr_dtor_nogc(object_ptr);
|
||||||
assign_dim_convert_to_array:
|
assign_dim_convert_to_array:
|
||||||
|
@ -20473,6 +20494,12 @@ try_assign_dim_array:
|
||||||
zval_ptr_dtor_nogc(free_op2);
|
zval_ptr_dtor_nogc(free_op2);
|
||||||
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
|
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
|
||||||
if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
|
if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
|
||||||
|
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
|
||||||
|
zend_error(E_EXCEPTION | E_ERROR, "[] operator not supported for strings");
|
||||||
|
FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
||||||
|
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
|
||||||
|
HANDLE_EXCEPTION();
|
||||||
|
} else {
|
||||||
zend_long offset;
|
zend_long offset;
|
||||||
|
|
||||||
dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
|
dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
|
||||||
|
@ -20481,6 +20508,7 @@ try_assign_dim_array:
|
||||||
value = get_zval_ptr_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
|
value = get_zval_ptr_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
|
||||||
zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
|
zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
|
||||||
FREE_OP(free_op_data1);
|
FREE_OP(free_op_data1);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
zval_ptr_dtor_nogc(object_ptr);
|
zval_ptr_dtor_nogc(object_ptr);
|
||||||
assign_dim_convert_to_array:
|
assign_dim_convert_to_array:
|
||||||
|
@ -29411,6 +29439,12 @@ try_assign_dim_array:
|
||||||
|
|
||||||
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
|
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
|
||||||
if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
|
if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
|
||||||
|
if (IS_CONST == IS_UNUSED) {
|
||||||
|
zend_error(E_EXCEPTION | E_ERROR, "[] operator not supported for strings");
|
||||||
|
FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
||||||
|
|
||||||
|
HANDLE_EXCEPTION();
|
||||||
|
} else {
|
||||||
zend_long offset;
|
zend_long offset;
|
||||||
|
|
||||||
dim = EX_CONSTANT(opline->op2);
|
dim = EX_CONSTANT(opline->op2);
|
||||||
|
@ -29419,6 +29453,7 @@ try_assign_dim_array:
|
||||||
value = get_zval_ptr_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
|
value = get_zval_ptr_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
|
||||||
zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
|
zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
|
||||||
FREE_OP(free_op_data1);
|
FREE_OP(free_op_data1);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
zval_ptr_dtor_nogc(object_ptr);
|
zval_ptr_dtor_nogc(object_ptr);
|
||||||
assign_dim_convert_to_array:
|
assign_dim_convert_to_array:
|
||||||
|
@ -32011,6 +32046,12 @@ try_assign_dim_array:
|
||||||
|
|
||||||
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
|
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
|
||||||
if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
|
if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
|
||||||
|
if (IS_UNUSED == IS_UNUSED) {
|
||||||
|
zend_error(E_EXCEPTION | E_ERROR, "[] operator not supported for strings");
|
||||||
|
FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
||||||
|
|
||||||
|
HANDLE_EXCEPTION();
|
||||||
|
} else {
|
||||||
zend_long offset;
|
zend_long offset;
|
||||||
|
|
||||||
dim = NULL;
|
dim = NULL;
|
||||||
|
@ -32019,6 +32060,7 @@ try_assign_dim_array:
|
||||||
value = get_zval_ptr_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
|
value = get_zval_ptr_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
|
||||||
zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
|
zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
|
||||||
FREE_OP(free_op_data1);
|
FREE_OP(free_op_data1);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
zval_ptr_dtor_nogc(object_ptr);
|
zval_ptr_dtor_nogc(object_ptr);
|
||||||
assign_dim_convert_to_array:
|
assign_dim_convert_to_array:
|
||||||
|
@ -34189,6 +34231,12 @@ try_assign_dim_array:
|
||||||
|
|
||||||
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
|
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
|
||||||
if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
|
if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
|
||||||
|
if (IS_CV == IS_UNUSED) {
|
||||||
|
zend_error(E_EXCEPTION | E_ERROR, "[] operator not supported for strings");
|
||||||
|
FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
||||||
|
|
||||||
|
HANDLE_EXCEPTION();
|
||||||
|
} else {
|
||||||
zend_long offset;
|
zend_long offset;
|
||||||
|
|
||||||
dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
|
dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
|
||||||
|
@ -34197,6 +34245,7 @@ try_assign_dim_array:
|
||||||
value = get_zval_ptr_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
|
value = get_zval_ptr_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
|
||||||
zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
|
zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
|
||||||
FREE_OP(free_op_data1);
|
FREE_OP(free_op_data1);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
zval_ptr_dtor_nogc(object_ptr);
|
zval_ptr_dtor_nogc(object_ptr);
|
||||||
assign_dim_convert_to_array:
|
assign_dim_convert_to_array:
|
||||||
|
@ -36700,6 +36749,12 @@ try_assign_dim_array:
|
||||||
zval_ptr_dtor_nogc(free_op2);
|
zval_ptr_dtor_nogc(free_op2);
|
||||||
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
|
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
|
||||||
if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
|
if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
|
||||||
|
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
|
||||||
|
zend_error(E_EXCEPTION | E_ERROR, "[] operator not supported for strings");
|
||||||
|
FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
||||||
|
|
||||||
|
HANDLE_EXCEPTION();
|
||||||
|
} else {
|
||||||
zend_long offset;
|
zend_long offset;
|
||||||
|
|
||||||
dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
|
dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
|
||||||
|
@ -36708,6 +36763,7 @@ try_assign_dim_array:
|
||||||
value = get_zval_ptr_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
|
value = get_zval_ptr_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
|
||||||
zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
|
zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
|
||||||
FREE_OP(free_op_data1);
|
FREE_OP(free_op_data1);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
zval_ptr_dtor_nogc(object_ptr);
|
zval_ptr_dtor_nogc(object_ptr);
|
||||||
assign_dim_convert_to_array:
|
assign_dim_convert_to_array:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue