diff options
author | kh1 <karsten.heimrich@nokia.com> | 2012-03-27 13:55:25 +0200 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@nokia.com> | 2012-03-27 14:57:48 +0200 |
commit | 564ef626886496ea5e6685f0fc4f96c283245123 (patch) | |
tree | 032ca464485a74b7e3b1e0e52d905fdaf6d69f6e | |
parent | 5ba980c17e07ee6078a5b419642bf7f0599a1e24 (diff) |
let repogen validate install scripts
Change-Id: I4d08e4c33c3d967d4cf45ef5cdb5f3c3e066cf67
Reviewed-by: Niels Weber <niels.2.weber@nokia.com>
Reviewed-by: Karsten Heimrich <karsten.heimrich@nokia.com>
-rw-r--r-- | src/libs/installer/qinstallerglobal.h | 2 | ||||
-rw-r--r-- | tools/archivegen/archivegen.pro | 1 | ||||
-rw-r--r-- | tools/binarycreator/binarycreator.pro | 3 | ||||
-rw-r--r-- | tools/common/repositorygen.cpp | 15 | ||||
-rw-r--r-- | tools/repogen/repogen.pro | 1 |
5 files changed, 17 insertions, 5 deletions
diff --git a/src/libs/installer/qinstallerglobal.h b/src/libs/installer/qinstallerglobal.h index 8df909e76..843ed5598 100644 --- a/src/libs/installer/qinstallerglobal.h +++ b/src/libs/installer/qinstallerglobal.h @@ -80,7 +80,7 @@ typedef QList<QInstaller::Package*> PackagesList; typedef KDUpdater::PackageInfo LocalPackage; typedef QHash<QString, LocalPackage> LocalPackagesHash; -QString uncaughtExceptionString(QScriptEngine *scriptEngine, const QString &context = QString()); +QString INSTALLER_EXPORT uncaughtExceptionString(QScriptEngine *scriptEngine, const QString &context = QString()); QScriptValue qInstallerComponentByName(QScriptContext *context, QScriptEngine *engine); QScriptValue qDesktopServicesOpenUrl(QScriptContext *context, QScriptEngine *engine); diff --git a/tools/archivegen/archivegen.pro b/tools/archivegen/archivegen.pro index 9d778ee98..ff9fdbd59 100644 --- a/tools/archivegen/archivegen.pro +++ b/tools/archivegen/archivegen.pro @@ -6,6 +6,7 @@ INCLUDEPATH += . .. ../common include(../../installerfw.pri) QT -= gui +QT += script LIBS += -linstaller CONFIG += console diff --git a/tools/binarycreator/binarycreator.pro b/tools/binarycreator/binarycreator.pro index b6f164b4d..706318ebc 100644 --- a/tools/binarycreator/binarycreator.pro +++ b/tools/binarycreator/binarycreator.pro @@ -6,6 +6,7 @@ INCLUDEPATH += . .. rcc ../common include(../../installerfw.pri) QT -= gui +QT += script LIBS += -linstaller CONFIG += console @@ -17,4 +18,4 @@ SOURCES = binarycreator.cpp \ rccmain.cpp \ repositorygen.cpp HEADERS = rcc.h -RESOURCES += binarycreator.qrc
\ No newline at end of file +RESOURCES += binarycreator.qrc diff --git a/tools/common/repositorygen.cpp b/tools/common/repositorygen.cpp index cd5996b76..68fe09b28 100644 --- a/tools/common/repositorygen.cpp +++ b/tools/common/repositorygen.cpp @@ -35,12 +35,15 @@ #include <errors.h> #include <lib7z_facade.h> #include <settings.h> +#include <qinstallerglobal.h> #include <kdupdater.h> #include <QtCore/QCryptographicHash> #include <QtCore/QDirIterator> +#include <QtScript/QScriptEngine> + #include <QtXml/QDomDocument> #include <iostream> @@ -240,13 +243,20 @@ void QInstallerTools::generateMetaDataDirectory(const QString &outDir, const QSt // copy scripts const QString script = package.firstChildElement(QLatin1String("Script")).text(); if (!script.isEmpty()) { + const QString fromLocation(QString::fromLatin1("%1/meta/%2").arg(it->directory, script)); - QFile scriptFile(script); QString scriptContent; + QFile scriptFile(fromLocation); if (scriptFile.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream in(&scriptFile); scriptContent = in.readAll(); } + static QScriptEngine testScriptEngine; + testScriptEngine.evaluate(scriptContent, scriptFile.fileName()); + if (testScriptEngine.hasUncaughtException()) { + throw QInstaller::Error(QObject::tr("Exception while loading the component script: %1") + .arg(QInstaller::uncaughtExceptionString(&testScriptEngine, scriptFile.fileName()))); + } // added the xml tag RequiresAdminRights to the xml if somewhere addElevatedOperation is used if (scriptContent.contains(QLatin1String("addElevatedOperation"))) { @@ -256,9 +266,8 @@ void QInstallerTools::generateMetaDataDirectory(const QString &outDir, const QSt } qDebug() << "\tCopying associated script" << script << "into the meta package..."; - QString fromLocation(QString::fromLatin1("%1/meta/%2").arg(it->directory, script)); QString toLocation(QString::fromLatin1("%1/%2/%3").arg(metapath, it->name, script)); - if (!QFile::copy(fromLocation, toLocation)) { + if (!scriptFile.copy(toLocation)) { qDebug() << "failed!"; throw QInstaller::Error(QObject::tr("Could not copy the script %1 to its target location %2.") .arg(fromLocation, toLocation)); diff --git a/tools/repogen/repogen.pro b/tools/repogen/repogen.pro index e9652b25a..5b6f0d03a 100644 --- a/tools/repogen/repogen.pro +++ b/tools/repogen/repogen.pro @@ -6,6 +6,7 @@ INCLUDEPATH += . .. ../common include(../../installerfw.pri) QT -= gui +QT += script LIBS += -linstaller CONFIG += console |