From 517862be35559a9f12dd424dd75a1a833d4648e0 Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Mon, 23 Dec 2019 14:16:45 +0100 Subject: [PATCH] broadband-modem: plug memleak if mm_parse_csim_response() fails The GError would be leaking. --- src/mm-broadband-modem.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index e88be07c..cba9e31a 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -1508,6 +1508,7 @@ csim_ready (MMBaseModem *self, LoadUnlockRetriesContext *ctx; const gchar *response; GError *error = NULL; + gint val; ctx = g_task_get_task_data (task); @@ -1516,19 +1517,22 @@ csim_ready (MMBaseModem *self, mm_dbg ("Couldn't load retry count for lock '%s': %s", mm_modem_lock_get_string (unlock_retries_map[ctx->i].lock), error->message); - g_error_free (error); - } else { - gint val; - - val = mm_parse_csim_response (response, &error); - if (val < 0) { - mm_warn ("Parse error in step %d: %s.", ctx->i, error->message); - mm_dbg ("Couldn't parse retry count value for lock '%s'", - mm_modem_lock_get_string (unlock_retries_map[ctx->i].lock)); - } else - mm_unlock_retries_set (ctx->retries, unlock_retries_map[ctx->i].lock, val); + goto next; } + val = mm_parse_csim_response (response, &error); + if (val < 0) { + mm_dbg ("Couldn't parse retry count value for lock '%s': %s", + mm_modem_lock_get_string (unlock_retries_map[ctx->i].lock), + error->message); + goto next; + } + + mm_unlock_retries_set (ctx->retries, unlock_retries_map[ctx->i].lock, val); + +next: + g_clear_error (&error); + /* Go to next lock value */ ctx->i++; load_unlock_retries_context_step (task);