[jsonrpc-glib] message: try harder to parse null strings
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [jsonrpc-glib] message: try harder to parse null strings
- Date: Thu, 28 Dec 2017 10:31:41 +0000 (UTC)
commit eb5242ebd650e8f4fb85b86e788c71812326a8d3
Author: Christian Hergert <chergert redhat com>
Date: Thu Dec 28 02:31:22 2017 -0800
message: try harder to parse null strings
The "mv" is what we get for null strings. We may need to unwrap the "v"
later and extract the string, but we'll see.
src/jsonrpc-message.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
---
diff --git a/src/jsonrpc-message.c b/src/jsonrpc-message.c
index 92f58ca..1fb2380 100644
--- a/src/jsonrpc-message.c
+++ b/src/jsonrpc-message.c
@@ -368,8 +368,20 @@ jsonrpc_message_parse_object (GVariantDict *dict,
ret = !!(*((JsonrpcMessageGetVariant *)valptr)->variantptr = g_variant_dict_lookup_value (dict, key,
NULL));
else if (IS_GET_STRING (valptr))
{
- ret = g_variant_dict_lookup (dict, key, "&s", ((JsonrpcMessageGetString *)valptr)->valptr) ||
- g_variant_dict_lookup (dict, key, "m&s", ((JsonrpcMessageGetString *)valptr)->valptr);
+ g_autoptr(GVariant) v = g_variant_dict_lookup_value (dict, key, G_VARIANT_TYPE_ANY);
+
+ /* Safe to get data pointer because @v is a sub-variant of the
+ * larger buffer and therefore shares raw data */
+ if (g_variant_is_of_type (v, G_VARIANT_TYPE ("s")))
+ {
+ *((JsonrpcMessageGetString *)valptr)->valptr = g_variant_get_string (v, NULL);
+ ret = TRUE;
+ }
+ else if (g_variant_is_of_type (v, G_VARIANT_TYPE ("mv")))
+ {
+ *((JsonrpcMessageGetString *)valptr)->valptr = NULL;
+ ret = TRUE;
+ }
}
else if (IS_GET_INT32 (valptr))
ret = g_variant_dict_lookup (dict, key, "i", ((JsonrpcMessageGetInt32 *)valptr)->valptr);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]