From 23fff3442de38877c556f3cda19f3cccef255f7a Mon Sep 17 00:00:00 2001 From: Ryan Liptak Date: Fri, 8 Aug 2025 01:37:59 -0700 Subject: [PATCH] flate: Handle invalid block type Fixes `panic: invalid enum value` when the type bits had the u2 value of 3. Contributes towards #24741 --- lib/std/compress/flate/Decompress.zig | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/std/compress/flate/Decompress.zig b/lib/std/compress/flate/Decompress.zig index a4bb4f291d..07e35b60b5 100644 --- a/lib/std/compress/flate/Decompress.zig +++ b/lib/std/compress/flate/Decompress.zig @@ -31,6 +31,7 @@ const BlockType = enum(u2) { stored = 0, fixed = 1, dynamic = 2, + invalid = 3, }; const State = union(enum) { @@ -49,6 +50,7 @@ pub const Error = Container.Error || error{ InvalidCode, InvalidMatch, WrongStoredBlockNlen, + InvalidBlockType, InvalidDynamicBlockHeader, ReadFailed, OversubscribedHuffmanTree, @@ -360,6 +362,7 @@ fn streamInner(d: *Decompress, w: *Writer, limit: std.Io.Limit) (Error || Reader continue :sw .dynamic_block; }, + .invalid => return error.InvalidBlockType, } }, .stored_block => |remaining_len| { @@ -1141,6 +1144,10 @@ test "puff09" { try testDecompress(.raw, @embedFile("testdata/fuzz/puff09.input"), "P"); } +test "invalid block type" { + try testFailure(.raw, &[_]u8{0b110}, error.InvalidBlockType); +} + test "bug 18966" { try testDecompress( .gzip,