Skip to content

Commit 1dba06f

Browse files
authored
Merge commit from fork
1 parent 819ed2e commit 1dba06f

2 files changed

Lines changed: 36 additions & 0 deletions

File tree

packages/client/src/adapters/standard/rpc-json-serializer.test.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,4 +157,32 @@ describe('standardRPCJsonSerializer: custom serializers', () => {
157157
})
158158
}).toThrow('Custom serializer type must be unique.')
159159
})
160+
161+
it.each(['nonExist', '__proto__', 'constructor'])('should throw when accessing non-existent path during deserialization: %s', (segment) => {
162+
const serializer = new StandardRPCJsonSerializer()
163+
164+
expect(
165+
() => serializer.deserialize({ a: 1 }, [[1, segment]]),
166+
).toThrow(`Security error: accessing non-existent path during deserialization. Path segment: ${segment}`)
167+
168+
expect(
169+
() => serializer.deserialize({ a: 1 }, [[1, 'a', segment]]),
170+
).toThrow(`Security error: accessing non-existent path during deserialization. Path segment: ${segment}`)
171+
172+
expect(
173+
() => serializer.deserialize({ a: 1 }, [[1, segment, 'role']]),
174+
).toThrow(`Security error: accessing non-existent path during deserialization. Path segment: ${segment}`)
175+
176+
expect(
177+
() => serializer.deserialize({ a: 1 }, [], [[segment]], () => new Blob([])),
178+
).toThrow(`Security error: accessing non-existent path during deserialization. Path segment: ${segment}`)
179+
180+
expect(
181+
() => serializer.deserialize({ a: 1 }, [], [['a', segment]], () => new Blob([])),
182+
).toThrow(`Security error: accessing non-existent path during deserialization. Path segment: ${segment}`)
183+
184+
expect(
185+
() => serializer.deserialize({ a: 1 }, [], [[segment, 'role']], () => new Blob([])),
186+
).toThrow(`Security error: accessing non-existent path during deserialization. Path segment: ${segment}`)
187+
})
160188
})

packages/client/src/adapters/standard/rpc-json-serializer.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,10 @@ export class StandardRPCJsonSerializer {
145145
segments.forEach((segment) => {
146146
currentRef = currentRef[preSegment]
147147
preSegment = segment
148+
149+
if (!Object.hasOwn(currentRef, preSegment)) {
150+
throw new Error(`Security error: accessing non-existent path during deserialization. Path segment: ${preSegment}`)
151+
}
148152
})
149153

150154
currentRef[preSegment] = getBlob(i)
@@ -160,6 +164,10 @@ export class StandardRPCJsonSerializer {
160164
for (let i = 1; i < item.length; i++) {
161165
currentRef = currentRef[preSegment]
162166
preSegment = item[i]!
167+
168+
if (!Object.hasOwn(currentRef, preSegment)) {
169+
throw new Error(`Security error: accessing non-existent path during deserialization. Path segment: ${preSegment}`)
170+
}
163171
}
164172

165173
for (const custom of this.customSerializers) {

0 commit comments

Comments
 (0)