From 85827e2232d65920ddc2d6323d9dea8f9de0cf89 Mon Sep 17 00:00:00 2001 From: Michael Forney Date: Tue, 26 Mar 2024 11:04:42 -0700 Subject: [PATCH] check that data alignment is in range and a power of two Otherwise, the alignment gets truncated to fit in char, so `align 256` is handled as no alignment requirement. --- parse.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/parse.c b/parse.c index 738ec5b..3717a6f 100644 --- a/parse.c +++ b/parse.c @@ -1091,6 +1091,9 @@ parsedat(void cb(Dat *), Lnk *lnk) if (t == Talign) { if (nextnl() != Tint) err("alignment expected"); + if (tokval.num <= 0 || tokval.num > CHAR_MAX + || (tokval.num & (tokval.num-1)) != 0) + err("invalid alignment"); lnk->align = tokval.num; t = nextnl(); }