@@ -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} )
0 commit comments