diff options
author | kh1 <karsten.heimrich@nokia.com> | 2012-02-01 11:41:44 +0100 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@nokia.com> | 2012-02-01 12:23:27 +0100 |
commit | d395509d73e488dc7643fb761fbd2b6e87d3c642 (patch) | |
tree | d338b1c2039d27b02798eb938bad37587d7e926b | |
parent | ffdae5744c6738e69f615a39afd38282e07d6b90 (diff) |
Fix QTIFW-68.
Do not allow no ascii characters in path or install dir.
Change-Id: If32d24ccecabdf783a3cb4cf7aceaf41c441f205
Reviewed-by: Alexander Lenhardt <alexander.lenhardt@nokia.com>
-rw-r--r-- | doc/installerfw.qdoc | 4 | ||||
-rw-r--r-- | installerbuilder/installerbase/installerbasecommons.cpp | 17 | ||||
-rw-r--r-- | installerbuilder/libinstaller/constants.h | 1 | ||||
-rw-r--r-- | installerbuilder/libinstaller/settings.cpp | 5 | ||||
-rw-r--r-- | installerbuilder/libinstaller/settings.h | 2 |
5 files changed, 25 insertions, 4 deletions
diff --git a/doc/installerfw.qdoc b/doc/installerfw.qdoc index 95d680d4d..0f9308496 100644 --- a/doc/installerfw.qdoc +++ b/doc/installerfw.qdoc @@ -85,6 +85,7 @@ <RunProgram></RunProgram> <RunProgramDescription></RunProgramDescription> <StartMenuDir>Some Application Entry Dir</StartMenuDir> + <AllowNonAsciiCharacters>true</AllowNonAsciiCharacters> <PublicKey> -----BEGIN PUBLIC KEY----- @@ -133,7 +134,8 @@ \o \bold{ PrivateKey} RSA private key to be used to sign components \o \bold{ TargetDir} Predefined target directory for installation \o \bold{ RemoteRepositories} List of remote repositories - \o \bold{ UninstallerName} File name of the generated uninstaller. Defaults to "uninstall". The platform specific executable suffixs is appended. + \o \bold{ UninstallerName} File name of the generated uninstaller. Defaults to "uninstall". The platform specific executable suffixes is appended. + \o \bold{ AllowNonAsciiCharacters } Set this to true if the installation path can contain non ASCII characters. \endlist It is suggested that you place all files that are referred inside the diff --git a/installerbuilder/installerbase/installerbasecommons.cpp b/installerbuilder/installerbase/installerbasecommons.cpp index f28e75612..fc7d3ffcf 100644 --- a/installerbuilder/installerbase/installerbasecommons.cpp +++ b/installerbuilder/installerbase/installerbasecommons.cpp @@ -396,12 +396,23 @@ bool TargetDirectoryPageImpl::validatePage() if (!QVariant(remove).toBool()) return true; - const QDir dir(targetDir()); + const QString targetDir = this->targetDir(); + if (!packageManagerCore()->settings().allowNoneAsciiCharacters()) { + for (int i = 0; i < targetDir.length(); ++i) { + if (targetDir.at(i).unicode() & 0xff80) { + return failWithError(QLatin1String("NonAsciiTarget"), tr("The path or installation directory " + "contains non ASCII characters. This is currently not supported! Please choose a different " + "path or installation directory.")); + } + } + } + + const QDir dir(targetDir); // the directory exists and is empty... if (dir.exists() && dir.entryList(QDir::AllEntries | QDir::NoDotAndDotDot).isEmpty()) return true; - const QFileInfo fi(targetDir()); + const QFileInfo fi(targetDir); if (fi.isDir()) { if (dir == QDir::root() || dir == QDir::home()) { return failWithError(QLatin1String("ForbiddenTargetDirectory"), tr("As the install directory " @@ -416,7 +427,7 @@ bool TargetDirectoryPageImpl::validatePage() fileName += QLatin1String(".exe"); #endif - QFileInfo fi2(targetDir() + QDir::separator() + fileName); + QFileInfo fi2(targetDir + QDir::separator() + fileName); if (fi2.exists()) { return askQuestion(QLatin1String("OverwriteTargetDirectory"), TargetDirectoryPageImpl::tr("The folder you selected exists already and contains an " diff --git a/installerbuilder/libinstaller/constants.h b/installerbuilder/libinstaller/constants.h index f62872679..47e0ffe72 100644 --- a/installerbuilder/libinstaller/constants.h +++ b/installerbuilder/libinstaller/constants.h @@ -69,6 +69,7 @@ static const QLatin1String scRemoveTargetDir("RemoveTargetDir"); static const QLatin1String scMaintenanceTitle("MaintenanceTitle"); static const QLatin1String scRunProgramDescription("RunProgramDescription"); static const QLatin1String scTargetConfigurationFile("TargetConfigurationFile"); +static const QLatin1String scAllowNonAsciiCharacters("AllowNonAsciiCharacters"); } diff --git a/installerbuilder/libinstaller/settings.cpp b/installerbuilder/libinstaller/settings.cpp index 4936d1a58..e328d7a34 100644 --- a/installerbuilder/libinstaller/settings.cpp +++ b/installerbuilder/libinstaller/settings.cpp @@ -366,6 +366,11 @@ QStringList Settings::certificateFiles() const return d->m_data.value(scSigningCertificate).toStringList(); } +bool Settings::allowNoneAsciiCharacters() const +{ + return d->m_data.value(scAllowNonAsciiCharacters).toBool(); +} + QByteArray Settings::privateKey() const { return d->m_data.value(scPrivateKey).toByteArray(); diff --git a/installerbuilder/libinstaller/settings.h b/installerbuilder/libinstaller/settings.h index 6840d1bf8..84f726adb 100644 --- a/installerbuilder/libinstaller/settings.h +++ b/installerbuilder/libinstaller/settings.h @@ -109,6 +109,8 @@ public: void addUserRepositories(const QSet<Repository> &repositories); QStringList certificateFiles() const; + bool allowNoneAsciiCharacters() const; + QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const; QVariantList values(const QString &key, const QVariantList &defaultValue = QVariantList()) const; |