From 69a98355ce64aeff0fded1916e8af9c9357c509c Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Thu, 13 Feb 2020 13:43:28 +0000 Subject: [PATCH] Merge pull request #2599 from overleaf/bg-fix-safepath-check fix safepath check GitOrigin-RevId: b5bb636d2bd958ab142fa94683ad9cf58369a77d --- services/web/app/src/Features/Project/SafePath.js | 4 ++-- services/web/frontend/js/ide/directives/SafePath.js | 4 ++-- services/web/test/unit/src/Project/SafePathTests.js | 12 ++++++++++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/services/web/app/src/Features/Project/SafePath.js b/services/web/app/src/Features/Project/SafePath.js index 90fb75e538..be6c2dd652 100644 --- a/services/web/app/src/Features/Project/SafePath.js +++ b/services/web/app/src/Features/Project/SafePath.js @@ -89,8 +89,8 @@ prototype\ isCleanFilename(filename) { return ( SafePath.isAllowedLength(filename) && - !BADCHAR_RX.test(filename) && - !BADFILE_RX.test(filename) + !filename.match(BADCHAR_RX) && + !filename.match(BADFILE_RX) ) }, diff --git a/services/web/frontend/js/ide/directives/SafePath.js b/services/web/frontend/js/ide/directives/SafePath.js index 5b36408a7f..e9f1a16e6f 100644 --- a/services/web/frontend/js/ide/directives/SafePath.js +++ b/services/web/frontend/js/ide/directives/SafePath.js @@ -86,8 +86,8 @@ prototype\ isCleanFilename(filename) { return ( SafePath.isAllowedLength(filename) && - !BADCHAR_RX.test(filename) && - !BADFILE_RX.test(filename) + !filename.match(BADCHAR_RX) && + !filename.match(BADFILE_RX) ) }, diff --git a/services/web/test/unit/src/Project/SafePathTests.js b/services/web/test/unit/src/Project/SafePathTests.js index 6d192cfc17..9129dd3b1a 100644 --- a/services/web/test/unit/src/Project/SafePathTests.js +++ b/services/web/test/unit/src/Project/SafePathTests.js @@ -112,6 +112,18 @@ describe('SafePath', function() { const result = this.SafePath.isCleanFilename('foo\\bar') return result.should.equal(false) }) + + it('should reject filenames regardless of order (/g) for bad characters', function() { + const result1 = this.SafePath.isCleanFilename('foo*bar.tex') // * is not allowed + const result2 = this.SafePath.isCleanFilename('*foobar.tex') // bad char location is before previous match + return result1.should.equal(false) && result2.should.equal(false) + }) + + it('should reject filenames regardless of order (/g) for bad filenames', function() { + const result1 = this.SafePath.isCleanFilename('foo ') // trailing space + const result2 = this.SafePath.isCleanFilename(' foobar') // leading space, match location is before previous match + return result1.should.equal(false) && result2.should.equal(false) + }) }) describe('isCleanPath', function() {