Author :
Ran Benita
Date :
2025-03-10 21:58:05
Hash :9953d9f0 Message :xkbcomp/ast-build: fix possible UB in expr AST node allocations (#659)
The expression AST constructors all return `ExprDef *`. `ExprDef` is a
union of all expr types. As a memory optimization, instead of allocating
`sizeof(ExprDef)`, we only allocate the size of the actual type (e.g.
`sizeof(ExprBinary)`) which is sometimes smaller than `sizeof(ExprDef)`.
This is probably undefined behavior, and gcc (with optimization turned
on) complains about it, for example:
src/xkbcomp/ast-build.c:69:23: warning: array subscript ‘ExprDef[0]’ is partly outside array bounds of ‘unsigned char[24]’ [-Warray-bounds=]
Since it doesn't save that much memory, drop this optimization.
Fix #292.
Signed-off-by: Ran Benita <ran@unusedvar.com>