From d615e239b9175bbf02b57cd65237eea476c0a650 Mon Sep 17 00:00:00 2001 From: theMackabu Date: Wed, 06 May 2026 10:21:32 +0000 Subject: [PATCH] quick little fix --- tests/test_proxy_array_flat_urlsearchparams.cjs | 34 ++++++++++++++++++++++++++++++++++ src/modules/url.c | 9 ++++++++- 2 file(s) changed, 42 insertion(s)(+), 1 deletion(s)(-) diff --git a/tests/test_proxy_array_flat_urlsearchparams.cjs b/tests/test_proxy_array_flat_urlsearchparams.cjs --- a/tests/test_proxy_array_flat_urlsearchparams.cjs +++ b/tests/test_proxy_array_flat_urlsearchparams.cjs @@ -31,6 +31,14 @@ assert(sawOuterLength, "URLSearchParams should observe outer proxy length"); assert(sawPairLength, "URLSearchParams should observe pair proxy length"); +const stringLengthParams = new URLSearchParams(new Proxy([pair], { + get(target, key, receiver) { + if (key === "length") return "1"; + return Reflect.get(target, key, receiver); + }, +})); +assert(stringLengthParams.toString() === "a=b", "URLSearchParams should convert proxy length with ToNumber"); + assertThrows( function () { new URLSearchParams(new Proxy([pair], { @@ -68,6 +76,32 @@ }, "pair value boom", "URLSearchParams should propagate pair proxy value errors" +); + +assertThrows( + function () { + new URLSearchParams(new Proxy([pair], { + get(target, key, receiver) { + if (key === "length") return NaN; + return Reflect.get(target, key, receiver); + }, + })); + }, + "finite", + "URLSearchParams should reject NaN proxy lengths" +); + +assertThrows( + function () { + new URLSearchParams(new Proxy([pair], { + get(target, key, receiver) { + if (key === "length") return { valueOf() { throw new Error("length convert boom"); } }; + return Reflect.get(target, key, receiver); + }, + })); + }, + "length convert boom", + "URLSearchParams should propagate proxy length conversion errors" ); console.log("OK"); diff --git a/src/modules/url.c b/src/modules/url.c --- a/src/modules/url.c +++ b/src/modules/url.c @@ -47,7 +47,14 @@ ant_value_t length = js_get(js, arr, "length"); if (is_err(length)) return length; if (js->thrown_exists) return mkval(T_ERR, 0); - if (vtype(length) == T_NUM) *out = (ant_offset_t)tod(length); + + double len_num = js_to_number(js, length); + if (js->thrown_exists) return mkval(T_ERR, 0); + + if (isnan(len_num) || !isfinite(len_num)) + return js_mkerr_typed(js, JS_ERR_TYPE, "URLSearchParams sequence length must be finite"); + + *out = (ant_offset_t)js_to_uint32(len_num); return js_mkundef(); } -- tangled.sh