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 {...@@ -110,8 +110,6 @@ fn testExpectDecompressError(err: anyerror, compressed: []const u8) !void {
110 var zstd_stream: Decompress = .init(&in, .{});110 var zstd_stream: Decompress = .init(&in, .{});
111 try std.testing.expectError(error.ReadFailed, zstd_stream.reader().readRemainingArrayList(gpa, null, &out, .unlimited));111 try std.testing.expectError(error.ReadFailed, zstd_stream.reader().readRemainingArrayList(gpa, null, &out, .unlimited));
112 try std.testing.expectError(err, zstd_stream.err orelse {});112 try std.testing.expectError(err, zstd_stream.err orelse {});
113
114 return error.TestFailed;
115}113}
116114
117test "decompression" {115test "decompression" {
...@@ -150,5 +148,5 @@ test "declared raw literals size too large" {...@@ -150,5 +148,5 @@ test "declared raw literals size too large" {
150148
151 // Note that the regenerated_size in the above input is larger than block maximum size, so the149 // Note that the regenerated_size in the above input is larger than block maximum size, so the
152 // block can't be valid as it is a raw literals block.150 // 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);
154}152}
lib/std/compress/zstd/Decompress.zig+2-4
...@@ -37,7 +37,6 @@ pub const Error = error{...@@ -37,7 +37,6 @@ pub const Error = error{
37 EndOfStream,37 EndOfStream,
38 HuffmanTreeIncomplete,38 HuffmanTreeIncomplete,
39 InvalidBitStream,39 InvalidBitStream,
40 LiteralsBufferUndersize,
41 MalformedAccuracyLog,40 MalformedAccuracyLog,
42 MalformedBlock,41 MalformedBlock,
43 MalformedCompressedBlock,42 MalformedCompressedBlock,
...@@ -1224,7 +1223,6 @@ pub const LiteralsSection = struct {...@@ -1224,7 +1223,6 @@ pub const LiteralsSection = struct {
1224 /// Not enough bytes to complete the section.1223 /// Not enough bytes to complete the section.
1225 EndOfStream,1224 EndOfStream,
1226 ReadFailed,1225 ReadFailed,
1227 LiteralsBufferUndersize,
1228 MissingStartBit,1226 MissingStartBit,
1229 };1227 };
12301228
...@@ -1232,7 +1230,7 @@ pub const LiteralsSection = struct {...@@ -1232,7 +1230,7 @@ pub const LiteralsSection = struct {
1232 const header = try Header.decode(in, remaining);1230 const header = try Header.decode(in, remaining);
1233 switch (header.block_type) {1231 switch (header.block_type) {
1234 .raw => {1232 .raw => {
1235 if (buffer.len < header.regenerated_size) return error.LiteralsBufferUndersize;1233 if (buffer.len < header.regenerated_size) return error.MalformedLiteralsSection;
1236 remaining.* = remaining.subtract(header.regenerated_size) orelse return error.EndOfStream;1234 remaining.* = remaining.subtract(header.regenerated_size) orelse return error.EndOfStream;
1237 try in.readSlice(buffer[0..header.regenerated_size]);1235 try in.readSlice(buffer[0..header.regenerated_size]);
1238 return .{1236 return .{
...@@ -1259,7 +1257,7 @@ pub const LiteralsSection = struct {...@@ -1259,7 +1257,7 @@ pub const LiteralsSection = struct {
1259 const huffman_tree_size = @intFromEnum(before_remaining) - @intFromEnum(remaining.*);1257 const huffman_tree_size = @intFromEnum(before_remaining) - @intFromEnum(remaining.*);
1260 const total_streams_size = std.math.sub(usize, header.compressed_size.?, huffman_tree_size) catch1258 const total_streams_size = std.math.sub(usize, header.compressed_size.?, huffman_tree_size) catch
1261 return error.MalformedLiteralsSection;1259 return error.MalformedLiteralsSection;
1262 if (total_streams_size > buffer.len) return error.LiteralsBufferUndersize;1260 if (total_streams_size > buffer.len) return error.MalformedLiteralsSection;
1263 remaining.* = remaining.subtract(total_streams_size) orelse return error.EndOfStream;1261 remaining.* = remaining.subtract(total_streams_size) orelse return error.EndOfStream;
1264 try in.readSlice(buffer[0..total_streams_size]);1262 try in.readSlice(buffer[0..total_streams_size]);
1265 const stream_data = buffer[0..total_streams_size];1263 const stream_data = buffer[0..total_streams_size];