@@ -811,7 +811,9 @@ ZEND_VM_HELPER(zend_binary_assign_op_obj_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV,
811
811
if (OP1_TYPE != IS_UNUSED && UNEXPECTED (Z_TYPE_P (object ) != IS_OBJECT )) {
812
812
ZVAL_DEREF (object );
813
813
if (UNEXPECTED (!make_real_object (object ))) {
814
- zend_error (E_WARNING , "Attempt to assign property of non-object" );
814
+ zend_string * property_name = zval_get_string (property );
815
+ zend_error (E_WARNING , "Attempt to assign property '%s' of non-object" , ZSTR_VAL (property_name ));
816
+ zend_string_release (property_name );
815
817
if (UNEXPECTED (RETURN_VALUE_USED (opline ))) {
816
818
ZVAL_NULL (EX_VAR (opline -> result .var ));
817
819
}
@@ -1070,7 +1072,9 @@ ZEND_VM_HELPER(zend_pre_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV,
1070
1072
if (OP1_TYPE != IS_UNUSED && UNEXPECTED (Z_TYPE_P (object ) != IS_OBJECT )) {
1071
1073
ZVAL_DEREF (object );
1072
1074
if (UNEXPECTED (!make_real_object (object ))) {
1073
- zend_error (E_WARNING , "Attempt to increment/decrement property of non-object" );
1075
+ zend_string * property_name = zval_get_string (property );
1076
+ zend_error (E_WARNING , "Attempt to increment/decrement property '%s' of non-object" , ZSTR_VAL (property_name ));
1077
+ zend_string_release (property_name );
1074
1078
if (UNEXPECTED (RETURN_VALUE_USED (opline ))) {
1075
1079
ZVAL_NULL (EX_VAR (opline -> result .var ));
1076
1080
}
@@ -1147,7 +1151,9 @@ ZEND_VM_HELPER(zend_post_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV,
1147
1151
if (OP1_TYPE != IS_UNUSED && UNEXPECTED (Z_TYPE_P (object ) != IS_OBJECT )) {
1148
1152
ZVAL_DEREF (object );
1149
1153
if (UNEXPECTED (!make_real_object (object ))) {
1150
- zend_error (E_WARNING , "Attempt to increment/decrement property of non-object" );
1154
+ zend_string * property_name = zval_get_string (property );
1155
+ zend_error (E_WARNING , "Attempt to increment/decrement property '%s' of non-object" , ZSTR_VAL (property_name ));
1156
+ zend_string_release (property_name );
1151
1157
ZVAL_NULL (EX_VAR (opline -> result .var ));
1152
1158
break ;
1153
1159
}
@@ -1802,8 +1808,11 @@ ZEND_VM_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMP|VAR|UNUSED|THIS|CV, CONST|TMPVAR
1802
1808
}
1803
1809
1804
1810
if (UNEXPECTED (zobj -> handlers -> read_property == NULL )) {
1811
+ zend_string * property_name ;
1805
1812
ZEND_VM_C_LABEL (fetch_obj_r_no_object ):
1806
- zend_error (E_NOTICE , "Trying to get property of non-object" );
1813
+ property_name = zval_get_string (offset );
1814
+ zend_error (E_NOTICE , "Trying to get property '%s' of non-object" , ZSTR_VAL (property_name ));
1815
+ zend_string_release (property_name );
1807
1816
ZVAL_NULL (EX_VAR (opline -> result .var ));
1808
1817
} else {
1809
1818
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(
2014
2023
{
2015
2024
USE_OPLINE
2016
2025
zend_free_op free_op1 , free_op2 , free_op_data ;
2017
- zval * object , * property_name , * value , tmp ;
2026
+ zval * object , * property , * value , tmp ;
2018
2027
2019
2028
SAVE_OPLINE ();
2020
2029
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(
2023
2032
ZEND_VM_DISPATCH_TO_HELPER (zend_this_not_in_object_context_helper );
2024
2033
}
2025
2034
2026
- property_name = GET_OP2_ZVAL_PTR (BP_VAR_R );
2035
+ property = GET_OP2_ZVAL_PTR (BP_VAR_R );
2027
2036
value = GET_OP_DATA_ZVAL_PTR (BP_VAR_R );
2028
2037
2029
2038
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(
2055
2064
Z_DELREF_P (object );
2056
2065
} else {
2057
2066
if (OP1_TYPE != IS_VAR || EXPECTED (!Z_ISERROR_P (object ))) {
2058
- zend_error (E_WARNING , "Attempt to assign property of non-object" );
2067
+ zend_string * property_name = zval_get_string (property );
2068
+ zend_error (E_WARNING , "Attempt to assign property '%s' of non-object" , ZSTR_VAL (property_name ));
2069
+ zend_string_release (property_name );
2059
2070
}
2060
2071
if (UNEXPECTED (RETURN_VALUE_USED (opline ))) {
2061
2072
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(
2067
2078
}
2068
2079
2069
2080
if (OP2_TYPE == IS_CONST &&
2070
- EXPECTED (Z_OBJCE_P (object ) == CACHED_PTR (Z_CACHE_SLOT_P (property_name )))) {
2071
- uint32_t prop_offset = (uint32_t )(intptr_t )CACHED_PTR (Z_CACHE_SLOT_P (property_name ) + sizeof (void * ));
2081
+ EXPECTED (Z_OBJCE_P (object ) == CACHED_PTR (Z_CACHE_SLOT_P (property )))) {
2082
+ uint32_t prop_offset = (uint32_t )(intptr_t )CACHED_PTR (Z_CACHE_SLOT_P (property ) + sizeof (void * ));
2072
2083
zend_object * zobj = Z_OBJ_P (object );
2073
- zval * property ;
2084
+ zval * property_val ;
2074
2085
2075
2086
if (EXPECTED (prop_offset != (uint32_t )ZEND_DYNAMIC_PROPERTY_OFFSET )) {
2076
- property = OBJ_PROP (zobj , prop_offset );
2077
- if (Z_TYPE_P (property ) != IS_UNDEF ) {
2087
+ property_val = OBJ_PROP (zobj , prop_offset );
2088
+ if (Z_TYPE_P (property_val ) != IS_UNDEF ) {
2078
2089
ZEND_VM_C_LABEL (fast_assign_obj ):
2079
- value = zend_assign_to_variable (property , value , OP_DATA_TYPE );
2090
+ value = zend_assign_to_variable (property_val , value , OP_DATA_TYPE );
2080
2091
if (UNEXPECTED (RETURN_VALUE_USED (opline ))) {
2081
2092
ZVAL_COPY (EX_VAR (opline -> result .var ), value );
2082
2093
}
@@ -2090,8 +2101,8 @@ ZEND_VM_C_LABEL(fast_assign_obj):
2090
2101
}
2091
2102
zobj -> properties = zend_array_dup (zobj -> properties );
2092
2103
}
2093
- property = zend_hash_find (zobj -> properties , Z_STR_P (property_name ));
2094
- if (property ) {
2104
+ property_val = zend_hash_find (zobj -> properties , Z_STR_P (property ));
2105
+ if (property_val ) {
2095
2106
ZEND_VM_C_GOTO (fast_assign_obj );
2096
2107
}
2097
2108
}
@@ -2129,7 +2140,7 @@ ZEND_VM_C_LABEL(fast_assign_obj):
2129
2140
Z_ADDREF_P (value );
2130
2141
}
2131
2142
}
2132
- zend_hash_add_new (zobj -> properties , Z_STR_P (property_name ), value );
2143
+ zend_hash_add_new (zobj -> properties , Z_STR_P (property ), value );
2133
2144
if (UNEXPECTED (RETURN_VALUE_USED (opline ))) {
2134
2145
ZVAL_COPY (EX_VAR (opline -> result .var ), value );
2135
2146
}
@@ -2139,7 +2150,9 @@ ZEND_VM_C_LABEL(fast_assign_obj):
2139
2150
}
2140
2151
2141
2152
if (!Z_OBJ_HT_P (object )-> write_property ) {
2142
- zend_error (E_WARNING , "Attempt to assign property of non-object" );
2153
+ zend_string * property_name = zval_get_string (property );
2154
+ zend_error (E_WARNING , "Attempt to assign property '%s' of non-object" , ZSTR_VAL (property_name ));
2155
+ zend_string_release (property_name );
2143
2156
if (UNEXPECTED (RETURN_VALUE_USED (opline ))) {
2144
2157
ZVAL_NULL (EX_VAR (opline -> result .var ));
2145
2158
}
@@ -2151,7 +2164,7 @@ ZEND_VM_C_LABEL(fast_assign_obj):
2151
2164
ZVAL_DEREF (value );
2152
2165
}
2153
2166
2154
- Z_OBJ_HT_P (object )-> write_property (object , property_name , value , (OP2_TYPE == IS_CONST ) ? CACHE_ADDR (Z_CACHE_SLOT_P (property_name )) : NULL );
2167
+ Z_OBJ_HT_P (object )-> write_property (object , property , value , (OP2_TYPE == IS_CONST ) ? CACHE_ADDR (Z_CACHE_SLOT_P (property )) : NULL );
2155
2168
2156
2169
if (UNEXPECTED (RETURN_VALUE_USED (opline ))) {
2157
2170
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)
5597
5610
if (Z_OBJ_HT_P (container )-> unset_property ) {
5598
5611
Z_OBJ_HT_P (container )-> unset_property (container , offset , ((OP2_TYPE == IS_CONST ) ? CACHE_ADDR (Z_CACHE_SLOT_P (offset )) : NULL ));
5599
5612
} else {
5600
- zend_error (E_NOTICE , "Trying to unset property of non-object" );
5613
+ zend_string * property_name = zval_get_string (offset );
5614
+ zend_error (E_NOTICE , "Trying to unset property '%s' of non-object" , ZSTR_VAL (property_name ));
5615
+ zend_string_release (property_name );
5601
5616
}
5602
5617
} while (0 );
5603
5618
@@ -6489,7 +6504,9 @@ ZEND_VM_HANDLER(148, ZEND_ISSET_ISEMPTY_PROP_OBJ, CONST|TMPVAR|UNUSED|THIS|CV, C
6489
6504
}
6490
6505
}
6491
6506
if (UNEXPECTED (!Z_OBJ_HT_P (container )-> has_property )) {
6492
- zend_error (E_NOTICE , "Trying to check property of non-object" );
6507
+ zend_string * property_name = zval_get_string (offset );
6508
+ zend_error (E_NOTICE , "Trying to check property '%s' of non-object" , ZSTR_VAL (property_name ));
6509
+ zend_string_release (property_name );
6493
6510
ZEND_VM_C_LABEL (isset_no_object ):
6494
6511
result = ((opline -> extended_value & ZEND_ISSET ) == 0 );
6495
6512
} else {
0 commit comments