From 8f240bb5d157f1957cc26a20ed8c3483eed2d6b6 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Tue, 12 Feb 2013 15:41:41 +0100 Subject: Make loading of config.xml more strict Explicitly check for unknown elements & attributes when loading config.xml. Change-Id: I31e6997b2f7d504e15dd24df2f4ae4005209168f Reviewed-by: Niels Weber Reviewed-by: Karsten Heimrich --- .../auto/installer/settings/data/empty_config.xml | 3 + tests/auto/installer/settings/data/full_config.xml | 171 +++++++++++++++++++++ .../installer/settings/data/minimal_config.xml | 5 + .../settings/data/unknown_element_config.xml | 6 + tests/auto/installer/settings/settings.qrc | 6 +- tests/auto/installer/settings/tst_settings.cpp | 43 +++++- 6 files changed, 229 insertions(+), 5 deletions(-) create mode 100644 tests/auto/installer/settings/data/empty_config.xml create mode 100644 tests/auto/installer/settings/data/full_config.xml create mode 100644 tests/auto/installer/settings/data/minimal_config.xml create mode 100644 tests/auto/installer/settings/data/unknown_element_config.xml (limited to 'tests/auto/installer/settings') diff --git a/tests/auto/installer/settings/data/empty_config.xml b/tests/auto/installer/settings/data/empty_config.xml new file mode 100644 index 000000000..66c9879a5 --- /dev/null +++ b/tests/auto/installer/settings/data/empty_config.xml @@ -0,0 +1,3 @@ + + + diff --git a/tests/auto/installer/settings/data/full_config.xml b/tests/auto/installer/settings/data/full_config.xml new file mode 100644 index 000000000..2b11c0166 --- /dev/null +++ b/tests/auto/installer/settings/data/full_config.xml @@ -0,0 +1,171 @@ + + + + + + Your application + 1.2.3 + Your application Installer + Your vendor + Your vendor + + @homeDir@InstallationDirectory + @rootDir@InstallationDirectory + + icon + logo + logo_small + watermark + background + + Super App + + uninstaller + uninstaller.ini + true + + myapp + Launch MyApp + + certificate1 + certificate2 + + true + true + true + false + components.xml + + + + http://www.yourcompany.com/packages + 1 + user + password + + + + + + + <Default>Introduction Page Title</Default> + + + Introduction Page Sub Title + + Introduction Page Message Label + + + + <Default>License Agreement Page Title</Default> + + + License Agreement Page Sub Title + + Accept License Radio Button + Reject License Radio Button + + + + <Default>Component Selection Page Title</Default> + <Updater>Component Selection Page Sub Title Updater</Updater> + <Installer>Component Selection Page Sub Title Installer</Installer> + <Uninstaller>Component Selection Page Sub Title Uninstaller</Uninstaller> + <PackageManager>Component Selection Page Sub Title Package Manager</PackageManager> + + + Component Selection Page Sub Title + Component Selection Page Sub Title Updater + Component Selection Page Sub Title Installer + Component Selection Page Sub Title Uninstaller + Component Selection Page Sub Title Package Manager + + Default Button + Select All Button + Deselect All Button + Component Size Label + + + + <Default>Target Directory Page Title</Default> + + + Target Directory Page Sub Title + + Target Directory Page Message Label + Browse Directory Button + Empty Target Directory Message + Forbidden Target Directory Message + Overwrite Target Directory Message + Select Installation Folder Caption + + + + <Default>Start Menu Directory Page Title</Default> + + + Start Menu Directory Page Sub Title + + + + + <Default>Ready for Installation Page Title</Default> + <Updater>Ready for Installation Page Title Updater</Updater> + <Installer>Ready for Installation Page Title Installer</Installer> + <Uninstaller>Ready for Installation Page Title Uninstaller</Uninstaller> + <PackageManager>Ready for Installation Page Title Package Manager</PackageManager> + + + Ready for Installation Page Sub Title + Ready for Installation Page Sub Title Updater + Ready for Installation Page Sub Title Installer + Ready for Installation Page Sub Title Uninstaller + Ready for Installation Page Sub Title Package Manager + + Ready for Installation Page Message Label + + + + <Default>Perform Installation Page Title</Default> + <Updater>Perform Installation Page Title Updater</Updater> + <Installer>Perform Installation Page Title Installer</Installer> + <Uninstaller>Perform Installation Page Title Uninstaller</Uninstaller> + <PackageManager>Perform Installation Page Title Package Manager</PackageManager> + + + Perform Installation Page Sub Title + Perform Installation Page Sub Title Updater + Perform Installation Page Sub Title Installer + Perform Installation Page Sub Title Uninstaller + Perform Installation Page Sub Title Package Manager + + + + + <Default>Finished Page Title</Default> + <Updater>Finished Page Title Updater</Updater> + <Installer>Finished Page Title Installer</Installer> + <Uninstaller>Finished Page Title Uninstaller</Uninstaller> + <PackageManager>Finished Page Title Package Manager</PackageManager> + + + Finished Page Sub Title + Finished Page Sub Title Updater + Finished Page Sub Title Installer + Finished Page Sub Title Uninstaller + Finished Page Sub Title Package Manager + + Finished Page Message Label + + + + <Default>Restart Page Title</Default> + + + Restart Page Sub Title + + + + diff --git a/tests/auto/installer/settings/data/minimal_config.xml b/tests/auto/installer/settings/data/minimal_config.xml new file mode 100644 index 000000000..1b4e1d25d --- /dev/null +++ b/tests/auto/installer/settings/data/minimal_config.xml @@ -0,0 +1,5 @@ + + + Your application + 1.2.3 + diff --git a/tests/auto/installer/settings/data/unknown_element_config.xml b/tests/auto/installer/settings/data/unknown_element_config.xml new file mode 100644 index 000000000..0d97564e6 --- /dev/null +++ b/tests/auto/installer/settings/data/unknown_element_config.xml @@ -0,0 +1,6 @@ + + + Your application + 1.2.3 + + diff --git a/tests/auto/installer/settings/settings.qrc b/tests/auto/installer/settings/settings.qrc index eaa92b93e..de130ea10 100644 --- a/tests/auto/installer/settings/settings.qrc +++ b/tests/auto/installer/settings/settings.qrc @@ -1,6 +1,10 @@ - data/tutorial_config.xml + data/empty_config.xml + data/full_config.xml data/malformed_config.xml + data/minimal_config.xml + data/tutorial_config.xml + data/unknown_element_config.xml diff --git a/tests/auto/installer/settings/tst_settings.cpp b/tests/auto/installer/settings/tst_settings.cpp index 2fcd6bf3f..9fbbd8292 100644 --- a/tests/auto/installer/settings/tst_settings.cpp +++ b/tests/auto/installer/settings/tst_settings.cpp @@ -12,12 +12,15 @@ class tst_Settings : public QObject Q_OBJECT private slots: - void loadConfig(); + void loadTutorialConfig(); + void loadFullConfig(); + void loadEmptyConfig(); void loadNotExistingConfig(); void loadMalformedConfig(); + void loadUnknownElementConfig(); }; -void tst_Settings::loadConfig() +void tst_Settings::loadTutorialConfig() { Settings settings = Settings::fromFileAndPrefix(":///data/tutorial_config.xml", ":///data"); @@ -62,12 +65,31 @@ void tst_Settings::loadConfig() QCOMPARE(settings.httpProxy(), QNetworkProxy()); } +void tst_Settings::loadFullConfig() +{ + Settings settings = + Settings::fromFileAndPrefix(":///data/full_config.xml", ":///data"); +} + +void tst_Settings::loadEmptyConfig() +{ + try { + Settings::fromFileAndPrefix(":/data/empty_config.xml", ":/data"); + } catch (const Error &error) { + QCOMPARE(error.message(), QLatin1String("Missing or empty tag in :/data/empty_config.xml.")); + return; + } + QFAIL("No exception thrown"); +} + void tst_Settings::loadNotExistingConfig() { try { Settings::fromFileAndPrefix(":/data/inexisting_config.xml", ":/data"); } catch (const Error &error) { - QVERIFY(error.message() == ("Could not open settings file :/data/inexisting_config.xml for reading: Unknown error")); + QCOMPARE(error.message(), QLatin1String("Could not open settings file " + ":/data/inexisting_config.xml for reading: " + "Unknown error")); return; } QFAIL("No exception thrown"); @@ -78,7 +100,20 @@ void tst_Settings::loadMalformedConfig() try { Settings::fromFileAndPrefix(":/data/malformed_config.xml", ":/data"); } catch (const Error &error) { - QVERIFY(error.message().startsWith("Xml parse error")); + QCOMPARE(error.message(), QLatin1String("Error in :/data/malformed_config.xml, line 9, column 0: " + "Premature end of document.")); + return; + } + QFAIL("No exception thrown"); +} + +void tst_Settings::loadUnknownElementConfig() +{ + try { + Settings::fromFileAndPrefix(":/data/unknown_element_config.xml", ":/data"); + } catch (const Error &error) { + QCOMPARE(error.message(), QLatin1String("Error in :/data/unknown_element_config.xml, line 5, " + "column 13: Unexpected element 'unknown'.")); return; } QFAIL("No exception thrown"); -- cgit v1.2.3