diff --git a/js/modules/privacy.js b/js/modules/privacy.js index 00cd7a9d6..b3cf2cef2 100644 --- a/js/modules/privacy.js +++ b/js/modules/privacy.js @@ -38,12 +38,14 @@ exports._redactPath = (filePath) => { exports._pathToRegExp = (filePath) => { try { const pathWithNormalizedSlashes = filePath.replace(/\//g, '\\'); + const pathWithEscapedSlashes = filePath.replace(/\\/g, '\\\\'); const urlEncodedPath = encodeURI(filePath); // Safe `String::replaceAll`: // https://github.com/lodash/lodash/issues/1084#issuecomment-86698786 const patternString = [ filePath, pathWithNormalizedSlashes, + pathWithEscapedSlashes, urlEncodedPath, ].map(escapeRegExp).join('|'); return new RegExp(patternString, 'g'); diff --git a/test/modules/privacy_test.js b/test/modules/privacy_test.js index 46bb8c5f1..3131bdde5 100644 --- a/test/modules/privacy_test.js +++ b/test/modules/privacy_test.js @@ -105,5 +105,24 @@ describe('Privacy', () => { 'path2 [REDACTED]\\js\\background.js.'; assert.equal(actual, expected); }); + + it('should redact stack traces with escaped backslashes', () => { + const testPath = 'C:\\Users\\Meow\\AppData\\Local\\Programs\\signal-desktop-beta'; + const modifiedTestPath = + 'C:\\\\Users\\\\Meow\\\\AppData\\\\Local\\\\Programs\\\\signal-desktop-beta'; + const text = 'This is a log line with sensitive information:\n' + + `path1 ${testPath}\\main.js\n` + + 'phone1 +12223334455 ipsum\n' + + 'group1 group(123456789) doloret\n' + + `path2 ${modifiedTestPath}\\js\\background.js.`; + + const actual = Privacy._redactPath(testPath)(text); + const expected = 'This is a log line with sensitive information:\n' + + 'path1 [REDACTED]\\main.js\n' + + 'phone1 +12223334455 ipsum\n' + + 'group1 group(123456789) doloret\n' + + 'path2 [REDACTED]\\js\\background.js.'; + assert.equal(actual, expected); + }); }); });