From 985da46414c246d1dc94e5b6f40899c9159e2d0e Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Mon, 7 Oct 2024 12:42:55 -0700 Subject: ffi: bug: flexible structure size calculation. * ffi.c (make_ffi_type_struct): We must calculate the size of a flexible structure the way GCC does it. We cannot simply truncate it at the offset of the member. Rather, the size is calculated in the usual way. The alignment of the array is taken into account for the purpose of determining what is the most aligned member of the structure, and then padding is added, if required. Thus, the size may exceed the offset of that member. --- ffi.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ffi.c b/ffi.c index acea5db0..91845e67 100644 --- a/ffi.c +++ b/ffi.c @@ -3916,13 +3916,12 @@ static val make_ffi_type_struct(val syntax, val lisp_type, tft->out = ffi_struct_out; if (flexp) { - tft->size = offs; tft->alloc = ffi_flex_alloc; tft->dynsize = ffi_flex_dynsize; - } else { - tft->size = (offs + most_align - 1) & ~(most_align - 1); } + tft->size = (offs + most_align - 1) & ~(most_align - 1); + tft->align = most_align; return obj; -- cgit v1.2.3