Bug #73944 [Com]: dictionary option of intflate_init() does not work

From: Date: Fri, 27 Jan 2017 20:55:26 +0000
Subject: Bug #73944 [Com]: dictionary option of intflate_init() does not work
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-206985@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=73944&edit=1

 ID:                 73944
 Comment by:         someone dot wanted dot to dot be dot unknown at
                     gmail dot com
 Reported by:        someone dot wanted dot to dot be dot unknown at
                     gmail dot com
 Summary:            dictionary option of intflate_init() does not work
 Status:             Assigned
 Type:               Bug
 Package:            Zlib related
 Operating System:   Windows 10 x64
 PHP Version:        7.1.0
 Assigned To:        bwoebi
 Block user comment: N
 Private report:     N

 New Comment:

Thanks for attention. Can you test other data set?

$in = inflate_init(ZLIB_ENCODING_RAW);
$a = inflate_add($in, file_get_contents('https://github.com/wapmorgan/CabArchive/releases/download/0.0.1-dev/comp_0-0'));
echo '1 block: '.strlen($a).PHP_EOL;

$in = inflate_init(ZLIB_ENCODING_RAW, array('dictionary' => $a));
$b = inflate_add($in, file_get_contents('https://github.com/wapmorgan/CabArchive/releases/download/0.0.1-dev/comp_0-1'));
echo '2 block: '.($b === false ? 'failed' : strlen($b)).PHP_EOL;


Previous Comments:
------------------------------------------------------------------------
[2017-01-25 15:24:01] bwoebi@php.net

I'm not sure whether I'm doing it right…
I've commented these lines out:
https://github.com/php/php-src/blob/b38e6a54cf4500780fd8ba68ae66714a0f21dd86/ext/zlib/zlib.c#L767-L780

and called the code with:
$in = inflate_init(ZLIB_ENCODING_RAW, array('dictionary' => $a));

but I still get a data error upon subsequent inflate_add() … so not sure whether the repro is
broken or something else in the code.

------------------------------------------------------------------------
[2017-01-23 23:46:11] someone dot wanted dot to dot be dot unknown at gmail dot com

Any update on this?

------------------------------------------------------------------------
[2017-01-16 11:39:33] cmb@php.net

Bob, as you've added the dictionary option[1], could you please
have a look at this.

[1] <http://git.php.net/?p=php-src.git;a=commit;h=dd17e18f>

------------------------------------------------------------------------
[2017-01-16 10:11:00] someone dot wanted dot to dot be dot unknown at gmail dot com

change title

------------------------------------------------------------------------
[2017-01-16 10:05:32] someone dot wanted dot to dot be dot unknown at gmail dot com

Description:
------------
I'm writing an unpacker of MSZIP blocks that use deflate compression.
I faced a problem and created a question on stackoverflow
(http://stackoverflow.com/questions/41653663/is-there-something-special-in-windows-mszip-format-or-cfdata-in-cab-files),
where maintainer of zlib library adviced to use dictionary option to pass raw
uncompressed data of previous block to decompress next block of data. But Mark Adler says that this
option don't work in current php realisation. 

> Looks like a bug. I can't get the dictionary option to work at all, even with strings that
> don't have nulls.

Test script:
---------------
$in = inflate_init(ZLIB_ENCODING_RAW);
$a = inflate_add($in, file_get_contents('https://github.com/wapmorgan/CabArchive/releases/download/0.0.1-dev/1block'));
echo '1 block: '.strlen($a).PHP_EOL;

$in = inflate_init(ZLIB_ENCODING_RAW, array('dictionary' =>
str_replace("\00", null, $a)."\00"));
$b = inflate_add($in, file_get_contents('https://github.com/wapmorgan/CabArchive/releases/download/0.0.1-dev/2block'));
echo '2 block: '.($b === false ? 'failed' : strlen($b)).PHP_EOL;

Expected result:
----------------
1 block: 32768
2 block: 32768

Actual result:
--------------
1 block: 32768
2 block: failed


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



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


Thread (17 messages)

« previous php.bugs (#206985) next »