@@ -123,49 +123,25 @@ ZEND_API void zend_objects_destroy_object(zend_object *object)
123
123
zend_object * old_exception ;
124
124
const zend_op * old_opline_before_exception ;
125
125
126
- if (destructor -> op_array .fn_flags & (ZEND_ACC_PRIVATE |ZEND_ACC_PROTECTED )) {
127
- if (destructor -> op_array .fn_flags & ZEND_ACC_PRIVATE ) {
128
- /* Ensure that if we're calling a private function, we're allowed to do so.
129
- */
130
- if (EG (current_execute_data )) {
131
- zend_class_entry * scope = zend_get_executed_scope ();
132
-
133
- if (object -> ce != scope ) {
134
- zend_throw_error (NULL ,
135
- "Call to private %s::__destruct() from %s%s" ,
136
- ZSTR_VAL (object -> ce -> name ),
137
- scope ? "scope " : "global scope" ,
138
- scope ? ZSTR_VAL (scope -> name ) : ""
139
- );
140
- return ;
141
- }
142
- } else {
143
- zend_error (E_WARNING ,
144
- "Call to private %s::__destruct() from global scope during shutdown ignored" ,
145
- ZSTR_VAL (object -> ce -> name ));
126
+ if (destructor -> common .fn_flags & (ZEND_ACC_PRIVATE |ZEND_ACC_PROTECTED )) {
127
+ if (EG (current_execute_data )) {
128
+ zend_class_entry * scope = zend_get_executed_scope ();
129
+ /* Ensure that if we're calling a protected or private function, we're allowed to do so. */
130
+ ZEND_ASSERT (!(destructor -> common .fn_flags & ZEND_ACC_PUBLIC ));
131
+ if (!zend_check_method_accessible (destructor , scope )) {
132
+ zend_throw_error (NULL ,
133
+ "Call to %s %s::__destruct() from %s%s" ,
134
+ zend_visibility_string (destructor -> common .fn_flags ), ZSTR_VAL (object -> ce -> name ),
135
+ scope ? "scope " : "global scope" ,
136
+ scope ? ZSTR_VAL (scope -> name ) : ""
137
+ );
146
138
return ;
147
139
}
148
140
} else {
149
- /* Ensure that if we're calling a protected function, we're allowed to do so.
150
- */
151
- if (EG (current_execute_data )) {
152
- zend_class_entry * scope = zend_get_executed_scope ();
153
-
154
- if (!zend_check_protected (zend_get_function_root_class (destructor ), scope )) {
155
- zend_throw_error (NULL ,
156
- "Call to protected %s::__destruct() from %s%s" ,
157
- ZSTR_VAL (object -> ce -> name ),
158
- scope ? "scope " : "global scope" ,
159
- scope ? ZSTR_VAL (scope -> name ) : ""
160
- );
161
- return ;
162
- }
163
- } else {
164
- zend_error (E_WARNING ,
165
- "Call to protected %s::__destruct() from global scope during shutdown ignored" ,
166
- ZSTR_VAL (object -> ce -> name ));
167
- return ;
168
- }
141
+ zend_error (E_WARNING ,
142
+ "Call to %s %s::__destruct() from global scope during shutdown ignored" ,
143
+ zend_visibility_string (destructor -> common .fn_flags ), ZSTR_VAL (object -> ce -> name ));
144
+ return ;
169
145
}
170
146
}
171
147
0 commit comments