From b6874e30aa3c833c061207f475ec933564d9b020 Mon Sep 17 00:00:00 2001 From: Nic Polumeyv <162764842+Nic-Polumeyv@users.noreply.github.com> Date: Sat, 1 Aug 2026 16:19:31 -0400 Subject: [PATCH] validate matchers against own properties only --- .changeset/eleven-cases-guard.md | 5 +++++ packages/kit/src/utils/params.js | 2 +- packages/kit/src/utils/params.spec.js | 7 +++++++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 .changeset/eleven-cases-guard.md diff --git a/.changeset/eleven-cases-guard.md b/.changeset/eleven-cases-guard.md new file mode 100644 index 000000000000..0b070264ee9a --- /dev/null +++ b/.changeset/eleven-cases-guard.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: don't treat `Object.prototype` members as param matchers during validation diff --git a/packages/kit/src/utils/params.js b/packages/kit/src/utils/params.js index 70832b288c83..c7a6d740f8fd 100644 --- a/packages/kit/src/utils/params.js +++ b/packages/kit/src/utils/params.js @@ -25,7 +25,7 @@ export function collect_matcher_names(routes) { */ export function validate_param_matchers(params, names, file) { for (const name of names) { - if (!(name in params)) { + if (!Object.hasOwn(params, name)) { throw new Error(`No matcher found for parameter '${name}'${file ? ` in ${file}` : ''}`); } } diff --git a/packages/kit/src/utils/params.spec.js b/packages/kit/src/utils/params.spec.js index 5a6120b3f073..6a7c9fdf6a55 100644 --- a/packages/kit/src/utils/params.spec.js +++ b/packages/kit/src/utils/params.spec.js @@ -23,6 +23,13 @@ test('validate_param_matchers throws for unknown matchers', () => { ); }); +test('validate_param_matchers ignores inherited properties', () => { + assert.throws( + () => validate_param_matchers({}, new Set(['toString']), 'params.js'), + /No matcher found for parameter 'toString'/ + ); +}); + test('load_and_validate_params loads and validates params', async () => { const params = await load_and_validate_params({ routes: [