ID:               43400
 User updated by:  witekfl at poczta dot onet dot pl
 Reported By:      witekfl at poczta dot onet dot pl
 Status:           Open
-Bug Type:         Streams related
+Bug Type:         Zlib Related
 Operating System: Linux
 PHP Version:      5.2.5
 New Comment:

This patch solves the problem:
--- php-5.2.2/ext/zlib/zlib_filter.c.old        2007-05-07
19:42:29.000000000 +0
200
+++ php-5.2.2/ext/zlib/zlib_filter.c    2007-05-07 21:35:25.000000000
+0200
@@ -100,11 +100,6 @@
                        consumed += desired;
                        bin += desired;
 
-                       if (!desired) {
-                               flags |= PSFS_FLAG_FLUSH_CLOSE;
-                               break;
-                       }
-
                        if (data->strm.avail_out < data->outbuf_len) {
                                php_stream_bucket *out_bucket;
                                size_t bucketlen = data->outbuf_len -
data->strm
.avail_out;
@@ -213,11 +208,6 @@
                        consumed += desired;
                        bin += desired;
 
-                       if (!desired) {
-                               flags |= PSFS_FLAG_FLUSH_CLOSE;
-                               break;
-                       }
-
                        if (data->strm.avail_out < data->outbuf_len) {
                                php_stream_bucket *out_bucket;
                                size_t bucketlen = data->outbuf_len -
data->strm
.avail_out;


Previous Comments:
------------------------------------------------------------------------

[2007-11-25 19:02:12] witekfl at poczta dot onet dot pl

Description:
------------
The deflate filter doesn't compress all data.
The decompressed data is 1721662 bytes long.

Reproduce code:
---------------
<?php
$f = fopen("http://republika.pl/rkd/data.bz2";, "rb");
$data = '';
while (!feof($f)) {
        $data .= fread($f, 32768);
}
fclose($f);
$text = bzdecompress($data);

$f3 = fopen("data.html.deflate", "wb");
stream_filter_append($f3, 'zlib.deflate', STREAM_FILTER_WRITE);
fwrite($f3, $text); fclose($f3);

$f5 = fopen("data.html.deflate", "rb");
stream_filter_append($f5, 'zlib.inflate', STREAM_FILTER_READ);
$text_deflate = ''; while (!feof($f5)) { $text_deflate .= fread($f5,
32768); } fclose($f5);

printf("original = %d, deflate = %d\n", strlen($text),
strlen($text_deflate));
?>


Expected result:
----------------
original = 1721662, deflate = 1721662


Actual result:
--------------
original = 1721662, deflate = 546816



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


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

Reply via email to