diff --git a/src/core/ffi.c b/src/core/ffi.c index 9b149542..7cc1ae2f 100644 --- a/src/core/ffi.c +++ b/src/core/ffi.c @@ -424,6 +424,7 @@ static JanetFFIStruct *build_struct_type(int32_t argc, const Janet *argv) { st->size += (uint32_t) el_size; } else { if (el_align > st->align) st->align = (uint32_t) el_align; + if (el_align <= 0) el_align = 1; st->fields[i].offset = (uint32_t)(((st->size + el_align - 1) / el_align) * el_align); st->size = (uint32_t)(el_size + st->fields[i].offset); } diff --git a/test/suite-ffi.janet b/test/suite-ffi.janet index 0a810198..fb8d288c 100644 --- a/test/suite-ffi.janet +++ b/test/suite-ffi.janet @@ -52,5 +52,10 @@ (assert (= 26 (ffi/size [:char :pack :int @[:char 21]])) "array struct size")) -(end-suite) +(compwhen has-ffi + (assert-no-error "bad struct issue #1512" (ffi/struct :void)) + (def s (ffi/struct :void)) + (assert (= 0 (ffi/size s))) + (assert (= 1 (ffi/align s)))) +(end-suite)