authorgravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2023-10-17 14:46:47-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2023-10-17 21:46:47+00:00
log364c54460f3e6fb770a19c5572b0951dd903f19d
treeef5cc050ae39c6c4ad6960c94d02e895824c8893
parentad168db727a1baec8b8efe0bb4418d0df7e84769
signature Signed by PGP key 4AEE18F83AFDEB23

Deflate: fix missing value in reset


1 files changed, 30 insertions(+), 0 deletions(-)

lib/std/compress/deflate/decompressor.zig+30
......@@ -884,6 +884,7 @@ pub fn Decompressor(comptime ReaderType: type) type {
884884 s.inner_reader = new_reader;
885885 s.step = nextBlock;
886886 s.err = null;
887 s.nb = 0;
887888
888889 s.dict.deinit();
889890 try s.dict.init(s.allocator, max_match_offset, new_dict);
......@@ -898,6 +899,35 @@ const expectError = std.testing.expectError;
898899const io = std.io;
899900const testing = std.testing;
900901
902test "confirm decompressor resets" {
903 var compressed = std.ArrayList(u8).init(std.testing.allocator);
904 defer compressed.deinit();
905
906 inline for (.{
907 &[_]u8{ 0x5d, 0xc0, 0x21, 0x01, 0x00, 0x00, 0x00, 0x80, 0x20, 0xff, 0xaf, 0xa6, 0x4b, 0x03 },
908 &[_]u8{ 0x55, 0xc1, 0x41, 0x0d, 0x00, 0x00, 0x00, 0x02, 0xa1, 0x94, 0x96, 0x34, 0x25, 0xef, 0x1b, 0x5f, 0x01 },
909 }) |data| {
910 try compressed.writer().writeAll(data);
911 }
912
913 var stream = std.io.fixedBufferStream(compressed.items);
914 var decomp = try decompressor(std.testing.allocator, stream.reader(), null);
915 defer decomp.deinit();
916
917 while (true) {
918 if (try stream.getPos() == try stream.getEndPos()) break;
919
920 const buf = try decomp.reader().readAllAlloc(std.testing.allocator, 1024 * 100);
921 defer std.testing.allocator.free(buf);
922
923 if (decomp.close()) |err| {
924 return err;
925 }
926
927 try decomp.reset(stream.reader(), null);
928 }
929}
930
901931test "truncated input" {
902932 const TruncatedTest = struct {
903933 input: []const u8,