@@ -440,6 +440,7 @@ static php_stream_filter *php_bz2_filter_create(const char *filtername, zval *fi
440440 zend_long blocks = zval_get_long (tmpzval );
441441 if (blocks < 1 || blocks > 9 ) {
442442 php_error_docref (NULL , E_WARNING , "Invalid parameter given for number of blocks to allocate (" ZEND_LONG_FMT ")" , blocks );
443+ goto cleanup ;
443444 } else {
444445 blockSize100k = (int ) blocks ;
445446 }
@@ -450,6 +451,7 @@ static php_stream_filter *php_bz2_filter_create(const char *filtername, zval *fi
450451 zend_long work = zval_get_long (tmpzval );
451452 if (work < 0 || work > 250 ) {
452453 php_error_docref (NULL , E_WARNING , "Invalid parameter given for work factor (" ZEND_LONG_FMT ")" , work );
454+ goto cleanup ;
453455 } else {
454456 workFactor = (int ) work ;
455457 }
@@ -470,13 +472,16 @@ static php_stream_filter *php_bz2_filter_create(const char *filtername, zval *fi
470472
471473 if (status != BZ_OK ) {
472474 /* Unspecified (probably strm) error, let stream-filter error do its own whining */
473- pefree (data -> strm .next_in , persistent );
474- pefree (data -> strm .next_out , persistent );
475- pefree (data , persistent );
476- return NULL ;
475+ goto cleanup ;
477476 }
478477
479478 return php_stream_filter_alloc (fops , data , persistent , PSFS_SEEKABLE_START );
479+
480+ cleanup :
481+ pefree (data -> strm .next_in , persistent );
482+ pefree (data -> strm .next_out , persistent );
483+ pefree (data , persistent );
484+ return NULL ;
480485}
481486
482487const php_stream_filter_factory php_bz2_filter_factory = {
0 commit comments