[jsonrpc-glib] message: try harder to parse null strings



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]