From cb6201715a7bcae2b278811186afc17a697b25f7 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 12 Sep 2023 13:32:14 -0700 Subject: InternPool: prevent anon struct UAF bugs with type safety Instead of using actual slices for InternPool.Key.AnonStructType, this commit changes to use Slice types instead, which store a long-lived index rather than a pointer. This is a follow-up to 7ef1eb1c27754cb0349fdc10db1f02ff2dddd99b. --- src/codegen.zig | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/codegen.zig') diff --git a/src/codegen.zig b/src/codegen.zig index 3a802f4d86..4d1993434a 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -438,7 +438,11 @@ pub fn generateSymbol( }, .anon_struct_type => |tuple| { const struct_begin = code.items.len; - for (tuple.types, tuple.values, 0..) |field_ty, comptime_val, index| { + for ( + tuple.types.get(ip), + tuple.values.get(ip), + 0.., + ) |field_ty, comptime_val, index| { if (comptime_val != .none) continue; if (!field_ty.toType().hasRuntimeBits(mod)) continue; -- cgit v1.2.3