diff --git a/lib/std/tar.zig b/lib/std/tar.zig index e0a50a84cb..e295585bf3 100644 --- a/lib/std/tar.zig +++ b/lib/std/tar.zig @@ -300,7 +300,7 @@ fn Iterator(comptime ReaderType: type) type { } inline fn readString(self: *Self, size: usize, buffer: []u8) ![]const u8 { - assert(buffer.len >= size); + if (size > buffer.len) return error.TarCorruptInput; const buf = buffer[0..size]; try self.reader.readNoEof(buf); return nullStr(buf); diff --git a/lib/std/tar/test.zig b/lib/std/tar/test.zig index 82c73e2546..f77b8a778a 100644 --- a/lib/std/tar/test.zig +++ b/lib/std/tar/test.zig @@ -313,6 +313,10 @@ test "tar run Go test cases" { }, }, }, + .{ + .data = @embedFile("testdata/fuzz1.tar"), + .err = error.TarCorruptInput, + }, }; for (cases) |case| { diff --git a/lib/std/tar/testdata/fuzz1.tar b/lib/std/tar/testdata/fuzz1.tar new file mode 100644 index 0000000000..545949b82b Binary files /dev/null and b/lib/std/tar/testdata/fuzz1.tar differ