When returning an enum value via g_task_return_int, some code assumes
the enum value is always non-negative and thus considers that a negative
value implies an error. This assumption could be invalidated if a
negative value is later added to the enum. To make it less error prone
to future changes, this patch modifies the code to check if the GError
argument to g_task_propagate_error is populated instead.
---
 src/mm-broadband-bearer.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/mm-broadband-bearer.c b/src/mm-broadband-bearer.c
index ac701733..696f9bfd 100644
--- a/src/mm-broadband-bearer.c
+++ b/src/mm-broadband-bearer.c
@@ -1995,10 +1995,15 @@ load_connection_status_finish (MMBaseBearer  *bearer,
                                GAsyncResult  *res,
                                GError       **error)
 {
+    GError *inner_error = NULL;
     gssize value;
 
-    value = g_task_propagate_int (G_TASK (res), error);
-    return (value < 0 ? MM_BEARER_CONNECTION_STATUS_UNKNOWN : 
(MMBearerConnectionStatus) value);
+    value = g_task_propagate_int (G_TASK (res), &inner_error);
+    if (inner_error) {
+        g_propagate_error (error, inner_error);
+        return MM_BEARER_CONNECTION_STATUS_UNKNOWN;
+    }
+    return (MMBearerConnectionStatus)value;
 }
 
 static void
-- 
2.13.2.725.g09c95d1e9-goog

_______________________________________________
ModemManager-devel mailing list
ModemManager-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/modemmanager-devel

Reply via email to