@@ -61,6 +61,7 @@ PHP_METHOD(php_user_filter, onClose)
61
61
}
62
62
63
63
static zend_class_entry * user_filter_class_entry ;
64
+ static zend_class_entry * stream_bucket_class_entry ;
64
65
65
66
static ZEND_RSRC_DTOR_FUNC (php_bucket_dtor )
66
67
{
@@ -75,6 +76,7 @@ PHP_MINIT_FUNCTION(user_filters)
75
76
{
76
77
/* init the filter class ancestor */
77
78
user_filter_class_entry = register_class_php_user_filter ();
79
+ stream_bucket_class_entry = register_class_StreamBucket ();
78
80
79
81
/* Filters will dispose of their brigades */
80
82
le_bucket_brigade = zend_register_list_destructors_ex (NULL , NULL , PHP_STREAM_BRIGADE_RES_NAME , module_number );
@@ -351,16 +353,16 @@ PHP_FUNCTION(stream_bucket_make_writeable)
351
353
RETURN_THROWS ();
352
354
}
353
355
354
- ZVAL_NULL (return_value );
355
-
356
356
if (brigade -> head && (bucket = php_stream_bucket_make_writeable (brigade -> head ))) {
357
357
ZVAL_RES (& zbucket , zend_register_resource (bucket , le_bucket ));
358
- object_init (return_value );
358
+ object_init_ex (return_value , stream_bucket_class_entry );
359
359
add_property_zval (return_value , "bucket" , & zbucket );
360
360
/* add_property_zval increments the refcount which is unwanted here */
361
361
zval_ptr_dtor (& zbucket );
362
362
add_property_stringl (return_value , "data" , bucket -> buf , bucket -> buflen );
363
363
add_property_long (return_value , "datalen" , bucket -> buflen );
364
+ } else {
365
+ ZVAL_NULL (return_value );
364
366
}
365
367
}
366
368
/* }}} */
@@ -369,38 +371,42 @@ PHP_FUNCTION(stream_bucket_make_writeable)
369
371
static void php_stream_bucket_attach (int append , INTERNAL_FUNCTION_PARAMETERS )
370
372
{
371
373
zval * zbrigade , * zobject ;
372
- zval * pzbucket , * pzdata ;
374
+ zval * pzbucket , * pzdata , rv ;
373
375
php_stream_bucket_brigade * brigade ;
374
376
php_stream_bucket * bucket ;
375
377
376
378
ZEND_PARSE_PARAMETERS_START (2 , 2 )
377
379
Z_PARAM_RESOURCE (zbrigade )
378
- Z_PARAM_OBJECT (zobject )
380
+ Z_PARAM_OBJECT_OF_CLASS (zobject , stream_bucket_class_entry )
379
381
ZEND_PARSE_PARAMETERS_END ();
380
382
381
- if (NULL == ( pzbucket = zend_hash_str_find_deref ( Z_OBJPROP_P ( zobject ), "bucket" , sizeof ( "bucket" ) - 1 ))) {
382
- zend_argument_value_error ( 2 , "must be an object that has a \"bucket\" property" );
383
+ if (( brigade = ( php_stream_bucket_brigade * ) zend_fetch_resource (
384
+ Z_RES_P ( zbrigade ), PHP_STREAM_BRIGADE_RES_NAME , le_bucket_brigade )) == NULL ) {
383
385
RETURN_THROWS ();
384
386
}
385
387
386
- if (( brigade = ( php_stream_bucket_brigade * ) zend_fetch_resource (
387
- Z_RES_P ( zbrigade ), PHP_STREAM_BRIGADE_RES_NAME , le_bucket_brigade )) == NULL ) {
388
+ if (NULL == ( pzbucket = zend_read_property ( NULL , Z_OBJ_P ( zobject ), "bucket" , sizeof ( "bucket" ) - 1 , false, & rv ))) {
389
+ zend_argument_value_error ( 2 , "must be an object that has a \"bucket\" property" );
388
390
RETURN_THROWS ();
389
391
}
392
+ ZVAL_DEREF (pzbucket );
390
393
391
394
if ((bucket = (php_stream_bucket * )zend_fetch_resource_ex (pzbucket , PHP_STREAM_BUCKET_RES_NAME , le_bucket )) == NULL ) {
392
395
RETURN_THROWS ();
393
396
}
394
397
395
- if (NULL != (pzdata = zend_hash_str_find_deref (Z_OBJPROP_P (zobject ), "data" , sizeof ("data" )- 1 )) && Z_TYPE_P (pzdata ) == IS_STRING ) {
396
- if (!bucket -> own_buf ) {
397
- bucket = php_stream_bucket_make_writeable (bucket );
398
- }
399
- if (bucket -> buflen != Z_STRLEN_P (pzdata )) {
400
- bucket -> buf = perealloc (bucket -> buf , Z_STRLEN_P (pzdata ), bucket -> is_persistent );
401
- bucket -> buflen = Z_STRLEN_P (pzdata );
398
+ if (NULL != (pzdata = zend_read_property (NULL , Z_OBJ_P (zobject ), "data" , sizeof ("data" )- 1 , false, & rv ))) {
399
+ ZVAL_DEREF (pzdata );
400
+ if (Z_TYPE_P (pzdata ) == IS_STRING ) {
401
+ if (!bucket -> own_buf ) {
402
+ bucket = php_stream_bucket_make_writeable (bucket );
403
+ }
404
+ if (bucket -> buflen != Z_STRLEN_P (pzdata )) {
405
+ bucket -> buf = perealloc (bucket -> buf , Z_STRLEN_P (pzdata ), bucket -> is_persistent );
406
+ bucket -> buflen = Z_STRLEN_P (pzdata );
407
+ }
408
+ memcpy (bucket -> buf , Z_STRVAL_P (pzdata ), bucket -> buflen );
402
409
}
403
- memcpy (bucket -> buf , Z_STRVAL_P (pzdata ), bucket -> buflen );
404
410
}
405
411
406
412
if (append ) {
@@ -454,7 +460,7 @@ PHP_FUNCTION(stream_bucket_new)
454
460
bucket = php_stream_bucket_new (stream , pbuffer , buffer_len , 1 , php_stream_is_persistent (stream ));
455
461
456
462
ZVAL_RES (& zbucket , zend_register_resource (bucket , le_bucket ));
457
- object_init (return_value );
463
+ object_init_ex (return_value , stream_bucket_class_entry );
458
464
add_property_zval (return_value , "bucket" , & zbucket );
459
465
/* add_property_zval increments the refcount which is unwanted here */
460
466
zval_ptr_dtor (& zbucket );
0 commit comments