Bug #48725 [Com]: Support for flushing in zlib stream
| From: | nastasi at alternativeoutput dot it | Date: | Fri, 02 Nov 2012 17:13:29 +0000 |
| Subject: | Bug #48725 [Com]: Support for flushing in zlib stream | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-174489@lists.php.net to get a copy of this message | ||
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] jani@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