@@ -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 );
@@ -366,16 +368,16 @@ PHP_FUNCTION(stream_bucket_make_writeable)
366
368
RETURN_THROWS ();
367
369
}
368
370
369
- ZVAL_NULL (return_value );
370
-
371
371
if (brigade -> head && (bucket = php_stream_bucket_make_writeable (brigade -> head ))) {
372
372
ZVAL_RES (& zbucket , zend_register_resource (bucket , le_bucket ));
373
- object_init (return_value );
373
+ object_init_ex (return_value , stream_bucket_class_entry );
374
374
add_property_zval (return_value , "bucket" , & zbucket );
375
375
/* add_property_zval increments the refcount which is unwanted here */
376
376
zval_ptr_dtor (& zbucket );
377
377
add_property_stringl (return_value , "data" , bucket -> buf , bucket -> buflen );
378
378
add_property_long (return_value , "datalen" , bucket -> buflen );
379
+ } else {
380
+ ZVAL_NULL (return_value );
379
381
}
380
382
}
381
383
/* }}} */
@@ -384,38 +386,42 @@ PHP_FUNCTION(stream_bucket_make_writeable)
384
386
static void php_stream_bucket_attach (int append , INTERNAL_FUNCTION_PARAMETERS )
385
387
{
386
388
zval * zbrigade , * zobject ;
387
- zval * pzbucket , * pzdata ;
389
+ zval * pzbucket , * pzdata , rv ;
388
390
php_stream_bucket_brigade * brigade ;
389
391
php_stream_bucket * bucket ;
390
392
391
393
ZEND_PARSE_PARAMETERS_START (2 , 2 )
392
394
Z_PARAM_RESOURCE (zbrigade )
393
- Z_PARAM_OBJECT (zobject )
395
+ Z_PARAM_OBJECT_OF_CLASS (zobject , stream_bucket_class_entry )
394
396
ZEND_PARSE_PARAMETERS_END ();
395
397
396
- if (NULL == ( pzbucket = zend_hash_str_find_deref ( Z_OBJPROP_P ( zobject ), "bucket" , sizeof ( "bucket" ) - 1 ))) {
397
- zend_argument_value_error ( 2 , "must be an object that has a \"bucket\" property" );
398
+ if (( brigade = ( php_stream_bucket_brigade * ) zend_fetch_resource (
399
+ Z_RES_P ( zbrigade ), PHP_STREAM_BRIGADE_RES_NAME , le_bucket_brigade )) == NULL ) {
398
400
RETURN_THROWS ();
399
401
}
400
402
401
- if (( brigade = ( php_stream_bucket_brigade * ) zend_fetch_resource (
402
- Z_RES_P ( zbrigade ), PHP_STREAM_BRIGADE_RES_NAME , le_bucket_brigade )) == NULL ) {
403
+ if (NULL == ( pzbucket = zend_read_property ( NULL , Z_OBJ_P ( zobject ), "bucket" , sizeof ( "bucket" ) - 1 , false, & rv ))) {
404
+ zend_argument_value_error ( 2 , "must be an object that has a \"bucket\" property" );
403
405
RETURN_THROWS ();
404
406
}
407
+ ZVAL_DEREF (pzbucket );
405
408
406
409
if ((bucket = (php_stream_bucket * )zend_fetch_resource_ex (pzbucket , PHP_STREAM_BUCKET_RES_NAME , le_bucket )) == NULL ) {
407
410
RETURN_THROWS ();
408
411
}
409
412
410
- if (NULL != (pzdata = zend_hash_str_find_deref (Z_OBJPROP_P (zobject ), "data" , sizeof ("data" )- 1 )) && Z_TYPE_P (pzdata ) == IS_STRING ) {
411
- if (!bucket -> own_buf ) {
412
- bucket = php_stream_bucket_make_writeable (bucket );
413
- }
414
- if (bucket -> buflen != Z_STRLEN_P (pzdata )) {
415
- bucket -> buf = perealloc (bucket -> buf , Z_STRLEN_P (pzdata ), bucket -> is_persistent );
416
- bucket -> buflen = Z_STRLEN_P (pzdata );
413
+ if (NULL != (pzdata = zend_read_property (NULL , Z_OBJ_P (zobject ), "data" , sizeof ("data" )- 1 , false, & rv ))) {
414
+ ZVAL_DEREF (pzdata );
415
+ if (Z_TYPE_P (pzdata ) == IS_STRING ) {
416
+ if (!bucket -> own_buf ) {
417
+ bucket = php_stream_bucket_make_writeable (bucket );
418
+ }
419
+ if (bucket -> buflen != Z_STRLEN_P (pzdata )) {
420
+ bucket -> buf = perealloc (bucket -> buf , Z_STRLEN_P (pzdata ), bucket -> is_persistent );
421
+ bucket -> buflen = Z_STRLEN_P (pzdata );
422
+ }
423
+ memcpy (bucket -> buf , Z_STRVAL_P (pzdata ), bucket -> buflen );
417
424
}
418
- memcpy (bucket -> buf , Z_STRVAL_P (pzdata ), bucket -> buflen );
419
425
}
420
426
421
427
if (append ) {
@@ -469,7 +475,7 @@ PHP_FUNCTION(stream_bucket_new)
469
475
bucket = php_stream_bucket_new (stream , pbuffer , buffer_len , 1 , php_stream_is_persistent (stream ));
470
476
471
477
ZVAL_RES (& zbucket , zend_register_resource (bucket , le_bucket ));
472
- object_init (return_value );
478
+ object_init_ex (return_value , stream_bucket_class_entry );
473
479
add_property_zval (return_value , "bucket" , & zbucket );
474
480
/* add_property_zval increments the refcount which is unwanted here */
475
481
zval_ptr_dtor (& zbucket );
0 commit comments