diff options
author | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2011-07-07 16:35:21 -0400 |
---|---|---|
committer | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2011-07-07 16:35:21 -0400 |
commit | 4ba9a6a81709221ba58d0f8e067de660eb96914e (patch) | |
tree | cd22ca86cd4b9be06fa5466e343c1d005534223b /json-glib/json-gobject.c | |
parent | 24fa4503ad5d85bf60027bd77c434b2a596b1c17 (diff) | |
download | json-glib-4ba9a6a81709221ba58d0f8e067de660eb96914e.tar.gz |
Fixed badly handled fundamental types in json_deserialize_pspec().
This patch fixes json_deserialize_pspec() to return FALSE when
failing to deserialize some properties. Consequently the patch
ensures we get the intended warnings when failing to deserialize
pspecs for some fundamental types:
Failed to deserialize property "foo" of type "int" on object "bar"
Diffstat (limited to 'json-glib/json-gobject.c')
-rw-r--r-- | json-glib/json-gobject.c | 42 |
1 files changed, 30 insertions, 12 deletions
diff --git a/json-glib/json-gobject.c b/json-glib/json-gobject.c index ccb3007..73ecaac 100644 --- a/json-glib/json-gobject.c +++ b/json-glib/json-gobject.c @@ -519,33 +519,51 @@ json_deserialize_pspec (GValue *value, case G_TYPE_INT64: case G_TYPE_DOUBLE: case G_TYPE_STRING: - g_value_copy (&node_value, value); - retval = TRUE; + if (G_VALUE_HOLDS (&node_value, G_VALUE_TYPE (value))) + { + g_value_copy (&node_value, value); + retval = TRUE; + } break; case G_TYPE_INT: - g_value_set_int (value, (gint) g_value_get_int64 (&node_value)); - retval = TRUE; + if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64)) + { + g_value_set_int (value, (gint) g_value_get_int64 (&node_value)); + retval = TRUE; + } break; case G_TYPE_CHAR: - g_value_set_char (value, (gchar) g_value_get_int64 (&node_value)); - retval = TRUE; + if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64)) + { + g_value_set_char (value, (gchar) g_value_get_int64 (&node_value)); + retval = TRUE; + } break; case G_TYPE_UINT: - g_value_set_uint (value, (guint) g_value_get_int64 (&node_value)); - retval = TRUE; + if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64)) + { + g_value_set_uint (value, (guint) g_value_get_int64 (&node_value)); + retval = TRUE; + } break; case G_TYPE_UCHAR: - g_value_set_uchar (value, (guchar) g_value_get_int64 (&node_value)); - retval = TRUE; + if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64)) + { + g_value_set_uchar (value, (guchar) g_value_get_int64 (&node_value)); + retval = TRUE; + } break; case G_TYPE_FLOAT: - g_value_set_float (value, (gfloat) g_value_get_double (&node_value)); - retval = TRUE; + if (G_VALUE_HOLDS (&node_value, G_TYPE_DOUBLE)) + { + g_value_set_float (value, (gfloat) g_value_get_double (&node_value)); + retval = TRUE; + } break; case G_TYPE_ENUM: |