commit 9fab8459e141b2e2b037f214530bd19a788450ca
parent 0fdbd4e6781a8b7759bfc9432793e2815517ec4f
Author: William Casarin <jb55@jb55.com>
Date:   Thu, 15 Jul 2021 10:29:22 -0700
make sure to limit custom sections
Signed-off-by: William Casarin <jb55@jb55.com>
Diffstat:
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/wasm.c b/src/wasm.c
@@ -1337,6 +1337,9 @@ static int parse_custom_section(struct wasm_parser *p, u32 size,
 	u8 *start;
 	start = p->cur.p;
 
+	if (p->module.custom_sections + 1 > MAX_CUSTOM_SECTIONS)
+		return parse_err(p, "more than 32 custom sections!");
+
 	if (!parse_name(p, §ion->name))
 		return parse_err(p, "name");
 
diff --git a/src/wasm.h b/src/wasm.h
@@ -7,6 +7,7 @@ static const unsigned char WASM_MAGIC[] = {0,'a','s','m'};
 #define WASM_VERSION 0x01
 #define MAX_U32_LEB128_BYTES 5
 #define MAX_U64_LEB128_BYTES 10
+#define MAX_CUSTOM_SECTIONS 32
 
 #define FUNC_TYPE_TAG 0x60
 
@@ -420,7 +421,7 @@ struct startsec {
 struct module {
 	unsigned int parsed;
 	unsigned int custom_sections;
-	struct customsec custom_section[32];
+	struct customsec custom_section[MAX_CUSTOM_SECTIONS];
 	struct typesec type_section;
 	struct funcsec func_section;
 	struct importsec import_section;