diff --git a/packages/ra-core/src/util/escapePath.spec.ts b/packages/ra-core/src/util/escapePath.spec.ts new file mode 100644 index 00000000000..9b00e27f94c --- /dev/null +++ b/packages/ra-core/src/util/escapePath.spec.ts @@ -0,0 +1,13 @@ +import expect from 'expect'; + +import escapePath from './escapePath'; + +describe('escapePath', () => { + it('escapes parentheses', () => { + expect(escapePath('/foo(bar)')).toEqual('/foo\\(bar\\)'); + }); + + it('escapes backslashes before escaping parentheses', () => { + expect(escapePath('/foo\\(bar)')).toEqual('/foo\\\\\\(bar\\)'); + }); +}); diff --git a/packages/ra-core/src/util/escapePath.ts b/packages/ra-core/src/util/escapePath.ts index 26ebaa63746..8c5d09278eb 100644 --- a/packages/ra-core/src/util/escapePath.ts +++ b/packages/ra-core/src/util/escapePath.ts @@ -7,4 +7,4 @@ * * escapePath('/foo(bar)') => 'foo\(bar\)' */ -export default url => url.replace(/(\(|\))/g, '\\$1'); +export default url => url.replace(/\\/g, '\\\\').replace(/[()]/g, '\\$&');