diff options
author | Maciej S. Szmigiero <mail@maciej.szmigiero.name> | 2022-06-26 00:36:29 +0200 |
---|---|---|
committer | Maciej S. Szmigiero <mail@maciej.szmigiero.name> | 2022-06-26 01:22:18 +0200 |
commit | edfb6cdc7a69371de609b11b0b90037de12d8c63 (patch) | |
tree | 0b1557b7e29fda288cf956da04dc7721f0fccd01 | |
parent | 984df9a0e278c279f0663c2a5bd05e15fe56ca99 (diff) |
mozilla: Fix small bugs in gclue_mozilla_parse_response()
- Make sure to not leak a JsonParser when this function returns early,
- Check "message" JSON member for existence before fetching it (it's an
error to try fetching a non-existing member),
- Don't use MLS return error codes as GIO error codes - they don't match.
-rw-r--r-- | src/gclue-mozilla.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/gclue-mozilla.c b/src/gclue-mozilla.c index 8e602c1..b0e5b29 100644 --- a/src/gclue-mozilla.c +++ b/src/gclue-mozilla.c @@ -252,17 +252,19 @@ static gboolean parse_server_error (JsonObject *object, GError **error) { JsonObject *error_obj; - int code; const char *message; if (!json_object_has_member (object, "error")) return FALSE; error_obj = json_object_get_object_member (object, "error"); - code = json_object_get_int_member (error_obj, "code"); - message = json_object_get_string_member (error_obj, "message"); + if (json_object_has_member (error_obj, "message")) { + message = json_object_get_string_member (error_obj, "message"); + } else { + message = "Unknown error"; + } - g_set_error_literal (error, G_IO_ERROR, code, message); + g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, message); return TRUE; } @@ -271,7 +273,7 @@ GClueLocation * gclue_mozilla_parse_response (const char *json, GError **error) { - JsonParser *parser; + g_autoptr(JsonParser) parser = NULL; JsonNode *node; JsonObject *object, *loc_object; GClueLocation *location; @@ -296,8 +298,6 @@ gclue_mozilla_parse_response (const char *json, location = gclue_location_new (latitude, longitude, accuracy); - g_object_unref (parser); - return location; } |