Skip to content

Commit 06de550

Browse files
authored
fix: use hasOwn check when deep-setting object properties (#15127)
1 parent 096e433 commit 06de550

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

.changeset/solid-apples-clap.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/kit': patch
3+
---
4+
5+
fix: use hasOwn check when deep-setting object properties

packages/kit/src/runtime/form-utils.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,7 @@ export function deep_set(object, keys, value) {
441441
check_prototype_pollution(key);
442442

443443
const is_array = /^\d+$/.test(keys[i + 1]);
444-
const exists = key in current;
444+
const exists = Object.hasOwn(current, key);
445445
const inner = current[key];
446446

447447
if (exists && is_array !== Array.isArray(inner)) {

packages/kit/src/runtime/form-utils.spec.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { beforeAll, describe, expect, test } from 'vitest';
22
import {
33
BINARY_FORM_CONTENT_TYPE,
44
convert_formdata,
5+
deep_set,
56
deserialize_binary_form,
67
serialize_binary_form,
78
split_path
@@ -243,3 +244,16 @@ describe('binary form serializer', () => {
243244
expect(res.data).toEqual({ a: 1 });
244245
});
245246
});
247+
248+
describe('deep_set', () => {
249+
test('always creates own property', () => {
250+
const target = {};
251+
252+
deep_set(target, ['toString', 'property'], 'hello');
253+
254+
// @ts-ignore
255+
expect(target.toString.property).toBe('hello');
256+
// @ts-ignore
257+
expect(Object.prototype.toString.property).toBeUndefined();
258+
});
259+
});

0 commit comments

Comments
 (0)