diff --git a/ext/zlib/tests/inflate_raw_dictionary_window.phpt b/ext/zlib/tests/inflate_raw_dictionary_window.phpt new file mode 100644 index 000000000000..0269127c1368 --- /dev/null +++ b/ext/zlib/tests/inflate_raw_dictionary_window.phpt @@ -0,0 +1,20 @@ +--TEST-- +inflate_init(): preset dictionary is honored for raw encoding with a non-default window +--EXTENSIONS-- +zlib +--FILE-- + 10, 'dictionary' => $dict]; + +$def = deflate_init(ZLIB_ENCODING_RAW, $opts); +$comp = deflate_add($def, $data, ZLIB_FINISH); + +$inf = inflate_init(ZLIB_ENCODING_RAW, $opts); +$out = inflate_add($inf, $comp, ZLIB_FINISH); + +var_dump($out === $data); +?> +--EXPECT-- +bool(true) diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index b221b1f4b55c..003ffa801115 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -904,6 +904,7 @@ PHP_FUNCTION(inflate_init) ctx->inflateDictlen = dictlen; ctx->status = Z_OK; + zend_long orig_encoding = encoding; if (encoding < 0) { encoding += 15 - window; } else { @@ -917,7 +918,7 @@ PHP_FUNCTION(inflate_init) RETURN_FALSE; } - if (encoding == PHP_ZLIB_ENCODING_RAW && dictlen > 0) { + if (orig_encoding == PHP_ZLIB_ENCODING_RAW && dictlen > 0) { switch (inflateSetDictionary(&ctx->Z, (Bytef *) ctx->inflateDict, ctx->inflateDictlen)) { case Z_OK: efree(ctx->inflateDict);