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 a855dbe769f2..4c899731ab25 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -901,6 +901,7 @@ PHP_FUNCTION(inflate_init) ctx->inflateDictlen = dictlen; ctx->status = Z_OK; + zend_long orig_encoding = encoding; if (encoding < 0) { encoding += 15 - window; } else { @@ -914,7 +915,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);