Skip to content

Commit 314fde5

Browse files
address Arnaud's comment
1 parent 3d5358f commit 314fde5

File tree

1 file changed

+10
-15
lines changed

1 file changed

+10
-15
lines changed

ext/standard/user_filters.c

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,6 @@ php_stream_filter_status_t userfilter_filter(
169169
return PSFS_ERR_FATAL;
170170
}
171171
}
172-
zend_string_release(stream_name);
173172

174173
EG(fake_scope) = old_scope;
175174

@@ -213,22 +212,18 @@ php_stream_filter_status_t userfilter_filter(
213212

214213
/* filter resources are cleaned up by the stream destructor,
215214
* keeping a reference to the stream resource here would prevent it
216-
* from being destroyed properly */
217-
zend_property_info *prop_info = zend_hash_str_find_ptr(&Z_OBJCE_P(obj)->properties_info, "stream", sizeof("stream")-1);
218-
zval *stream_prop = zend_hash_str_find(Z_OBJPROP_P(obj), "stream", sizeof("stream")-1);
219-
220-
if (stream_prop) {
221-
if (prop_info) {
222-
/* Declared property: set to UNDEF to make it uninitialized */
223-
zval_ptr_dtor(stream_prop);
224-
ZVAL_UNDEF(stream_prop);
225-
} else {
226-
/* Dynamic property: set to null */
227-
zval_ptr_dtor(stream_prop);
228-
ZVAL_NULL(stream_prop);
229-
}
215+
* from being destroyed properly.
216+
* Since the property accepted a resource assignment above, it must have
217+
* no type hint or be typed as mixed, so we can safely assign null.
218+
*/
219+
if (Z_OBJ_HT_P(obj)->has_property(Z_OBJ_P(obj), stream_name, ZEND_PROPERTY_EXISTS, NULL)) {
220+
zval null_zval;
221+
ZVAL_NULL(&null_zval);
222+
zend_update_property_ex(Z_OBJCE_P(obj), Z_OBJ_P(obj), stream_name, &null_zval);
230223
}
231224

225+
zend_string_release(stream_name);
226+
232227
zval_ptr_dtor(&args[3]);
233228
zval_ptr_dtor(&args[2]);
234229
zval_ptr_dtor(&args[1]);

0 commit comments

Comments
 (0)