Skip to content

Commit 31dba2c

Browse files
committed
Add the same fix to ra-data-local-forage
1 parent 2cf1449 commit 31dba2c

File tree

1 file changed

+12
-0
lines changed
  • packages/ra-data-local-forage/src

1 file changed

+12
-0
lines changed

packages/ra-data-local-forage/src/index.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ export default (params?: LocalForageDataProviderParams): DataProvider => {
166166
resource: string,
167167
params: UpdateParams<any>
168168
) => {
169+
checkResource(resource);
169170
await initialize();
170171
if (!data) {
171172
throw new Error('The dataProvider is not initialized.');
@@ -185,6 +186,7 @@ export default (params?: LocalForageDataProviderParams): DataProvider => {
185186
return baseDataProvider.update<RecordType>(resource, params);
186187
},
187188
updateMany: async (resource: string, params: UpdateManyParams<any>) => {
189+
checkResource(resource);
188190
await initialize();
189191
if (!baseDataProvider) {
190192
throw new Error('The dataProvider is not initialized.');
@@ -209,6 +211,7 @@ export default (params?: LocalForageDataProviderParams): DataProvider => {
209211
resource: string,
210212
params: CreateParams<any>
211213
) => {
214+
checkResource(resource);
212215
await initialize();
213216
if (!baseDataProvider) {
214217
throw new Error('The dataProvider is not initialized.');
@@ -232,6 +235,7 @@ export default (params?: LocalForageDataProviderParams): DataProvider => {
232235
resource: string,
233236
params: DeleteParams<RecordType>
234237
) => {
238+
checkResource(resource);
235239
await initialize();
236240
if (!baseDataProvider) {
237241
throw new Error('The dataProvider is not initialized.');
@@ -247,6 +251,7 @@ export default (params?: LocalForageDataProviderParams): DataProvider => {
247251
return baseDataProvider.delete<RecordType>(resource, params);
248252
},
249253
deleteMany: async (resource: string, params: DeleteManyParams<any>) => {
254+
checkResource(resource);
250255
await initialize();
251256
if (!baseDataProvider) {
252257
throw new Error('The dataProvider is not initialized.');
@@ -269,6 +274,13 @@ export default (params?: LocalForageDataProviderParams): DataProvider => {
269274
};
270275
};
271276

277+
const checkResource = resource => {
278+
if (['__proto__', 'constructor', 'prototype'].includes(resource)) {
279+
// protection against prototype pollution
280+
throw new Error(`Invalid resource key: ${resource}`);
281+
}
282+
};
283+
272284
export interface LocalForageDataProviderParams {
273285
defaultData?: any;
274286
prefixLocalForageKey?: string;

0 commit comments

Comments
 (0)