summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkh1 <karsten.heimrich@nokia.com>2012-02-01 11:41:44 +0100
committerKarsten Heimrich <karsten.heimrich@nokia.com>2012-02-01 12:23:27 +0100
commitd395509d73e488dc7643fb761fbd2b6e87d3c642 (patch)
treed338b1c2039d27b02798eb938bad37587d7e926b
parentffdae5744c6738e69f615a39afd38282e07d6b90 (diff)
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.qdoc4
-rw-r--r--installerbuilder/installerbase/installerbasecommons.cpp17
-rw-r--r--installerbuilder/libinstaller/constants.h1
-rw-r--r--installerbuilder/libinstaller/settings.cpp5
-rw-r--r--installerbuilder/libinstaller/settings.h2
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;