diff options
author | Xinchen Hui <laruence@gmail.com> | 2017-07-27 10:42:36 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@gmail.com> | 2017-07-31 11:51:23 +0800 |
commit | 9b87b73fec48b6d0df0e71cf7819004510fd6bf5 (patch) | |
tree | 86903b6fee48218a6f91052a987a6e83c203235a | |
parent | c62e5eb0a9d5d308a693e742d92d519eb64a902a (diff) | |
download | php-git-9b87b73fec48b6d0df0e71cf7819004510fd6bf5.tar.gz |
Req #74963 (Improved error message on fetching property of non-object)
-rw-r--r-- | Zend/tests/024.phpt | 8 | ||||
-rw-r--r-- | Zend/tests/026.phpt | 2 | ||||
-rw-r--r-- | Zend/tests/033.phpt | 2 | ||||
-rw-r--r-- | Zend/tests/assign_dim_obj_null_return.phpt | 4 | ||||
-rw-r--r-- | Zend/tests/bug31098.phpt | 4 | ||||
-rw-r--r-- | Zend/tests/bug36303.phpt | 2 | ||||
-rw-r--r-- | Zend/tests/bug44660.phpt | 12 | ||||
-rw-r--r-- | Zend/tests/bug47109.phpt | 2 | ||||
-rw-r--r-- | Zend/tests/bug52237.phpt | 2 | ||||
-rw-r--r-- | Zend/tests/bug54262.phpt | 2 | ||||
-rw-r--r-- | Zend/tests/bug72911.phpt | 4 | ||||
-rw-r--r-- | Zend/tests/dereference_014.phpt | 4 | ||||
-rw-r--r-- | Zend/tests/isset_003.phpt | 2 | ||||
-rw-r--r-- | Zend/tests/varSyntax/propertyOfStringError.phpt | 2 | ||||
-rw-r--r-- | Zend/zend_execute.c | 4 | ||||
-rw-r--r-- | Zend/zend_vm_def.h | 57 | ||||
-rw-r--r-- | Zend/zend_vm_execute.h | 1419 | ||||
-rw-r--r-- | ext/dom/tests/bug67949.phpt | 4 | ||||
-rw-r--r-- | ext/pdo_mysql/tests/bug44327.phpt | 2 | ||||
-rw-r--r-- | ext/simplexml/tests/017.phpt | 4 | ||||
-rw-r--r-- | tests/classes/implicit_instantiation_001.phpt | 18 |
21 files changed, 932 insertions, 628 deletions
diff --git a/Zend/tests/024.phpt b/Zend/tests/024.phpt index f89c49e613..34dac0f1e3 100644 --- a/Zend/tests/024.phpt +++ b/Zend/tests/024.phpt @@ -37,15 +37,15 @@ NULL Notice: Undefined variable: b in %s on line %d int(1) -Notice: Trying to get property of non-object in %s on line %d +Notice: Trying to get property '1' of non-object in %s on line %d NULL -Notice: Trying to get property of non-object in %s on line %d +Notice: Trying to get property '1' of non-object in %s on line %d NULL Notice: Undefined variable: c in %s on line %d -Notice: Trying to get property of non-object in %s on line %d +Notice: Trying to get property '1' of non-object in %s on line %d -Notice: Trying to get property of non-object in %s on line %d +Notice: Trying to get property '' of non-object in %s on line %d NULL diff --git a/Zend/tests/026.phpt b/Zend/tests/026.phpt index 5fa0e1677c..b3088e8473 100644 --- a/Zend/tests/026.phpt +++ b/Zend/tests/026.phpt @@ -18,7 +18,7 @@ print "ok\n"; ?> --EXPECTF-- -Notice: Trying to get property of non-object in %s on line %d +Notice: Trying to get property 'a' of non-object in %s on line %d ok Warning: Creating default object from empty value in %s on line %d diff --git a/Zend/tests/033.phpt b/Zend/tests/033.phpt index 17319e0d61..5ff0089058 100644 --- a/Zend/tests/033.phpt +++ b/Zend/tests/033.phpt @@ -24,7 +24,7 @@ Notice: Undefined variable: arr in %s on line %d Notice: Undefined variable: arr in %s on line %d -Notice: Trying to get property of non-object in %s on line %d +Notice: Trying to get property 'foo' of non-object in %s on line %d Warning: Creating default object from empty value in %s on line %d diff --git a/Zend/tests/assign_dim_obj_null_return.phpt b/Zend/tests/assign_dim_obj_null_return.phpt index e833ef3591..cff877fd8f 100644 --- a/Zend/tests/assign_dim_obj_null_return.phpt +++ b/Zend/tests/assign_dim_obj_null_return.phpt @@ -49,8 +49,8 @@ NULL Warning: Cannot use a scalar value as an array in %s on line %d NULL -Warning: Attempt to assign property of non-object in %s on line %d +Warning: Attempt to assign property 'foo' of non-object in %s on line %d NULL -Warning: Attempt to assign property of non-object in %s on line %d +Warning: Attempt to assign property 'foo' of non-object in %s on line %d NULL diff --git a/Zend/tests/bug31098.phpt b/Zend/tests/bug31098.phpt index 31823a1aa5..1849528231 100644 --- a/Zend/tests/bug31098.phpt +++ b/Zend/tests/bug31098.phpt @@ -44,7 +44,7 @@ ok ok ok -Notice: Trying to get property of non-object in %s on line %d +Notice: Trying to get property 'wrong' of non-object in %s on line %d ok Warning: Illegal string offset 'wrong' in %s on line %d @@ -52,4 +52,4 @@ ok ok Warning: Illegal string offset 'wrong' in %s on line %d -ok
\ No newline at end of file +ok diff --git a/Zend/tests/bug36303.phpt b/Zend/tests/bug36303.phpt index 0f92323834..3ea036a838 100644 --- a/Zend/tests/bug36303.phpt +++ b/Zend/tests/bug36303.phpt @@ -8,7 +8,7 @@ foreach($x->a->b as &$v) { echo "ok\n"; ?> --EXPECTF-- -Warning: Attempt to modify property of non-object in %sbug36303.php on line 3 +Warning: Attempt to modify property 'a' of non-object in %sbug36303.php on line 3 Warning: Invalid argument supplied for foreach() in %sbug36303.php on line 3 ok diff --git a/Zend/tests/bug44660.phpt b/Zend/tests/bug44660.phpt index 1027377d34..002744ce64 100644 --- a/Zend/tests/bug44660.phpt +++ b/Zend/tests/bug44660.phpt @@ -28,22 +28,22 @@ var_dump($a); ?> --EXPECTF-- --> read access: -Notice: Trying to get property of non-object in %sbug44660.php on line 6 +Notice: Trying to get property 'p' of non-object in %sbug44660.php on line 6 --> direct assignment: -Warning: Attempt to assign property of non-object in %sbug44660.php on line 9 +Warning: Attempt to assign property 'p' of non-object in %sbug44660.php on line 9 --> increment: -Warning: Attempt to increment/decrement property of non-object in %sbug44660.php on line 12 +Warning: Attempt to increment/decrement property 'p' of non-object in %sbug44660.php on line 12 --> reference assignment: -Warning: Attempt to modify property of non-object in %sbug44660.php on line 15 +Warning: Attempt to modify property 'p' of non-object in %sbug44660.php on line 15 --> reference assignment: -Warning: Attempt to modify property of non-object in %sbug44660.php on line 18 +Warning: Attempt to modify property 'p' of non-object in %sbug44660.php on line 18 --> indexed assignment: -Warning: Attempt to modify property of non-object in %sbug44660.php on line 21 +Warning: Attempt to modify property 'p' of non-object in %sbug44660.php on line 21 --> Confirm assignments have had no impact: bool(true) diff --git a/Zend/tests/bug47109.phpt b/Zend/tests/bug47109.phpt index 8f810d7fb1..4d157345b2 100644 --- a/Zend/tests/bug47109.phpt +++ b/Zend/tests/bug47109.phpt @@ -7,5 +7,5 @@ $a->{"a"."b"}; --EXPECTF-- Notice: Undefined variable: a in %sbug47109.php on line 2 -Notice: Trying to get property of non-object in %sbug47109.php on line 2 +Notice: Trying to get property 'ab' of non-object in %sbug47109.php on line 2 diff --git a/Zend/tests/bug52237.phpt b/Zend/tests/bug52237.phpt index 0b54787aa9..47d39f8e9d 100644 --- a/Zend/tests/bug52237.phpt +++ b/Zend/tests/bug52237.phpt @@ -8,5 +8,5 @@ var_dump($data); ?> --EXPECTF-- -Warning: Attempt to modify property of non-object in %sbug52237.php on line 3 +Warning: Attempt to modify property 'info' of non-object in %sbug52237.php on line 3 string(4) "test" diff --git a/Zend/tests/bug54262.phpt b/Zend/tests/bug54262.phpt index 17a6ea6381..16933ca300 100644 --- a/Zend/tests/bug54262.phpt +++ b/Zend/tests/bug54262.phpt @@ -11,7 +11,7 @@ echo "ok\n"; --EXPECTF-- bool(false) -Warning: Attempt to modify property of non-object in %sbug54262.php on line 4 +Warning: Attempt to modify property 'a' of non-object in %sbug54262.php on line 4 Warning: Cannot use a scalar value as an array in %sbug54262.php on line 5 ok diff --git a/Zend/tests/bug72911.phpt b/Zend/tests/bug72911.phpt index 098261cadf..84f04eff1e 100644 --- a/Zend/tests/bug72911.phpt +++ b/Zend/tests/bug72911.phpt @@ -11,7 +11,7 @@ var_dump($b); ?> --EXPECTF-- -Warning: Attempt to modify property of non-object in %sbug72911.php on line %d +Warning: Attempt to modify property 'b' of non-object in %sbug72911.php on line %d -Warning: Attempt to assign property of non-object in %sbug72911.php on line %d +Warning: Attempt to assign property 'i' of non-object in %sbug72911.php on line %d NULL diff --git a/Zend/tests/dereference_014.phpt b/Zend/tests/dereference_014.phpt index 62dffd3698..859ac93348 100644 --- a/Zend/tests/dereference_014.phpt +++ b/Zend/tests/dereference_014.phpt @@ -27,8 +27,8 @@ var_dump($h); ?> --EXPECTF-- -Notice: Trying to get property of non-object in %s on line %d +Notice: Trying to get property 'a' of non-object in %s on line %d NULL -Notice: Trying to get property of non-object in %s on line %d +Notice: Trying to get property 'b' of non-object in %s on line %d NULL diff --git a/Zend/tests/isset_003.phpt b/Zend/tests/isset_003.phpt index 92225b5906..eac72f7e0a 100644 --- a/Zend/tests/isset_003.phpt +++ b/Zend/tests/isset_003.phpt @@ -33,7 +33,7 @@ Notice: Undefined variable: c in %s on line %d Notice: Undefined variable: d in %s on line %d -Notice: Trying to get property of non-object in %s on line %d +Notice: Trying to get property '' of non-object in %s on line %d bool(false) bool(true) bool(false) diff --git a/Zend/tests/varSyntax/propertyOfStringError.phpt b/Zend/tests/varSyntax/propertyOfStringError.phpt index 85abc5849a..4fa50e7df0 100644 --- a/Zend/tests/varSyntax/propertyOfStringError.phpt +++ b/Zend/tests/varSyntax/propertyOfStringError.phpt @@ -7,4 +7,4 @@ Cannot take property of a string ?> --EXPECTF-- -Notice: Trying to get property of non-object in %s on line %d +Notice: Trying to get property 'bar' of non-object in %s on line %d diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index c5a4a471c5..a78accfb76 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1886,7 +1886,9 @@ static zend_always_inline void zend_fetch_property_address(zval *result, zval *c object_init(container); } else { if (container_op_type != IS_VAR || EXPECTED(!Z_ISERROR_P(container))) { - zend_error(E_WARNING, "Attempt to modify property of non-object"); + zend_string *property_name = zval_get_string(prop_ptr); + zend_error(E_WARNING, "Attempt to modify property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } ZVAL_ERROR(result); return; diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 316898e8c4..f8538e02c4 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -811,7 +811,9 @@ ZEND_VM_HELPER(zend_binary_assign_op_obj_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV, if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -1070,7 +1072,9 @@ ZEND_VM_HELPER(zend_pre_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV, if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -1147,7 +1151,9 @@ ZEND_VM_HELPER(zend_post_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV, if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); break; } @@ -1802,8 +1808,11 @@ ZEND_VM_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMP|VAR|UNUSED|THIS|CV, CONST|TMPVAR } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { + zend_string *property_name; ZEND_VM_C_LABEL(fetch_obj_r_no_object): - zend_error(E_NOTICE, "Trying to get property of non-object"); + property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var)); @@ -2014,7 +2023,7 @@ ZEND_VM_HANDLER(136, ZEND_ASSIGN_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, SPEC( { USE_OPLINE zend_free_op free_op1, free_op2, free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W); @@ -2023,7 +2032,7 @@ ZEND_VM_HANDLER(136, ZEND_ASSIGN_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, SPEC( ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper); } - property_name = GET_OP2_ZVAL_PTR(BP_VAR_R); + property = GET_OP2_ZVAL_PTR(BP_VAR_R); value = GET_OP_DATA_ZVAL_PTR(BP_VAR_R); if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -2055,7 +2064,9 @@ ZEND_VM_HANDLER(136, ZEND_ASSIGN_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, SPEC( Z_DELREF_P(object); } else { if (OP1_TYPE != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -2067,16 +2078,16 @@ ZEND_VM_HANDLER(136, ZEND_ASSIGN_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, SPEC( } if (OP2_TYPE == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { ZEND_VM_C_LABEL(fast_assign_obj): - value = zend_assign_to_variable(property, value, OP_DATA_TYPE); + value = zend_assign_to_variable(property_val, value, OP_DATA_TYPE); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -2090,8 +2101,8 @@ ZEND_VM_C_LABEL(fast_assign_obj): } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { ZEND_VM_C_GOTO(fast_assign_obj); } } @@ -2129,7 +2140,7 @@ ZEND_VM_C_LABEL(fast_assign_obj): Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -2139,7 +2150,9 @@ ZEND_VM_C_LABEL(fast_assign_obj): } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -2151,7 +2164,7 @@ ZEND_VM_C_LABEL(fast_assign_obj): ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -5597,7 +5610,9 @@ ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV) if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL)); } else { - zend_error(E_NOTICE, "Trying to unset property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } } while (0); @@ -6489,7 +6504,9 @@ ZEND_VM_HANDLER(148, ZEND_ISSET_ISEMPTY_PROP_OBJ, CONST|TMPVAR|UNUSED|THIS|CV, C } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { - zend_error(E_NOTICE, "Trying to check property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZEND_VM_C_LABEL(isset_no_object): result = ((opline->extended_value & ZEND_ISSET) == 0); } else { diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 8322fab713..4ca3fa4819 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -5023,8 +5023,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_H } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { + zend_string *property_name; fetch_obj_r_no_object: - zend_error(E_NOTICE, "Trying to get property of non-object"); + property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var)); @@ -6201,7 +6204,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CO } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { - zend_error(E_NOTICE, "Trying to check property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); isset_no_object: result = ((opline->extended_value & ZEND_ISSET) == 0); } else { @@ -9067,8 +9072,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HAND } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { + zend_string *property_name; fetch_obj_r_no_object: - zend_error(E_NOTICE, "Trying to get property of non-object"); + property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var)); @@ -10071,7 +10079,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CO } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { - zend_error(E_NOTICE, "Trying to check property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); isset_no_object: result = ((opline->extended_value & ZEND_ISSET) == 0); } else { @@ -11081,8 +11091,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_ } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { + zend_string *property_name; fetch_obj_r_no_object: - zend_error(E_NOTICE, "Trying to get property of non-object"); + property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var)); @@ -12034,7 +12047,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CO } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { - zend_error(E_NOTICE, "Trying to check property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); isset_no_object: result = ((opline->extended_value & ZEND_ISSET) == 0); } else { @@ -13556,8 +13571,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_CONST_HAN } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { + zend_string *property_name; fetch_obj_r_no_object: - zend_error(E_NOTICE, "Trying to get property of non-object"); + property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var)); @@ -14905,8 +14923,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_CV_HANDLE } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { + zend_string *property_name; fetch_obj_r_no_object: - zend_error(E_NOTICE, "Trying to get property of non-object"); + property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var)); @@ -15424,8 +15445,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_HA } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { + zend_string *property_name; fetch_obj_r_no_object: - zend_error(E_NOTICE, "Trying to get property of non-object"); + property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var)); @@ -17534,7 +17558,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -17951,7 +17977,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -18027,7 +18055,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); break; } @@ -18224,8 +18254,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HAN } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { + zend_string *property_name; fetch_obj_r_no_object: - zend_error(E_NOTICE, "Trying to get property of non-object"); + property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var)); @@ -18351,7 +18384,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D { USE_OPLINE zend_free_op free_op1; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); @@ -18360,7 +18393,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = EX_CONSTANT(opline->op2); + property = EX_CONSTANT(opline->op2); value = EX_CONSTANT((opline+1)->op1); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -18392,7 +18425,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D Z_DELREF_P(object); } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -18404,16 +18439,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D } if (IS_CONST == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_CONST); + value = zend_assign_to_variable(property_val, value, IS_CONST); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -18427,8 +18462,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -18466,7 +18501,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -18476,7 +18511,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -18488,7 +18525,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -18505,7 +18542,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D { USE_OPLINE zend_free_op free_op1, free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); @@ -18514,7 +18551,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = EX_CONSTANT(opline->op2); + property = EX_CONSTANT(opline->op2); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -18546,7 +18583,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D Z_DELREF_P(object); } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -18558,16 +18597,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D } if (IS_CONST == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_TMP_VAR); + value = zend_assign_to_variable(property_val, value, IS_TMP_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -18581,8 +18620,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -18620,7 +18659,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -18630,7 +18669,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -18642,7 +18683,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -18659,7 +18700,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D { USE_OPLINE zend_free_op free_op1, free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); @@ -18668,7 +18709,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = EX_CONSTANT(opline->op2); + property = EX_CONSTANT(opline->op2); value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -18700,7 +18741,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D Z_DELREF_P(object); } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -18712,16 +18755,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D } if (IS_CONST == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_VAR); + value = zend_assign_to_variable(property_val, value, IS_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -18735,8 +18778,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -18774,7 +18817,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -18784,7 +18827,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -18796,7 +18841,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -18813,7 +18858,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D { USE_OPLINE zend_free_op free_op1; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); @@ -18822,7 +18867,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = EX_CONSTANT(opline->op2); + property = EX_CONSTANT(opline->op2); value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -18854,7 +18899,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D Z_DELREF_P(object); } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -18866,16 +18913,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D } if (IS_CONST == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_CV); + value = zend_assign_to_variable(property_val, value, IS_CV); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -18889,8 +18936,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -18928,7 +18975,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -18938,7 +18985,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -18950,7 +18999,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -19868,7 +19917,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDL if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL)); } else { - zend_error(E_NOTICE, "Trying to unset property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } } while (0); @@ -21845,7 +21896,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -22262,7 +22315,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -22338,7 +22393,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); break; } @@ -22535,8 +22592,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLE } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { + zend_string *property_name; fetch_obj_r_no_object: - zend_error(E_NOTICE, "Trying to get property of non-object"); + property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var)); @@ -22662,7 +22722,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA { USE_OPLINE zend_free_op free_op1; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); @@ -22671,7 +22731,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); + property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = EX_CONSTANT((opline+1)->op1); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -22703,7 +22763,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA Z_DELREF_P(object); } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -22715,16 +22777,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA } if (IS_CV == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_CONST); + value = zend_assign_to_variable(property_val, value, IS_CONST); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -22738,8 +22800,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -22777,7 +22839,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -22787,7 +22849,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -22799,7 +22863,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -22816,7 +22880,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA { USE_OPLINE zend_free_op free_op1, free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); @@ -22825,7 +22889,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); + property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -22857,7 +22921,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA Z_DELREF_P(object); } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -22869,16 +22935,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA } if (IS_CV == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_TMP_VAR); + value = zend_assign_to_variable(property_val, value, IS_TMP_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -22892,8 +22958,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -22931,7 +22997,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -22941,7 +23007,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -22953,7 +23021,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -22970,7 +23038,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA { USE_OPLINE zend_free_op free_op1, free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); @@ -22979,7 +23047,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); + property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -23011,7 +23079,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA Z_DELREF_P(object); } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -23023,16 +23093,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA } if (IS_CV == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_VAR); + value = zend_assign_to_variable(property_val, value, IS_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -23046,8 +23116,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -23085,7 +23155,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -23095,7 +23165,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -23107,7 +23179,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -23124,7 +23196,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA { USE_OPLINE zend_free_op free_op1; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); @@ -23133,7 +23205,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); + property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -23165,7 +23237,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA Z_DELREF_P(object); } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -23177,16 +23251,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA } if (IS_CV == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_CV); + value = zend_assign_to_variable(property_val, value, IS_CV); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -23200,8 +23274,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -23239,7 +23313,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -23249,7 +23323,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -23261,7 +23337,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -24151,7 +24227,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER( if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL)); } else { - zend_error(E_NOTICE, "Trying to unset property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } } while (0); @@ -24424,7 +24502,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -24843,7 +24923,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -24920,7 +25002,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); break; } @@ -25118,8 +25202,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_HA } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { + zend_string *property_name; fetch_obj_r_no_object: - zend_error(E_NOTICE, "Trying to get property of non-object"); + property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var)); @@ -25246,7 +25333,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_ { USE_OPLINE zend_free_op free_op1, free_op2; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); @@ -25255,7 +25342,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); + property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = EX_CONSTANT((opline+1)->op1); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -25287,7 +25374,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_ Z_DELREF_P(object); } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -25299,16 +25388,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_ } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_CONST); + value = zend_assign_to_variable(property_val, value, IS_CONST); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -25322,8 +25411,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -25361,7 +25450,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -25371,7 +25460,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -25383,7 +25474,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -25400,7 +25491,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_ { USE_OPLINE zend_free_op free_op1, free_op2, free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); @@ -25409,7 +25500,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); + property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -25441,7 +25532,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_ Z_DELREF_P(object); } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -25453,16 +25546,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_ } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_TMP_VAR); + value = zend_assign_to_variable(property_val, value, IS_TMP_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -25476,8 +25569,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -25515,7 +25608,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -25525,7 +25618,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -25537,7 +25632,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -25554,7 +25649,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_ { USE_OPLINE zend_free_op free_op1, free_op2, free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); @@ -25563,7 +25658,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); + property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -25595,7 +25690,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_ Z_DELREF_P(object); } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -25607,16 +25704,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_ } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_VAR); + value = zend_assign_to_variable(property_val, value, IS_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -25630,8 +25727,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -25669,7 +25766,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -25679,7 +25776,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -25691,7 +25790,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -25708,7 +25807,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_ { USE_OPLINE zend_free_op free_op1, free_op2; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); @@ -25717,7 +25816,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); + property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -25749,7 +25848,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_ Z_DELREF_P(object); } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -25761,16 +25862,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_ } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_CV); + value = zend_assign_to_variable(property_val, value, IS_CV); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -25784,8 +25885,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -25823,7 +25924,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -25833,7 +25934,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -25845,7 +25948,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -26623,7 +26726,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HAND if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL)); } else { - zend_error(E_NOTICE, "Trying to unset property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } } while (0); @@ -26834,7 +26939,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -26971,7 +27078,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -27047,7 +27156,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); break; } @@ -27151,8 +27262,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_ } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { + zend_string *property_name; fetch_obj_r_no_object: - zend_error(E_NOTICE, "Trying to get property of non-object"); + property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var)); @@ -27348,7 +27462,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O { USE_OPLINE - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C); @@ -27357,7 +27471,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = EX_CONSTANT(opline->op2); + property = EX_CONSTANT(opline->op2); value = EX_CONSTANT((opline+1)->op1); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -27389,7 +27503,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O Z_DELREF_P(object); } else { if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -27401,16 +27517,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O } if (IS_CONST == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_CONST); + value = zend_assign_to_variable(property_val, value, IS_CONST); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -27424,8 +27540,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -27463,7 +27579,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -27473,7 +27589,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -27485,7 +27603,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -27502,7 +27620,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O { USE_OPLINE zend_free_op free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C); @@ -27511,7 +27629,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = EX_CONSTANT(opline->op2); + property = EX_CONSTANT(opline->op2); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -27543,7 +27661,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O Z_DELREF_P(object); } else { if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -27555,16 +27675,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O } if (IS_CONST == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_TMP_VAR); + value = zend_assign_to_variable(property_val, value, IS_TMP_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -27578,8 +27698,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -27617,7 +27737,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -27627,7 +27747,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -27639,7 +27761,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -27656,7 +27778,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O { USE_OPLINE zend_free_op free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C); @@ -27665,7 +27787,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = EX_CONSTANT(opline->op2); + property = EX_CONSTANT(opline->op2); value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -27697,7 +27819,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O Z_DELREF_P(object); } else { if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -27709,16 +27833,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O } if (IS_CONST == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_VAR); + value = zend_assign_to_variable(property_val, value, IS_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -27732,8 +27856,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -27771,7 +27895,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -27781,7 +27905,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -27793,7 +27919,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -27810,7 +27936,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O { USE_OPLINE - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C); @@ -27819,7 +27945,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = EX_CONSTANT(opline->op2); + property = EX_CONSTANT(opline->op2); value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -27851,7 +27977,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O Z_DELREF_P(object); } else { if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -27863,16 +27991,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O } if (IS_CONST == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_CV); + value = zend_assign_to_variable(property_val, value, IS_CV); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -27886,8 +28014,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -27925,7 +28053,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -27935,7 +28063,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -27947,7 +28077,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -28433,7 +28563,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HA if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL)); } else { - zend_error(E_NOTICE, "Trying to unset property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } } while (0); @@ -28470,7 +28602,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UN } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { - zend_error(E_NOTICE, "Trying to check property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); isset_no_object: result = ((opline->extended_value & ZEND_ISSET) == 0); } else { @@ -29414,7 +29548,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -29551,7 +29687,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -29627,7 +29765,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); break; } @@ -29731,8 +29871,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HAN } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { + zend_string *property_name; fetch_obj_r_no_object: - zend_error(E_NOTICE, "Trying to get property of non-object"); + property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var)); @@ -29928,7 +30071,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D { USE_OPLINE - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C); @@ -29937,7 +30080,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); + property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = EX_CONSTANT((opline+1)->op1); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -29969,7 +30112,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D Z_DELREF_P(object); } else { if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -29981,16 +30126,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D } if (IS_CV == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_CONST); + value = zend_assign_to_variable(property_val, value, IS_CONST); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -30004,8 +30149,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -30043,7 +30188,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -30053,7 +30198,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -30065,7 +30212,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -30082,7 +30229,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D { USE_OPLINE zend_free_op free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C); @@ -30091,7 +30238,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); + property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -30123,7 +30270,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D Z_DELREF_P(object); } else { if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -30135,16 +30284,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D } if (IS_CV == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_TMP_VAR); + value = zend_assign_to_variable(property_val, value, IS_TMP_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -30158,8 +30307,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -30197,7 +30346,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -30207,7 +30356,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -30219,7 +30370,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -30236,7 +30387,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D { USE_OPLINE zend_free_op free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C); @@ -30245,7 +30396,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); + property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -30277,7 +30428,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D Z_DELREF_P(object); } else { if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -30289,16 +30442,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D } if (IS_CV == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_VAR); + value = zend_assign_to_variable(property_val, value, IS_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -30312,8 +30465,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -30351,7 +30504,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -30361,7 +30514,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -30373,7 +30528,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -30390,7 +30545,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D { USE_OPLINE - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C); @@ -30399,7 +30554,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); + property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -30431,7 +30586,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D Z_DELREF_P(object); } else { if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -30443,16 +30600,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D } if (IS_CV == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_CV); + value = zend_assign_to_variable(property_val, value, IS_CV); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -30466,8 +30623,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -30505,7 +30662,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -30515,7 +30672,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -30527,7 +30686,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -30883,7 +31042,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDL if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL)); } else { - zend_error(E_NOTICE, "Trying to unset property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } } while (0); @@ -30920,7 +31081,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UN } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { - zend_error(E_NOTICE, "Trying to check property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); isset_no_object: result = ((opline->extended_value & ZEND_ISSET) == 0); } else { @@ -31095,7 +31258,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -31232,7 +31397,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -31309,7 +31476,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); break; } @@ -31414,8 +31583,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { + zend_string *property_name; fetch_obj_r_no_object: - zend_error(E_NOTICE, "Trying to get property of non-object"); + property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var)); @@ -31613,7 +31785,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_ { USE_OPLINE zend_free_op free_op2; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C); @@ -31622,7 +31794,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); + property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = EX_CONSTANT((opline+1)->op1); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -31654,7 +31826,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_ Z_DELREF_P(object); } else { if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -31666,16 +31840,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_ } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_CONST); + value = zend_assign_to_variable(property_val, value, IS_CONST); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -31689,8 +31863,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -31728,7 +31902,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -31738,7 +31912,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -31750,7 +31926,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -31767,7 +31943,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_ { USE_OPLINE zend_free_op free_op2, free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C); @@ -31776,7 +31952,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); + property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -31808,7 +31984,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_ Z_DELREF_P(object); } else { if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -31820,16 +31998,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_ } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_TMP_VAR); + value = zend_assign_to_variable(property_val, value, IS_TMP_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -31843,8 +32021,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -31882,7 +32060,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -31892,7 +32070,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -31904,7 +32084,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -31921,7 +32101,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_ { USE_OPLINE zend_free_op free_op2, free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C); @@ -31930,7 +32110,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); + property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -31962,7 +32142,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_ Z_DELREF_P(object); } else { if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -31974,16 +32156,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_ } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_VAR); + value = zend_assign_to_variable(property_val, value, IS_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -31997,8 +32179,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -32036,7 +32218,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -32046,7 +32228,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -32058,7 +32242,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -32075,7 +32259,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_ { USE_OPLINE zend_free_op free_op2; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C); @@ -32084,7 +32268,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); + property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -32116,7 +32300,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_ Z_DELREF_P(object); } else { if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -32128,16 +32314,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_ } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_CV); + value = zend_assign_to_variable(property_val, value, IS_CV); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -32151,8 +32337,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -32190,7 +32376,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -32200,7 +32386,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -32212,7 +32400,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -32569,7 +32757,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_H if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL)); } else { - zend_error(E_NOTICE, "Trying to unset property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } } while (0); @@ -32607,7 +32797,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UN } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { - zend_error(E_NOTICE, "Trying to check property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); isset_no_object: result = ((opline->extended_value & ZEND_ISSET) == 0); } else { @@ -35105,7 +35297,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -35522,7 +35716,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -35598,7 +35794,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); break; } @@ -35912,8 +36110,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HAND } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { + zend_string *property_name; fetch_obj_r_no_object: - zend_error(E_NOTICE, "Trying to get property of non-object"); + property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var)); @@ -36122,7 +36323,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA { USE_OPLINE - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); @@ -36131,7 +36332,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = EX_CONSTANT(opline->op2); + property = EX_CONSTANT(opline->op2); value = EX_CONSTANT((opline+1)->op1); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -36163,7 +36364,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA Z_DELREF_P(object); } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -36175,16 +36378,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA } if (IS_CONST == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_CONST); + value = zend_assign_to_variable(property_val, value, IS_CONST); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -36198,8 +36401,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -36237,7 +36440,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -36247,7 +36450,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -36259,7 +36464,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -36276,7 +36481,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA { USE_OPLINE zend_free_op free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); @@ -36285,7 +36490,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = EX_CONSTANT(opline->op2); + property = EX_CONSTANT(opline->op2); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -36317,7 +36522,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA Z_DELREF_P(object); } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -36329,16 +36536,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA } if (IS_CONST == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_TMP_VAR); + value = zend_assign_to_variable(property_val, value, IS_TMP_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -36352,8 +36559,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -36391,7 +36598,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -36401,7 +36608,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -36413,7 +36622,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -36430,7 +36639,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA { USE_OPLINE zend_free_op free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); @@ -36439,7 +36648,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = EX_CONSTANT(opline->op2); + property = EX_CONSTANT(opline->op2); value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -36471,7 +36680,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA Z_DELREF_P(object); } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -36483,16 +36694,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA } if (IS_CONST == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_VAR); + value = zend_assign_to_variable(property_val, value, IS_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -36506,8 +36717,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -36545,7 +36756,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -36555,7 +36766,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -36567,7 +36780,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -36584,7 +36797,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA { USE_OPLINE - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); @@ -36593,7 +36806,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = EX_CONSTANT(opline->op2); + property = EX_CONSTANT(opline->op2); value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -36625,7 +36838,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA Z_DELREF_P(object); } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -36637,16 +36852,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA } if (IS_CONST == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_CV); + value = zend_assign_to_variable(property_val, value, IS_CV); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -36660,8 +36875,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -36699,7 +36914,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -36709,7 +36924,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -36721,7 +36938,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -37757,7 +37974,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLE if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL)); } else { - zend_error(E_NOTICE, "Trying to unset property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } } while (0); @@ -38014,7 +38233,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { - zend_error(E_NOTICE, "Trying to check property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); isset_no_object: result = ((opline->extended_value & ZEND_ISSET) == 0); } else { @@ -41593,7 +41814,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -42010,7 +42233,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -42086,7 +42311,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); break; } @@ -42333,8 +42560,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { + zend_string *property_name; fetch_obj_r_no_object: - zend_error(E_NOTICE, "Trying to get property of non-object"); + property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var)); @@ -42543,7 +42773,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_ { USE_OPLINE - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); @@ -42552,7 +42782,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); + property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = EX_CONSTANT((opline+1)->op1); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -42584,7 +42814,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_ Z_DELREF_P(object); } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -42596,16 +42828,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_ } if (IS_CV == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_CONST); + value = zend_assign_to_variable(property_val, value, IS_CONST); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -42619,8 +42851,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -42658,7 +42890,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -42668,7 +42900,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -42680,7 +42914,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -42697,7 +42931,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_ { USE_OPLINE zend_free_op free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); @@ -42706,7 +42940,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); + property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -42738,7 +42972,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_ Z_DELREF_P(object); } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -42750,16 +42986,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_ } if (IS_CV == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_TMP_VAR); + value = zend_assign_to_variable(property_val, value, IS_TMP_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -42773,8 +43009,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -42812,7 +43048,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -42822,7 +43058,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -42834,7 +43072,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -42851,7 +43089,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_ { USE_OPLINE zend_free_op free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); @@ -42860,7 +43098,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); + property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -42892,7 +43130,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_ Z_DELREF_P(object); } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -42904,16 +43144,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_ } if (IS_CV == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_VAR); + value = zend_assign_to_variable(property_val, value, IS_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -42927,8 +43167,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -42966,7 +43206,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -42976,7 +43216,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -42988,7 +43230,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -43005,7 +43247,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_ { USE_OPLINE - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); @@ -43014,7 +43256,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); + property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -43046,7 +43288,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_ Z_DELREF_P(object); } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -43058,16 +43302,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_ } if (IS_CV == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_CV); + value = zend_assign_to_variable(property_val, value, IS_CV); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -43081,8 +43325,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -43120,7 +43364,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -43130,7 +43374,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -43142,7 +43388,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -44178,7 +44424,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(Z if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL)); } else { - zend_error(E_NOTICE, "Trying to unset property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } } while (0); @@ -44347,7 +44595,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { - zend_error(E_NOTICE, "Trying to check property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); isset_no_object: result = ((opline->extended_value & ZEND_ISSET) == 0); } else { @@ -45238,7 +45488,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -45657,7 +45909,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -45734,7 +45988,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { ZVAL_DEREF(object); if (UNEXPECTED(!make_real_object(object))) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); break; } @@ -45982,8 +46238,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HAN } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { + zend_string *property_name; fetch_obj_r_no_object: - zend_error(E_NOTICE, "Trying to get property of non-object"); + property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var)); @@ -46194,7 +46453,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D { USE_OPLINE zend_free_op free_op2; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); @@ -46203,7 +46462,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); + property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = EX_CONSTANT((opline+1)->op1); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -46235,7 +46494,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D Z_DELREF_P(object); } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -46247,16 +46508,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_CONST); + value = zend_assign_to_variable(property_val, value, IS_CONST); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -46270,8 +46531,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -46309,7 +46570,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -46319,7 +46580,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -46331,7 +46594,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -46348,7 +46611,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D { USE_OPLINE zend_free_op free_op2, free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); @@ -46357,7 +46620,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); + property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -46389,7 +46652,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D Z_DELREF_P(object); } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -46401,16 +46666,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_TMP_VAR); + value = zend_assign_to_variable(property_val, value, IS_TMP_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -46424,8 +46689,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -46463,7 +46728,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -46473,7 +46738,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -46485,7 +46752,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -46502,7 +46769,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D { USE_OPLINE zend_free_op free_op2, free_op_data; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); @@ -46511,7 +46778,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); + property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -46543,7 +46810,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D Z_DELREF_P(object); } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -46555,16 +46824,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_VAR); + value = zend_assign_to_variable(property_val, value, IS_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -46578,8 +46847,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -46617,7 +46886,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -46627,7 +46896,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -46639,7 +46910,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -46656,7 +46927,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D { USE_OPLINE zend_free_op free_op2; - zval *object, *property_name, *value, tmp; + zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); @@ -46665,7 +46936,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } - property_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); + property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { @@ -46697,7 +46968,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D Z_DELREF_P(object); } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); @@ -46709,16 +46982,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && - EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) { - uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*)); + EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) { + uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); - zval *property; + zval *property_val; if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) { - property = OBJ_PROP(zobj, prop_offset); - if (Z_TYPE_P(property) != IS_UNDEF) { + property_val = OBJ_PROP(zobj, prop_offset); + if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: - value = zend_assign_to_variable(property, value, IS_CV); + value = zend_assign_to_variable(property_val, value, IS_CV); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -46732,8 +47005,8 @@ fast_assign_obj: } zobj->properties = zend_array_dup(zobj->properties); } - property = zend_hash_find(zobj->properties, Z_STR_P(property_name)); - if (property) { + property_val = zend_hash_find(zobj->properties, Z_STR_P(property)); + if (property_val) { goto fast_assign_obj; } } @@ -46771,7 +47044,7 @@ fast_assign_obj: Z_ADDREF_P(value); } } - zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value); + zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } @@ -46781,7 +47054,9 @@ fast_assign_obj: } if (!Z_OBJ_HT_P(object)->write_property) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); + zend_string *property_name = zval_get_string(property); + zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } @@ -46793,7 +47068,7 @@ fast_assign_obj: ZVAL_DEREF(value); } - Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL); + Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); @@ -47719,7 +47994,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDL if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL)); } else { - zend_error(E_NOTICE, "Trying to unset property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); } } while (0); @@ -47889,7 +48166,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { - zend_error(E_NOTICE, "Trying to check property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); isset_no_object: result = ((opline->extended_value & ZEND_ISSET) == 0); } else { @@ -49964,7 +50243,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TM } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { - zend_error(E_NOTICE, "Trying to check property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); isset_no_object: result = ((opline->extended_value & ZEND_ISSET) == 0); } else { @@ -52154,7 +52435,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TM } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { - zend_error(E_NOTICE, "Trying to check property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); isset_no_object: result = ((opline->extended_value & ZEND_ISSET) == 0); } else { @@ -53484,7 +53767,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TM } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { - zend_error(E_NOTICE, "Trying to check property of non-object"); + zend_string *property_name = zval_get_string(offset); + zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name)); + zend_string_release(property_name); isset_no_object: result = ((opline->extended_value & ZEND_ISSET) == 0); } else { diff --git a/ext/dom/tests/bug67949.phpt b/ext/dom/tests/bug67949.phpt index e4eb6f724f..823e6e1449 100644 --- a/ext/dom/tests/bug67949.phpt +++ b/ext/dom/tests/bug67949.phpt @@ -56,7 +56,7 @@ bool(false) testing property access string(4) "data" -Notice: Trying to get property of non-object in %s on line %d +Notice: Trying to get property 'textContent' of non-object in %s on line %d NULL testing offset not a long array(1) { @@ -64,7 +64,7 @@ array(1) { string(4) "test" } -Notice: Trying to get property of non-object in %s on line %d +Notice: Trying to get property 'textContent' of non-object in %s on line %d bool(false) NULL array(1) { diff --git a/ext/pdo_mysql/tests/bug44327.phpt b/ext/pdo_mysql/tests/bug44327.phpt index 1952cce050..f5ca9e0d9d 100644 --- a/ext/pdo_mysql/tests/bug44327.phpt +++ b/ext/pdo_mysql/tests/bug44327.phpt @@ -60,5 +60,5 @@ object(PDORow)#%d (2) { string(19) "SELECT id FROM test" ---------------------------------- -Notice: Trying to get property of non-object in %s on line %d +Notice: Trying to get property 'queryString' of non-object in %s on line %d NULL diff --git a/ext/simplexml/tests/017.phpt b/ext/simplexml/tests/017.phpt index 776b00c785..ba42ac46a9 100644 --- a/ext/simplexml/tests/017.phpt +++ b/ext/simplexml/tests/017.phpt @@ -78,9 +78,9 @@ person: Joe child: person: -Notice: Trying to get property of non-object in %s017.php on line %d +Notice: Trying to get property 'child' of non-object in %s017.php on line %d child: -Notice: Trying to get property of non-object in %s017.php on line %d +Notice: Trying to get property 'child' of non-object in %s017.php on line %d child: ===DONE=== diff --git a/tests/classes/implicit_instantiation_001.phpt b/tests/classes/implicit_instantiation_001.phpt index b0dfe2e8b1..67be8c4dc9 100644 --- a/tests/classes/implicit_instantiation_001.phpt +++ b/tests/classes/implicit_instantiation_001.phpt @@ -93,43 +93,43 @@ Notice: Undefined property: stdClass::$prop in %s on line 26 ---( $c->boolTrue )--- --> Attempting implicit conversion to object using increment... -Warning: Attempt to %s property of non-object in %s on line 18 +Warning: Attempt to %s property 'prop' of non-object in %s on line 18 --> Attempting implicit conversion to object using assignment... -Warning: Attempt to assign property of non-object in %s on line 22 +Warning: Attempt to assign property 'prop' of non-object in %s on line 22 --> Attempting implicit conversion to object using combined assignment... -Warning: Attempt to assign property of non-object in %s on line 26 +Warning: Attempt to assign property 'prop' of non-object in %s on line 26 ---( $c->nonEmptyString )--- --> Attempting implicit conversion to object using increment... -Warning: Attempt to %s property of non-object in %s on line 18 +Warning: Attempt to %s property 'prop' of non-object in %s on line 18 --> Attempting implicit conversion to object using assignment... -Warning: Attempt to assign property of non-object in %s on line 22 +Warning: Attempt to assign property 'prop' of non-object in %s on line 22 --> Attempting implicit conversion to object using combined assignment... -Warning: Attempt to assign property of non-object in %s on line 26 +Warning: Attempt to assign property 'prop' of non-object in %s on line 26 ---( $c->intZero )--- --> Attempting implicit conversion to object using increment... -Warning: Attempt to %s property of non-object in %s on line 18 +Warning: Attempt to %s property 'prop' of non-object in %s on line 18 --> Attempting implicit conversion to object using assignment... -Warning: Attempt to assign property of non-object in %s on line 22 +Warning: Attempt to assign property 'prop' of non-object in %s on line 22 --> Attempting implicit conversion to object using combined assignment... -Warning: Attempt to assign property of non-object in %s on line 26 +Warning: Attempt to assign property 'prop' of non-object in %s on line 26 |