authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-05-01 15:41:30-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-01 16:35:28-07:00
log2dbf05af0aa140649aba103ad456eca4b3f0b6d3
tree58080d344e5eb89cbca1351e4751b26fb5c2efb0
parent2ff5ea223150ff4d77b094812e4bd184eaecb0c6

std.compress.zstd: better error code for oversize literals


2 files changed, 3 insertions(+), 7 deletions(-)

lib/std/compress/zstd.zig+1-3
......@@ -110,8 +110,6 @@ fn testExpectDecompressError(err: anyerror, compressed: []const u8) !void {
110110 var zstd_stream: Decompress = .init(&in, .{});
111111 try std.testing.expectError(error.ReadFailed, zstd_stream.reader().readRemainingArrayList(gpa, null, &out, .unlimited));
112112 try std.testing.expectError(err, zstd_stream.err orelse {});
113
114 return error.TestFailed;
115113}
116114
117115test "decompression" {
......@@ -150,5 +148,5 @@ test "declared raw literals size too large" {
150148
151149 // Note that the regenerated_size in the above input is larger than block maximum size, so the
152150 // block can't be valid as it is a raw literals block.
153 try testExpectDecompressError(error.MalformedBlock, input_raw);
151 try testExpectDecompressError(error.MalformedLiteralsSection, input_raw);
154152}
lib/std/compress/zstd/Decompress.zig+2-4
......@@ -37,7 +37,6 @@ pub const Error = error{
3737 EndOfStream,
3838 HuffmanTreeIncomplete,
3939 InvalidBitStream,
40 LiteralsBufferUndersize,
4140 MalformedAccuracyLog,
4241 MalformedBlock,
4342 MalformedCompressedBlock,
......@@ -1224,7 +1223,6 @@ pub const LiteralsSection = struct {
12241223 /// Not enough bytes to complete the section.
12251224 EndOfStream,
12261225 ReadFailed,
1227 LiteralsBufferUndersize,
12281226 MissingStartBit,
12291227 };
12301228
......@@ -1232,7 +1230,7 @@ pub const LiteralsSection = struct {
12321230 const header = try Header.decode(in, remaining);
12331231 switch (header.block_type) {
12341232 .raw => {
1235 if (buffer.len < header.regenerated_size) return error.LiteralsBufferUndersize;
1233 if (buffer.len < header.regenerated_size) return error.MalformedLiteralsSection;
12361234 remaining.* = remaining.subtract(header.regenerated_size) orelse return error.EndOfStream;
12371235 try in.readSlice(buffer[0..header.regenerated_size]);
12381236 return .{
......@@ -1259,7 +1257,7 @@ pub const LiteralsSection = struct {
12591257 const huffman_tree_size = @intFromEnum(before_remaining) - @intFromEnum(remaining.*);
12601258 const total_streams_size = std.math.sub(usize, header.compressed_size.?, huffman_tree_size) catch
12611259 return error.MalformedLiteralsSection;
1262 if (total_streams_size > buffer.len) return error.LiteralsBufferUndersize;
1260 if (total_streams_size > buffer.len) return error.MalformedLiteralsSection;
12631261 remaining.* = remaining.subtract(total_streams_size) orelse return error.EndOfStream;
12641262 try in.readSlice(buffer[0..total_streams_size]);
12651263 const stream_data = buffer[0..total_streams_size];