diff --git a/steam-runtime-tools/json-utils.c b/steam-runtime-tools/json-utils.c index 6131c2f8f016392660ef4238e162d94e9317cb98..1761d59c0982dd81c02426327afbdde74857c9e2 100644 --- a/steam-runtime-tools/json-utils.c +++ b/steam-runtime-tools/json-utils.c @@ -98,17 +98,21 @@ _srt_json_object_dup_strv_member (JsonObject *json_obj, const gchar *placeholder) { JsonArray *array; + JsonNode *arr_node; guint length; gchar **ret = NULL; g_return_val_if_fail (json_obj != NULL, NULL); g_return_val_if_fail (array_member != NULL, NULL); - if (json_object_has_member (json_obj, array_member)) + arr_node = json_object_get_member (json_obj, array_member); + + if (arr_node != NULL && JSON_NODE_HOLDS_ARRAY (arr_node)) { guint j = 0; - array = json_object_get_array_member (json_obj, array_member); + array = json_node_get_array (arr_node); + if (array == NULL) return ret; diff --git a/tests/json-utils.c b/tests/json-utils.c index 2cab98b0f77fb68489dde9eb1b3f60f6b36278a3..3bc22c9c43aa5eabe784ebbc690d7ce4c25b0a86 100644 --- a/tests/json-utils.c +++ b/tests/json-utils.c @@ -66,6 +66,7 @@ test_dup_strv_member (Fixture *f, g_autoptr(JsonObject) obj = json_object_new (); g_autoptr(JsonObject) empty = json_object_new (); g_auto(GStrv) missing = NULL; + g_auto(GStrv) not_array = NULL; g_auto(GStrv) with_placeholder = NULL; g_auto(GStrv) without_placeholder = NULL; @@ -75,10 +76,14 @@ test_dup_strv_member (Fixture *f, json_array_add_string_element (arr, "four"); json_node_init_array (arr_node, arr); json_object_set_member (obj, "arr", g_steal_pointer (&arr_node)); + json_object_set_double_member (obj, "not-array", 42.0); missing = _srt_json_object_dup_strv_member (obj, "missing", NULL); g_assert_null (missing); + not_array = _srt_json_object_dup_strv_member (obj, "not-array", NULL); + g_assert_null (not_array); + with_placeholder = _srt_json_object_dup_strv_member (obj, "arr", "?!"); g_assert_nonnull (with_placeholder); g_assert_cmpstr (with_placeholder[0], ==, "one");