From a5083741c45791e058b450874509b6e7b63ef15f Mon Sep 17 00:00:00 2001 From: Anibal Svarcas Date: Tue, 31 Mar 2026 10:36:26 -0300 Subject: [PATCH] Escape backslashes in escapePath --- packages/ra-core/src/util/escapePath.spec.ts | 13 +++++++++++++ packages/ra-core/src/util/escapePath.ts | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/ra-core/src/util/escapePath.spec.ts 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, '\\$&');