export JS_FreePropertyEnum()

This commit is contained in:
Fabrice Bellard 2025-05-20 17:59:48 +02:00
parent 9bce51eefd
commit 2f167bbeeb
3 changed files with 25 additions and 25 deletions

View File

@ -2938,9 +2938,7 @@ static char **build_envp(JSContext *ctx, JSValueConst obj)
JS_FreeCString(ctx, str); JS_FreeCString(ctx, str);
} }
done: done:
for(i = 0; i < len; i++) JS_FreePropertyEnum(ctx, tab, len);
JS_FreeAtom(ctx, tab[i].atom);
js_free(ctx, tab);
return envp; return envp;
fail: fail:
if (envp) { if (envp) {

View File

@ -7875,7 +7875,7 @@ static int num_keys_cmp(const void *p1, const void *p2, void *opaque)
return 1; return 1;
} }
static void js_free_prop_enum(JSContext *ctx, JSPropertyEnum *tab, uint32_t len) void JS_FreePropertyEnum(JSContext *ctx, JSPropertyEnum *tab, uint32_t len)
{ {
uint32_t i; uint32_t i;
if (tab) { if (tab) {
@ -7969,7 +7969,7 @@ static int __exception JS_GetOwnPropertyNamesInternal(JSContext *ctx,
/* set the "is_enumerable" field if necessary */ /* set the "is_enumerable" field if necessary */
res = JS_GetOwnPropertyInternal(ctx, &desc, p, atom); res = JS_GetOwnPropertyInternal(ctx, &desc, p, atom);
if (res < 0) { if (res < 0) {
js_free_prop_enum(ctx, tab_exotic, exotic_count); JS_FreePropertyEnum(ctx, tab_exotic, exotic_count);
return -1; return -1;
} }
if (res) { if (res) {
@ -8000,7 +8000,7 @@ static int __exception JS_GetOwnPropertyNamesInternal(JSContext *ctx,
if (atom_count < exotic_keys_count || atom_count > INT32_MAX) { if (atom_count < exotic_keys_count || atom_count > INT32_MAX) {
add_overflow: add_overflow:
JS_ThrowOutOfMemory(ctx); JS_ThrowOutOfMemory(ctx);
js_free_prop_enum(ctx, tab_exotic, exotic_count); JS_FreePropertyEnum(ctx, tab_exotic, exotic_count);
return -1; return -1;
} }
/* XXX: need generic way to test for js_malloc(ctx, a * b) overflow */ /* XXX: need generic way to test for js_malloc(ctx, a * b) overflow */
@ -8008,7 +8008,7 @@ static int __exception JS_GetOwnPropertyNamesInternal(JSContext *ctx,
/* avoid allocating 0 bytes */ /* avoid allocating 0 bytes */
tab_atom = js_malloc(ctx, sizeof(tab_atom[0]) * max_int(atom_count, 1)); tab_atom = js_malloc(ctx, sizeof(tab_atom[0]) * max_int(atom_count, 1));
if (!tab_atom) { if (!tab_atom) {
js_free_prop_enum(ctx, tab_exotic, exotic_count); JS_FreePropertyEnum(ctx, tab_exotic, exotic_count);
return -1; return -1;
} }
@ -8053,7 +8053,7 @@ static int __exception JS_GetOwnPropertyNamesInternal(JSContext *ctx,
for(i = 0; i < len; i++) { for(i = 0; i < len; i++) {
tab_atom[num_index].atom = __JS_AtomFromUInt32(i); tab_atom[num_index].atom = __JS_AtomFromUInt32(i);
if (tab_atom[num_index].atom == JS_ATOM_NULL) { if (tab_atom[num_index].atom == JS_ATOM_NULL) {
js_free_prop_enum(ctx, tab_atom, num_index); JS_FreePropertyEnum(ctx, tab_atom, num_index);
return -1; return -1;
} }
tab_atom[num_index].is_enumerable = TRUE; tab_atom[num_index].is_enumerable = TRUE;
@ -15553,7 +15553,7 @@ static __exception int js_for_in_prepare_prototype_chain_enum(JSContext *ctx,
JS_FreeValue(ctx, obj1); JS_FreeValue(ctx, obj1);
goto fail; goto fail;
} }
js_free_prop_enum(ctx, tab_atom, tab_atom_count); JS_FreePropertyEnum(ctx, tab_atom, tab_atom_count);
if (tab_atom_count != 0) { if (tab_atom_count != 0) {
JS_FreeValue(ctx, obj1); JS_FreeValue(ctx, obj1);
goto slow_path; goto slow_path;
@ -15637,7 +15637,7 @@ static __exception int js_for_in_next(JSContext *ctx, JSValue *sp)
JS_GPN_STRING_MASK | JS_GPN_SET_ENUM)) { JS_GPN_STRING_MASK | JS_GPN_SET_ENUM)) {
return -1; return -1;
} }
js_free_prop_enum(ctx, it->tab_atom, it->atom_count); JS_FreePropertyEnum(ctx, it->tab_atom, it->atom_count);
it->tab_atom = tab_atom; it->tab_atom = tab_atom;
it->atom_count = tab_atom_count; it->atom_count = tab_atom_count;
it->idx = 0; it->idx = 0;
@ -16160,10 +16160,10 @@ static __exception int JS_CopyDataProperties(JSContext *ctx,
if (ret < 0) if (ret < 0)
goto exception; goto exception;
} }
js_free_prop_enum(ctx, tab_atom, tab_atom_count); JS_FreePropertyEnum(ctx, tab_atom, tab_atom_count);
return 0; return 0;
exception: exception:
js_free_prop_enum(ctx, tab_atom, tab_atom_count); JS_FreePropertyEnum(ctx, tab_atom, tab_atom_count);
return -1; return -1;
} }
@ -38093,7 +38093,7 @@ static __exception int JS_ObjectDefineProperties(JSContext *ctx,
ret = 0; ret = 0;
exception: exception:
js_free_prop_enum(ctx, atoms, len); JS_FreePropertyEnum(ctx, atoms, len);
JS_FreeValue(ctx, props); JS_FreeValue(ctx, props);
JS_FreeValue(ctx, desc); JS_FreeValue(ctx, desc);
return ret; return ret;
@ -38364,12 +38364,12 @@ static JSValue js_object_getOwnPropertyDescriptors(JSContext *ctx, JSValueConst
goto exception; goto exception;
} }
} }
js_free_prop_enum(ctx, props, len); JS_FreePropertyEnum(ctx, props, len);
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);
return r; return r;
exception: exception:
js_free_prop_enum(ctx, props, len); JS_FreePropertyEnum(ctx, props, len);
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);
JS_FreeValue(ctx, r); JS_FreeValue(ctx, r);
return JS_EXCEPTION; return JS_EXCEPTION;
@ -38449,7 +38449,7 @@ exception:
JS_FreeValue(ctx, r); JS_FreeValue(ctx, r);
r = JS_EXCEPTION; r = JS_EXCEPTION;
done: done:
js_free_prop_enum(ctx, atoms, len); JS_FreePropertyEnum(ctx, atoms, len);
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);
return r; return r;
} }
@ -38710,11 +38710,11 @@ static JSValue js_object_seal(JSContext *ctx, JSValueConst this_val,
JS_UNDEFINED, JS_UNDEFINED, desc_flags) < 0) JS_UNDEFINED, JS_UNDEFINED, desc_flags) < 0)
goto exception; goto exception;
} }
js_free_prop_enum(ctx, props, len); JS_FreePropertyEnum(ctx, props, len);
return JS_DupValue(ctx, obj); return JS_DupValue(ctx, obj);
exception: exception:
js_free_prop_enum(ctx, props, len); JS_FreePropertyEnum(ctx, props, len);
return JS_EXCEPTION; return JS_EXCEPTION;
} }
@ -38756,11 +38756,11 @@ static JSValue js_object_isSealed(JSContext *ctx, JSValueConst this_val,
return JS_EXCEPTION; return JS_EXCEPTION;
res ^= 1; res ^= 1;
done: done:
js_free_prop_enum(ctx, props, len); JS_FreePropertyEnum(ctx, props, len);
return JS_NewBool(ctx, res); return JS_NewBool(ctx, res);
exception: exception:
js_free_prop_enum(ctx, props, len); JS_FreePropertyEnum(ctx, props, len);
return JS_EXCEPTION; return JS_EXCEPTION;
} }
@ -46089,7 +46089,7 @@ static JSValue internalize_json_property(JSContext *ctx, JSValueConst holder,
goto fail; goto fail;
} }
} }
js_free_prop_enum(ctx, atoms, len); JS_FreePropertyEnum(ctx, atoms, len);
atoms = NULL; atoms = NULL;
name_val = JS_AtomToValue(ctx, name); name_val = JS_AtomToValue(ctx, name);
if (JS_IsException(name_val)) if (JS_IsException(name_val))
@ -46101,7 +46101,7 @@ static JSValue internalize_json_property(JSContext *ctx, JSValueConst holder,
JS_FreeValue(ctx, val); JS_FreeValue(ctx, val);
return res; return res;
fail: fail:
js_free_prop_enum(ctx, atoms, len); JS_FreePropertyEnum(ctx, atoms, len);
JS_FreeValue(ctx, val); JS_FreeValue(ctx, val);
return JS_EXCEPTION; return JS_EXCEPTION;
} }
@ -47475,14 +47475,14 @@ static int js_proxy_get_own_property_names(JSContext *ctx,
} }
} }
js_free_prop_enum(ctx, tab2, len2); JS_FreePropertyEnum(ctx, tab2, len2);
JS_FreeValue(ctx, prop_array); JS_FreeValue(ctx, prop_array);
*ptab = tab; *ptab = tab;
*plen = len; *plen = len;
return 0; return 0;
fail: fail:
js_free_prop_enum(ctx, tab2, len2); JS_FreePropertyEnum(ctx, tab2, len2);
js_free_prop_enum(ctx, tab, len); JS_FreePropertyEnum(ctx, tab, len);
JS_FreeValue(ctx, prop_array); JS_FreeValue(ctx, prop_array);
return -1; return -1;
} }

View File

@ -805,6 +805,8 @@ JSValue JS_GetPrototype(JSContext *ctx, JSValueConst val);
int JS_GetOwnPropertyNames(JSContext *ctx, JSPropertyEnum **ptab, int JS_GetOwnPropertyNames(JSContext *ctx, JSPropertyEnum **ptab,
uint32_t *plen, JSValueConst obj, int flags); uint32_t *plen, JSValueConst obj, int flags);
void JS_FreePropertyEnum(JSContext *ctx, JSPropertyEnum *tab,
uint32_t len);
int JS_GetOwnProperty(JSContext *ctx, JSPropertyDescriptor *desc, int JS_GetOwnProperty(JSContext *ctx, JSPropertyDescriptor *desc,
JSValueConst obj, JSAtom prop); JSValueConst obj, JSAtom prop);