From 7798b3d3e010367be64d975f2337b8019454ccf0 Mon Sep 17 00:00:00 2001 From: kh1 Date: Mon, 16 Sep 2013 15:24:10 +0200 Subject: Fix broken random name generation for temporary directories. Task-number: QTIFW-354 The function was correctly calculating the initial part of the name using QTemporaryFile, though the appended "meta" was not checked and could result in duplicated names later on. Change-Id: I00eeebbb01fbfcc5a626e4bdfe04013f8e520ed5 Reviewed-by: Niels Weber Reviewed-by: Tim Jenssen --- src/libs/installer/fileutils.cpp | 20 ++++++++++++-------- src/libs/installer/fileutils.h | 2 +- src/libs/installer/getrepositorymetainfojob.cpp | 2 +- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/libs/installer/fileutils.cpp b/src/libs/installer/fileutils.cpp index 1fd5bf35c..6f8c44622 100644 --- a/src/libs/installer/fileutils.cpp +++ b/src/libs/installer/fileutils.cpp @@ -453,14 +453,18 @@ QString QInstaller::generateTemporaryFileName(const QString &templ) return f.fileName(); } -QString QInstaller::createTemporaryDirectory(const QString &templ) -{ - const QString t = QDir::tempPath() + QLatin1String("/") + templ + QLatin1String("XXXXXX"); - QTemporaryFile f(t); - if (!f.open()) - throw Error(QObject::tr("Could not create temporary folder for template %1: %2").arg(t, f.errorString())); - const QString path = f.fileName() + QLatin1String("meta"); - qDebug() << "\nCreating meta data directory at" << path; +QString QInstaller::createTemporaryDirectory(const QString &templateName) +{ + QString path = QDir::tempPath() + QLatin1String("/") + templateName + QLatin1String("XXXXXX"); + { + QTemporaryFile f(path); + if (!f.open()) { + throw Error(QObject::tr("Could not create temporary directory %1: %2").arg(f.fileName(), + f.errorString())); + } + path = f.fileName(); + } + qDebug() << "\nCreating temporary directory at:" << path; QInstaller::mkpath(path); return path; diff --git a/src/libs/installer/fileutils.h b/src/libs/installer/fileutils.h index 9bbcec72a..c22aa36b6 100644 --- a/src/libs/installer/fileutils.h +++ b/src/libs/installer/fileutils.h @@ -108,7 +108,7 @@ private: Creates a temporary directory @throws QInstaller::Error if creating the temporary directory fails */ - QString INSTALLER_EXPORT createTemporaryDirectory(const QString &templ=QString()); + QString INSTALLER_EXPORT createTemporaryDirectory(const QString &templateName = QString()); QString INSTALLER_EXPORT generateTemporaryFileName(const QString &templ=QString()); diff --git a/src/libs/installer/getrepositorymetainfojob.cpp b/src/libs/installer/getrepositorymetainfojob.cpp index 1c8d07525..c0fca0b13 100644 --- a/src/libs/installer/getrepositorymetainfojob.cpp +++ b/src/libs/installer/getrepositorymetainfojob.cpp @@ -245,7 +245,7 @@ void GetRepositoryMetaInfoJob::updatesXmlDownloadFinished() Q_ASSERT(QFile::exists(fn)); try { - m_temporaryDirectory = createTemporaryDirectory(QLatin1String("remoterepo")); + m_temporaryDirectory = createTemporaryDirectory(QLatin1String("remoterepo-")); m_tempDirDeleter.add(m_temporaryDirectory); } catch (const QInstaller::Error& e) { finished(QInstaller::ExtractionError, e.message()); -- cgit v1.2.3