Edit report at https://bugs.php.net/bug.php?id=48725&edit=1

 ID:                 48725
 Comment by:         nastasi at alternativeoutput dot it
 Reported by:        slusarz at curecanti dot org
 Summary:            Support for flushing in zlib stream
 Status:             Open
 Type:               Bug
 Package:            Streams related
 Operating System:   Linux
 PHP Version:        5.2.10
 Block user comment: N
 Private report:     N

 New Comment:

I had worked on the php source code and found a fix.

To understand what happens I had traced what happens during a  

    ....
    for ($i = 0 ; $i < 3 ; $i++) {
        fwrite($s[0]);
        fread($s[1]);
        fflush($s[0]);
        fread($s[1]);
        }

loop and I found that the `deflate` function is never called with the 
`Z_SYNC_FLUSH` flag set because no new data are present into the `backets_in` 
brigade.  
My fix is to manage the `PSFS_FLAG_FLUSH_INC` case `AND` no iterations are 
performed on deflate function extending the 

    if (flags & PSFS_FLAG_FLUSH_CLOSE) {

managing `FLUSH_INC` too:

    if (flags & PSFS_FLAG_FLUSH_CLOSE || (flags & PSFS_FLAG_FLUSH_INC && 
to_be_flushed)) {

All my work is performed on Debian squeeze 6.0.5, and PHP 5.3.3-7+squeeze14 but 
I already check the current git version and it seems not changed for the 
essetial parts.


Previous Comments:
------------------------------------------------------------------------
[2012-10-24 13:27:35] arnout dot boks at moxio dot com

Verified this with PHP 5.4.7 on Windows.

Another reproduce case:
-----------------------
<?php
$stream = fopen('data://text/plain;base64,' . base64_encode('Foo bar baz'), 
'r');
stream_filter_append($stream, 'zlib.deflate', STREAM_FILTER_READ);
print bin2hex(stream_get_contents($stream));

Expected:
---------
73cbcf57484a2c02e22a00     // == bin2hex(gzdeflate('Foo bar baz'))

Actual:
-------
                           // (empty)

Variations tried:
-----------------
- Replacing the 'zlib.deflate'-filter by another stream filter ('string.rot13') 
gives the correct output.
- Replacing the 'data://'-URL by a 'file://'- or 'http://'-URL pointing to the 
same data gives the correct output.
- Replacing the 'data://'-URL by a 'php://memory' or 'php://temp' stream to 
which the data has been written (and the stream rewinded) gives empty output

------------------------------------------------------------------------
[2012-05-20 01:45:27] lello-3 at hotmail dot com

Please fix this

------------------------------------------------------------------------
[2011-12-13 22:36:17] dtrebbien at gmail dot com

See also: 
http://stackoverflow.com/questions/7508762/using-zlib-filter-with-a-socket-pair/

------------------------------------------------------------------------
[2009-10-23 12:25:10] j...@php.net

It's related, not same. :)

------------------------------------------------------------------------
[2009-10-22 21:40:37] slusarz at curecanti dot org

I don't think this is related to bug #49816.  Turning off zlib output 
compression (by adding "ini_set('zlib.output_compression', 'Off');" to the top 
of the test script)doesn't alter the results from the test script previously 
reported.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=48725


-- 
Edit this bug report at https://bugs.php.net/bug.php?id=48725&edit=1

Reply via email to