From adcce66dd7b676e4cc7bf71b63588e746f51dc14 Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Fri, 20 Oct 2017 17:47:54 +0200 Subject: [PATCH] broadband-modem-qmi: avoid NULL success return in firmware_load_current Instead of assuming that NULL is a valid return, make sure we return an error instead. This also makes it sure that if the GTask gets cancelled, the result we set is always a valid GObject, so that the g_object_unref passed as GDestroyNotify can be safely called always. Not a big deal anyway, as the GTask cannot be currently cancelled. --- src/mm-broadband-modem-qmi.c | 11 +++++++---- src/mm-iface-modem-firmware.c | 14 +++++++++----- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c index e3b37bd5..21ab8698 100644 --- a/src/mm-broadband-modem-qmi.c +++ b/src/mm-broadband-modem-qmi.c @@ -10383,10 +10383,13 @@ firmware_load_current (MMIfaceModemFirmware *_self, GTask *task; task = g_task_new (self, NULL, callback, user_data); - g_task_return_pointer ( - task, - self->priv->current_firmware ? g_object_ref (self->priv->current_firmware) : NULL, - g_object_unref); + if (self->priv->current_firmware) + g_task_return_pointer (task, + g_object_ref (self->priv->current_firmware), + g_object_unref); + else + g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_NOT_FOUND, + "current firmware unknown"); g_object_unref (task); } diff --git a/src/mm-iface-modem-firmware.c b/src/mm-iface-modem-firmware.c index da106b00..0646f376 100644 --- a/src/mm-iface-modem-firmware.c +++ b/src/mm-iface-modem-firmware.c @@ -68,12 +68,16 @@ load_current_ready (MMIfaceModemFirmware *self, GList *l; GError *error = NULL; - /* reported current may be NULL and we don't treat it as error */ ctx->current = MM_IFACE_MODEM_FIRMWARE_GET_INTERFACE (self)->load_current_finish (self, res, &error); - if (error) { - g_dbus_method_invocation_take_error (ctx->invocation, error); - handle_list_context_free (ctx); - return; + if (!ctx->current) { + /* Not found isn't fatal */ + if (!g_error_matches (error, MM_CORE_ERROR, MM_CORE_ERROR_NOT_FOUND)) { + g_dbus_method_invocation_take_error (ctx->invocation, error); + handle_list_context_free (ctx); + return; + } + mm_dbg ("Couldn't load current firmware image: %s", error->message); + g_clear_error (&error); } /* Build array of dicts */