From ce89a98fdeec4437e2eaf0b0dadb399eee1f6f46 Mon Sep 17 00:00:00 2001 From: "kj4tmp@gmail.com" Date: Tue, 1 Oct 2024 00:03:00 -0700 Subject: [PATCH] disallow readStruct for packed structs --- lib/std/io/Reader.zig | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/std/io/Reader.zig b/lib/std/io/Reader.zig index 33187125b86b..6e62e0778ce5 100644 --- a/lib/std/io/Reader.zig +++ b/lib/std/io/Reader.zig @@ -326,7 +326,9 @@ pub fn isBytes(self: Self, slice: []const u8) anyerror!bool { pub fn readStruct(self: Self, comptime T: type) anyerror!T { // Only extern and packed structs have defined in-memory layout. - comptime assert(@typeInfo(T).@"struct".layout != .auto); + // Packed structs may have padding due to alignment of the backing integer. + // Therefore, only extern structs are allowed. + comptime assert(@typeInfo(T).@"struct".layout == .@"extern"); var res: [1]T = undefined; try self.readNoEof(mem.sliceAsBytes(res[0..])); return res[0];