瀏覽代碼

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.
Michael Forney 1 年之前
父節點
當前提交
85827e2232
共有 1 個文件被更改,包括 3 次插入0 次删除
  1. 3 0
      parse.c

+ 3 - 0
parse.c

@@ -1091,6 +1091,9 @@ parsedat(void cb(Dat *), Lnk *lnk)
 	if (t == Talign) {
 	if (t == Talign) {
 		if (nextnl() != Tint)
 		if (nextnl() != Tint)
 			err("alignment expected");
 			err("alignment expected");
+		if (tokval.num <= 0 || tokval.num > CHAR_MAX
+		|| (tokval.num & (tokval.num-1)) != 0)
+			err("invalid alignment");
 		lnk->align = tokval.num;
 		lnk->align = tokval.num;
 		t = nextnl();
 		t = nextnl();
 	}
 	}