aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2023-12-18 11:39:55 +0100
committerTim Jenssen <tim.jenssen@qt.io>2023-12-21 12:57:24 +0000
commit0034ade5d63f8c56a181d6b4549e41a45adc3490 (patch)
treeb460fe12099bfd1449c48775563003f33cbeb336
parent671426f4a0a3f8b6dd80c3776868f0db3db4e24e (diff)
QmlDesigner: Add checks against deleting files
There were reported cases in which the documents folder was deleted. Adding checks to ensure only temporary files are deleted or single examples. Task-number: QDS-11545 Change-Id: I93257ca6a9898ea6844cbc4125daef28ea57a7e7 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r--src/plugins/qmldesigner/utils/fileextractor.cpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/plugins/qmldesigner/utils/fileextractor.cpp b/src/plugins/qmldesigner/utils/fileextractor.cpp
index 40381c5a27a..92b26e6e474 100644
--- a/src/plugins/qmldesigner/utils/fileextractor.cpp
+++ b/src/plugins/qmldesigner/utils/fileextractor.cpp
@@ -216,14 +216,16 @@ void FileExtractor::extract()
m_targetFolder = m_targetPath.toString() + "/" + m_archiveName;
// If the target directory already exists, remove it and its content
- QDir targetDir(m_targetFolder);
- if (targetDir.exists() && m_clearTargetPathContents)
- targetDir.removeRecursively();
- if (m_alwaysCreateDir) {
- // Create a new directory to generate a proper creation date
- targetDir.mkdir(m_targetFolder);
- }
+ QTC_ASSERT(!m_targetPath.isEmpty(), return );
+
+ FilePath targetFilePath = FilePath::fromUserInput(m_targetFolder);
+ if (targetFilePath.exists() && m_clearTargetPathContents)
+ targetFilePath.removeRecursively();
+
+ // Create a new directory to generate a proper creation date
+ if (m_alwaysCreateDir)
+ targetFilePath.createDir();
const auto sourceAndCommand = Unarchiver::sourceAndCommand(m_sourceFile);
QTC_ASSERT(sourceAndCommand, return);
@@ -261,6 +263,8 @@ void FileExtractor::extract()
void QmlDesigner::FileExtractor::removeTempTargetPath()
{
if (m_isTempTargetPath && m_targetPath.exists()) {
+ QTC_ASSERT(m_targetPath.toString().startsWith(QDir::tempPath()), qDebug() << m_targetPath;
+ return );
m_targetPath.removeRecursively();
m_isTempTargetPath = false;
}