diff options
Diffstat (limited to 'lib/kernel/test/zlib_SUITE.erl')
-rw-r--r-- | lib/kernel/test/zlib_SUITE.erl | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/kernel/test/zlib_SUITE.erl b/lib/kernel/test/zlib_SUITE.erl index 52ae1b3ae6..215c91ef76 100644 --- a/lib/kernel/test/zlib_SUITE.erl +++ b/lib/kernel/test/zlib_SUITE.erl @@ -395,6 +395,7 @@ api_inflateReset(Config) when is_list(Config) -> api_inflate2(Config) when is_list(Config) -> Data = [<<1,2,2,3,3,3,4,4,4,4>>], Compressed = zlib:compress(Data), + Z1 = zlib:open(), ?m(ok, zlib:inflateInit(Z1)), ?m([], zlib:inflate(Z1, <<>>)), @@ -408,7 +409,20 @@ api_inflate2(Config) when is_list(Config) -> ?m(ok, zlib:inflateEnd(Z1)), ?m(ok, zlib:inflateInit(Z1)), ?m(?EXIT(data_error), zlib:inflate(Z1, <<2,1,2,1,2>>)), - ?m(ok, zlib:close(Z1)). + ?m(ok, zlib:close(Z1)), + + %% OTP-17299: we failed to fully flush the zlib state if we ran out of + %% input and filled the internal output buffer at the same time. + EdgeCaseData = <<"gurka", 0:16384/integer-unit:8>>, + EdgeCaseZipped = zlib:zip(EdgeCaseData), + Z2 = zlib:open(), + ?m(ok, zlib:inflateInit(Z2, -15)), + Unzipped = iolist_to_binary(zlib:inflate(Z2, EdgeCaseZipped)), + ?m(EdgeCaseData, Unzipped), + ?m(ok, zlib:inflateEnd(Z2)), + ?m(ok, zlib:close(Z2)), + + ok. %% Test inflate/3; same as inflate/2 but with the default options inverted. api_inflate3(Config) when is_list(Config) -> |