From f1e717e6a10801442d1cd2926ed4a35acbb0a7d5 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 27 May 2020 01:04:10 +0200 Subject: [PATCH] Check that the backup folder is not inside the project path to be backed up --- nw/core/project.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/nw/core/project.py b/nw/core/project.py index 4516d1aa..63c79659 100644 --- a/nw/core/project.py +++ b/nw/core/project.py @@ -526,25 +526,25 @@ class NWProject(): self.theParent.makeAlert(( "Cannot backup project because no backup path is set. " "Please set a valid backup location in Tools > Preferences." - ), nwAlert.WARN) + ), nwAlert.ERROR) return False if self.projName is None or self.projName == "": self.theParent.makeAlert(( "Cannot backup project because no project name is set. " "Please set a Working Title in Project > Project Settings." - ), nwAlert.WARN) + ), nwAlert.ERROR) return False if not path.isdir(self.mainConf.backupPath): self.theParent.makeAlert(( "Cannot backup project because the backup path does not exist. " "Please set a valid backup location in Tools > Preferences." - ), nwAlert.WARN) + ), nwAlert.ERROR) return False cleanName = self.getFileSafeProjectName() - baseDir = path.join(self.mainConf.backupPath, cleanName) + baseDir = path.abspath(path.join(self.mainConf.backupPath, cleanName)) if not path.isdir(baseDir): try: mkdir(baseDir) @@ -556,16 +556,25 @@ class NWProject(): ) return False + backPath = path.abspath(self.projPath) + if path.commonpath([backPath, baseDir]) == backPath: + self.theParent.makeAlert(( + "Cannot backup project because the backup path is within the " + "project folder to be backed up. Please choose a different " + "backup path in Tools > Preferences." + ), nwAlert.ERROR) + return False + archName = "Backup from %s" % formatTimeStamp(time(), fileSafe=True) baseName = path.join(baseDir, archName) try: self._clearLockFile() - make_archive(baseName, "zip", self.projPath, ".") + make_archive(baseName, "zip", backPath, ".") self._writeLockFile() if doNotify: self.theParent.makeAlert( - "Backup archive file written to: '%s.zip'" % path.join(cleanName, archName), + "Backup archive file written to: %s.zip" % path.join(cleanName, archName), nwAlert.INFO ) else: