qulogic/gplugin

Fix double-setting of GError's.
feature/fix-gerror-crash
2019-01-27, Elliott Sales de Andrade
6bda2c96ca4b
Fix double-setting of GError's.

When we call a function that may set the GError, setting it right after is just
a failsafe default value. We should not attempt to overwrite the existing
error.

Partial revert of 3e9310ee57d7.
--- a/gplugin/gplugin-loader.c Sun Jan 27 05:48:39 2019 -0500
+++ b/gplugin/gplugin-loader.c Sun Jan 27 05:54:04 2019 -0500
@@ -103,7 +103,7 @@
if(klass && klass->load)
ret = klass->load(loader, plugin, error);
- if (!ret) {
+ if (!ret && error && *error == NULL) {
g_set_error(error, GPLUGIN_DOMAIN, 0,
"Failed to load plugin : unknown");
}
@@ -138,7 +138,7 @@
if(klass && klass->unload)
ret = klass->unload(loader, plugin, error);
- if (!ret) {
+ if (!ret && error && *error == NULL) {
g_set_error(error, GPLUGIN_DOMAIN, 0,
"Failed to unload plugin : unknown");
}
--- a/gplugin/gplugin-native-loader.c Sun Jan 27 05:48:39 2019 -0500
+++ b/gplugin/gplugin-native-loader.c Sun Jan 27 05:54:04 2019 -0500
@@ -146,9 +146,11 @@
if(module)
g_module_close(module);
- g_set_error_literal(error, GPLUGIN_DOMAIN, 0,
- _("the query function did not return a "
- "GPluginPluginInfo instance"));
+ if (error && *error == NULL) {
+ g_set_error_literal(error, GPLUGIN_DOMAIN, 0,
+ _("the query function did not return a "
+ "GPluginPluginInfo instance"));
+ }
return NULL;
}
@@ -163,9 +165,11 @@
if(!GPLUGIN_IS_PLUGIN_INFO(info)) {
g_module_close(module);
- g_set_error_literal(error, GPLUGIN_DOMAIN, 0,
- _("the query function did not return a "
- "GPluginPluginInfo instance"));
+ if (error && *error == NULL) {
+ g_set_error_literal(error, GPLUGIN_DOMAIN, 0,
+ _("the query function did not return a "
+ "GPluginPluginInfo instance"));
+ }
return NULL;
}
@@ -229,7 +233,8 @@
/* get and call the function */
g_object_get(G_OBJECT(plugin), "load-func", &func, NULL);
if(!func(GPLUGIN_NATIVE_PLUGIN(plugin), error)) {
- g_set_error_literal(error, GPLUGIN_DOMAIN, 0, _("unknown failure"));
+ if (error && *error == NULL)
+ g_set_error_literal(error, GPLUGIN_DOMAIN, 0, _("unknown failure"));
return FALSE;
}
@@ -261,7 +266,8 @@
/* now call the function */
if(!func(GPLUGIN_NATIVE_PLUGIN(plugin), error)) {
- g_set_error_literal(error, GPLUGIN_DOMAIN, 0, _("unknown failure"));
+ if (error && *error == NULL)
+ g_set_error_literal(error, GPLUGIN_DOMAIN, 0, _("unknown failure"));
return FALSE;
}