diff options
| author | Patrick Storz <eduard.braun2@gmx.de> | 2019-08-03 18:22:38 +0000 |
|---|---|---|
| committer | Patrick Storz <eduard.braun2@gmx.de> | 2019-08-31 14:50:38 +0000 |
| commit | afe17354e37f97f7e384ee61a5cb7866e8b2658c (patch) | |
| tree | 17ac5d8e727c17e3901e28f150d6e8dbe1149b03 /src/extension/system.cpp | |
| parent | Derive optiongroup options from Parameter (diff) | |
| download | inkscape-afe17354e37f97f7e384ee61a5cb7866e8b2658c.tar.gz inkscape-afe17354e37f97f7e384ee61a5cb7866e8b2658c.zip | |
Properly handle extensions without id or name
We used to fail silently, crashing later-on.
Diffstat (limited to 'src/extension/system.cpp')
| -rw-r--r-- | src/extension/system.cpp | 63 |
1 files changed, 35 insertions, 28 deletions
diff --git a/src/extension/system.cpp b/src/extension/system.cpp index 05a62884c..370e30f00 100644 --- a/src/extension/system.cpp +++ b/src/extension/system.cpp @@ -508,31 +508,38 @@ build_from_reprdoc(Inkscape::XML::Document *doc, Implementation::Implementation } Extension *module = nullptr; - switch (module_functional_type) { - case MODULE_INPUT: { - module = new Input(repr, imp); - break; - } - case MODULE_OUTPUT: { - module = new Output(repr, imp); - break; - } - case MODULE_FILTER: { - module = new Effect(repr, imp); - break; - } - case MODULE_PRINT: { - module = new Print(repr, imp); - break; - } - case MODULE_PATH_EFFECT: { - module = new PathEffect(repr, imp); - break; - } - default: { - module = new Extension(repr, imp); - break; + try { + switch (module_functional_type) { + case MODULE_INPUT: { + module = new Input(repr, imp); + break; + } + case MODULE_OUTPUT: { + module = new Output(repr, imp); + break; + } + case MODULE_FILTER: { + module = new Effect(repr, imp); + break; + } + case MODULE_PRINT: { + module = new Print(repr, imp); + break; + } + case MODULE_PATH_EFFECT: { + module = new PathEffect(repr, imp); + break; + } + default: { + g_warning("Extension of unkonw type!"); // TODO: Should not happen! Is this even useful? + module = new Extension(repr, imp); + break; + } } + } catch (const Extension::extension_no_id& e) { + g_warning("Building extension failed. Extension does not have a valid ID"); + } catch (const Extension::extension_no_name& e) { + g_warning("Building extension failed. Extension does not have a valid name"); } return module; @@ -552,10 +559,10 @@ build_from_file(gchar const *filename) Inkscape::XML::Document *doc = sp_repr_read_file(filename, INKSCAPE_EXTENSION_URI); std::string dir = Glib::path_get_dirname(filename); Extension *ext = build_from_reprdoc(doc, nullptr, &dir); - if (ext != nullptr) - Inkscape::GC::release(doc); - else + Inkscape::GC::release(doc); + if (!ext) { g_warning("Unable to create extension from definition file %s.\n", filename); + } return ext; } @@ -646,7 +653,7 @@ get_file_save_path (SPDocument *doc, FileSaveMethod method) { } break; case FILE_SAVE_METHOD_EXPORT: - /// \todo no default path set for Export? + /// \todo no default path set for Export? // defaults to g_get_home_dir() break; } |
