From 89ae45f6ec52dfb0ecda82744f838b7b3d2b8c9b Mon Sep 17 00:00:00 2001 From: Michael Kret <88898367+michael-radency@users.noreply.github.com> Date: Tue, 9 Jun 2026 06:13:51 +0300 Subject: [PATCH] fix(Read/Write Files from Disk Node): Escape square brackets in file path selector (#31706) --- .../Files/ReadWriteFile/helpers/utils.ts | 4 ++-- .../Files/ReadWriteFile/test/utils.test.ts | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/packages/nodes-base/nodes/Files/ReadWriteFile/helpers/utils.ts b/packages/nodes-base/nodes/Files/ReadWriteFile/helpers/utils.ts index cfab860e4b8..5f099ab2eb1 100644 --- a/packages/nodes-base/nodes/Files/ReadWriteFile/helpers/utils.ts +++ b/packages/nodes-base/nodes/Files/ReadWriteFile/helpers/utils.ts @@ -35,8 +35,8 @@ export function errorMapper( } export function escapeSpecialCharacters(str: string) { - // Escape parentheses - str = str.replace(/[()]/g, '\\$&'); + // Escape parentheses and square brackets (glob metacharacters) + str = str.replace(/[()[\]]/g, '\\$&'); return str; } diff --git a/packages/nodes-base/nodes/Files/ReadWriteFile/test/utils.test.ts b/packages/nodes-base/nodes/Files/ReadWriteFile/test/utils.test.ts index 5360d79a15e..c7e265e35d0 100644 --- a/packages/nodes-base/nodes/Files/ReadWriteFile/test/utils.test.ts +++ b/packages/nodes-base/nodes/Files/ReadWriteFile/test/utils.test.ts @@ -13,6 +13,12 @@ describe('Read/Write Files from Disk', () => { const expectedOutput = '/home/michael/Desktop/test.txt'; expect(escapeSpecialCharacters(input)).toBe(expectedOutput); }); + + it('should escape square brackets in a string', () => { + const input = '/home/michael/Desktop/[release]/test.txt'; + const expectedOutput = '/home/michael/Desktop/\\[release\\]/test.txt'; + expect(escapeSpecialCharacters(input)).toBe(expectedOutput); + }); }); describe('normalizeFileSelector', () => { @@ -39,5 +45,19 @@ describe('Read/Write Files from Disk', () => { const expectedOutput = 'C:/Users/michael/Desktop/test.txt'; expect(normalizeFileSelector(input)).toBe(expectedOutput); }); + + it('should escape square brackets in Windows file selector', () => { + const input = + 'C:\\Users\\Administrator\\Desktop\\Manga\\Complete\\VTuber Legend [J-Novel Club]\\list.txt'; + const expectedOutput = + 'C:/Users/Administrator/Desktop/Manga/Complete/VTuber Legend \\[J-Novel Club\\]/list.txt'; + expect(normalizeFileSelector(input)).toBe(expectedOutput); + }); + + it('should escape square brackets in UNIX file selector', () => { + const input = '/home/user/VTuber Legend [J-Novel Club]/list.txt'; + const expectedOutput = '/home/user/VTuber Legend \\[J-Novel Club\\]/list.txt'; + expect(normalizeFileSelector(input)).toBe(expectedOutput); + }); }); });