authorgravatar for squeek502@hotmail.comRyan Liptak <squeek502@hotmail.com> 2025-08-08 01:37:59-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-08 12:27:25-07:00
log23fff3442de38877c556f3cda19f3cccef255f7a
tree1ccef586bab59ea7f7ddd805d8c8c785f00b5754
parentd984e7d2fa4a88a86deff36f33c70b2f4ced7d02

flate: Handle invalid block type

Fixes `panic: invalid enum value` when the type bits had the u2 value of 3. Contributes towards #24741

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

lib/std/compress/flate/Decompress.zig+7
...@@ -31,6 +31,7 @@ const BlockType = enum(u2) {...@@ -31,6 +31,7 @@ const BlockType = enum(u2) {
31 stored = 0,31 stored = 0,
32 fixed = 1,32 fixed = 1,
33 dynamic = 2,33 dynamic = 2,
34 invalid = 3,
34};35};
3536
36const State = union(enum) {37const State = union(enum) {
...@@ -49,6 +50,7 @@ pub const Error = Container.Error || error{...@@ -49,6 +50,7 @@ pub const Error = Container.Error || error{
49 InvalidCode,50 InvalidCode,
50 InvalidMatch,51 InvalidMatch,
51 WrongStoredBlockNlen,52 WrongStoredBlockNlen,
53 InvalidBlockType,
52 InvalidDynamicBlockHeader,54 InvalidDynamicBlockHeader,
53 ReadFailed,55 ReadFailed,
54 OversubscribedHuffmanTree,56 OversubscribedHuffmanTree,
...@@ -360,6 +362,7 @@ fn streamInner(d: *Decompress, w: *Writer, limit: std.Io.Limit) (Error || Reader...@@ -360,6 +362,7 @@ fn streamInner(d: *Decompress, w: *Writer, limit: std.Io.Limit) (Error || Reader
360362
361 continue :sw .dynamic_block;363 continue :sw .dynamic_block;
362 },364 },
365 .invalid => return error.InvalidBlockType,
363 }366 }
364 },367 },
365 .stored_block => |remaining_len| {368 .stored_block => |remaining_len| {
...@@ -1141,6 +1144,10 @@ test "puff09" {...@@ -1141,6 +1144,10 @@ test "puff09" {
1141 try testDecompress(.raw, @embedFile("testdata/fuzz/puff09.input"), "P");1144 try testDecompress(.raw, @embedFile("testdata/fuzz/puff09.input"), "P");
1142}1145}
11431146
1147test "invalid block type" {
1148 try testFailure(.raw, &[_]u8{0b110}, error.InvalidBlockType);
1149}
1150
1144test "bug 18966" {1151test "bug 18966" {
1145 try testDecompress(1152 try testDecompress(
1146 .gzip,1153 .gzip,