From c1bf4e99db34ab123a7da0cc6892aa5523ed406d Mon Sep 17 00:00:00 2001 From: Fabrice Bellard Date: Sat, 5 Apr 2025 16:19:25 +0200 Subject: [PATCH] workaround for overflow test in JS_GetOwnPropertyNamesInternal() (#111) --- quickjs.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/quickjs.c b/quickjs.c index 8af4d21..ec81c2c 100644 --- a/quickjs.c +++ b/quickjs.c @@ -7936,7 +7936,21 @@ static int __exception JS_GetOwnPropertyNamesInternal(JSContext *ctx, /* fill them */ - atom_count = num_keys_count + str_keys_count + sym_keys_count + exotic_keys_count; + atom_count = num_keys_count + str_keys_count; + if (atom_count < str_keys_count) + goto add_overflow; + atom_count += sym_keys_count; + if (atom_count < sym_keys_count) + goto add_overflow; + atom_count += exotic_keys_count; + if (atom_count < exotic_keys_count || atom_count > INT32_MAX) { + add_overflow: + JS_ThrowOutOfMemory(ctx); + js_free_prop_enum(ctx, tab_exotic, exotic_count); + return -1; + } + /* XXX: need generic way to test for js_malloc(ctx, a * b) overflow */ + /* avoid allocating 0 bytes */ tab_atom = js_malloc(ctx, sizeof(tab_atom[0]) * max_int(atom_count, 1)); if (!tab_atom) {