From 2dbf05af0aa140649aba103ad456eca4b3f0b6d3 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Thu, 1 May 2025 15:41:30 -0700 Subject: [PATCH] std.compress.zstd: better error code for oversize literals --- lib/std/compress/zstd.zig | 4 +--- lib/std/compress/zstd/Decompress.zig | 6 ++---- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/lib/std/compress/zstd.zig b/lib/std/compress/zstd.zig index 817fc3fee7..2209d2d936 100644 --- a/lib/std/compress/zstd.zig +++ b/lib/std/compress/zstd.zig @@ -110,8 +110,6 @@ fn testExpectDecompressError(err: anyerror, compressed: []const u8) !void { var zstd_stream: Decompress = .init(&in, .{}); try std.testing.expectError(error.ReadFailed, zstd_stream.reader().readRemainingArrayList(gpa, null, &out, .unlimited)); try std.testing.expectError(err, zstd_stream.err orelse {}); - - return error.TestFailed; } test "decompression" { @@ -150,5 +148,5 @@ test "declared raw literals size too large" { // Note that the regenerated_size in the above input is larger than block maximum size, so the // block can't be valid as it is a raw literals block. - try testExpectDecompressError(error.MalformedBlock, input_raw); + try testExpectDecompressError(error.MalformedLiteralsSection, input_raw); } diff --git a/lib/std/compress/zstd/Decompress.zig b/lib/std/compress/zstd/Decompress.zig index f0b9c1bbae..a333405890 100644 --- a/lib/std/compress/zstd/Decompress.zig +++ b/lib/std/compress/zstd/Decompress.zig @@ -37,7 +37,6 @@ pub const Error = error{ EndOfStream, HuffmanTreeIncomplete, InvalidBitStream, - LiteralsBufferUndersize, MalformedAccuracyLog, MalformedBlock, MalformedCompressedBlock, @@ -1224,7 +1223,6 @@ pub const LiteralsSection = struct { /// Not enough bytes to complete the section. EndOfStream, ReadFailed, - LiteralsBufferUndersize, MissingStartBit, }; @@ -1232,7 +1230,7 @@ pub const LiteralsSection = struct { const header = try Header.decode(in, remaining); switch (header.block_type) { .raw => { - if (buffer.len < header.regenerated_size) return error.LiteralsBufferUndersize; + if (buffer.len < header.regenerated_size) return error.MalformedLiteralsSection; remaining.* = remaining.subtract(header.regenerated_size) orelse return error.EndOfStream; try in.readSlice(buffer[0..header.regenerated_size]); return .{ @@ -1259,7 +1257,7 @@ pub const LiteralsSection = struct { const huffman_tree_size = @intFromEnum(before_remaining) - @intFromEnum(remaining.*); const total_streams_size = std.math.sub(usize, header.compressed_size.?, huffman_tree_size) catch return error.MalformedLiteralsSection; - if (total_streams_size > buffer.len) return error.LiteralsBufferUndersize; + if (total_streams_size > buffer.len) return error.MalformedLiteralsSection; remaining.* = remaining.subtract(total_streams_size) orelse return error.EndOfStream; try in.readSlice(buffer[0..total_streams_size]); const stream_data = buffer[0..total_streams_size];