[master] 593632401 miniobj.h: Fix ALLOC_FLEX_OBJ

Nils Goroll nils.goroll at uplex.de
Mon Feb 10 19:03:05 UTC 2025


commit 593632401763f463e7d611cc6cc916ccf6208cc4
Author: Nils Goroll <nils.goroll at uplex.de>
Date:   Mon Feb 10 19:57:03 2025 +0100

    miniobj.h: Fix ALLOC_FLEX_OBJ
    
    use of sizeof(base) is actually wrong because of padding.
    
    See https://gustedt.wordpress.com/2011/03/14/flexible-array-member/

diff --git a/include/miniobj.h b/include/miniobj.h
index 8cb9e293e..ecb341f49 100644
--- a/include/miniobj.h
+++ b/include/miniobj.h
@@ -38,7 +38,12 @@
 	} while (0)
 
 #define ALLOC_FLEX_OBJ(to, fld, len, type_magic)			\
-	ALLOC_OBJ_EXTRA(to, (len) * sizeof *((to)->fld), (type_magic))
+	do {								\
+		(to) = calloc(1, offsetof(typeof(*to), fld) +		\
+		    sizeof *(to)->fld * len);				\
+		if ((to) != NULL)					\
+			(to)->magic = (type_magic);			\
+	} while (0)
 
 #define FREE_OBJ(to)							\
 	do {								\


More information about the varnish-commit mailing list