diff --git a/lib/std/tar.zig b/lib/std/tar.zig index e0a50a84cb853d970dd97a2f8800a2e5af51d9f1..e295585bf344de2cd27b2a4d52837725f49e38f7 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 82c73e25466dc1a23e5d81366e3e12dc37f441e6..f77b8a778a0a168884fbc11fed28441b67944fdb 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 0000000000000000000000000000000000000000..545949b82b098ed4f90c3cbef4cb308aa2392725 Binary files /dev/null and b/lib/std/tar/testdata/fuzz1.tar differ