From eb320815859895dc937914e3cbcd43c1fac6e597 Mon Sep 17 00:00:00 2001 From: ilkin-overleaf <100852799+ilkin-overleaf@users.noreply.github.com> Date: Tue, 28 Feb 2023 11:17:02 +0200 Subject: [PATCH] Merge pull request #11974 from overleaf/jk-catch-errors-in-rename-file [web] add logging to catch an error in renameEntity GitOrigin-RevId: 74a942e87150a4fa94f7b1b46732de3df8b36389 --- .../Project/ProjectEntityUpdateHandler.js | 13 +++++++ .../ProjectEntityUpdateHandlerTests.js | 37 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/services/web/app/src/Features/Project/ProjectEntityUpdateHandler.js b/services/web/app/src/Features/Project/ProjectEntityUpdateHandler.js index bfe9c0b29d..a0a0eb9a6b 100644 --- a/services/web/app/src/Features/Project/ProjectEntityUpdateHandler.js +++ b/services/web/app/src/Features/Project/ProjectEntityUpdateHandler.js @@ -1302,6 +1302,19 @@ const ProjectEntityUpdateHandler = { source, callback ) { + if (!newName || typeof newName !== 'string') { + const err = new OError('invalid newName value', { + value: newName, + type: typeof newName, + projectId, + entityId, + entityType, + userId, + source, + }) + logger.error({ err }, 'Invalid newName passed to renameEntity') + return callback(err) + } if (!SafePath.isCleanFilename(newName)) { return callback(new Errors.InvalidNameError('invalid element name')) } diff --git a/services/web/test/unit/src/Project/ProjectEntityUpdateHandlerTests.js b/services/web/test/unit/src/Project/ProjectEntityUpdateHandlerTests.js index cf719c60c3..6d03521f11 100644 --- a/services/web/test/unit/src/Project/ProjectEntityUpdateHandlerTests.js +++ b/services/web/test/unit/src/Project/ProjectEntityUpdateHandlerTests.js @@ -1913,6 +1913,43 @@ describe('ProjectEntityUpdateHandler', function () { this.callback.calledWithMatch(errorMatcher).should.equal(true) }) }) + + describe('renaming an entity with a non-string value', function () { + beforeEach(function () { + this.project_name = 'project name' + this.startPath = '/folder/a.tex' + this.endPath = '/folder/b.tex' + this.rev = 2 + this.changes = { newDocs: ['old-doc'], newFiles: ['old-file'] } + this.newDocName = ['hello'] + this.ProjectEntityMongoUpdateHandler.renameEntity.yields( + null, + this.project, + this.startPath, + this.endPath, + this.rev, + this.changes + ) + + this.ProjectEntityUpdateHandler.renameEntity( + projectId, + docId, + 'doc', + this.newDocName, + userId, + this.source, + this.callback + ) + }) + + it('returns an error', function () { + const errorMatcher = sinon.match.instanceOf(Error) + this.callback.calledWithMatch(errorMatcher).should.equal(true) + expect( + this.ProjectEntityMongoUpdateHandler.renameEntity.called + ).to.equal(false) + }) + }) }) describe('resyncProjectHistory', function () {