summaryrefslogtreecommitdiff
path: root/json-glib/json-generator.c
diff options
context:
space:
mode:
authorStef Walter <stefw@redhat.com>2014-05-20 10:43:29 +0200
committerStef Walter <stefw@redhat.com>2014-05-20 10:45:02 +0200
commit8f4816a2e05d0d3672d7723df2feaf466632c498 (patch)
tree45d15db20119c110ac448d2260ea23d643722c5f /json-glib/json-generator.c
parent0898b9c335a21a82d92621e16be1b1038ccc6991 (diff)
downloadjson-glib-8f4816a2e05d0d3672d7723df2feaf466632c498.tar.gz
generator: Escape Object key names correctly
Also fix empty keys, which are now encoded properly. https://bugzilla.gnome.org/show_bug.cgi?id=727593
Diffstat (limited to 'json-glib/json-generator.c')
-rw-r--r--json-glib/json-generator.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/json-glib/json-generator.c b/json-glib/json-generator.c
index 9868973..ff8af96 100644
--- a/json-glib/json-generator.c
+++ b/json-glib/json-generator.c
@@ -286,7 +286,7 @@ dump_value (JsonGenerator *generator,
g_string_append_c (buffer, priv->indent_char);
}
- if (name && name[0] != '\0')
+ if (name)
{
if (pretty)
g_string_append_printf (buffer, "\"%s\" : ", name);
@@ -365,7 +365,7 @@ dump_array (JsonGenerator *generator,
g_string_append_c (buffer, priv->indent_char);
}
- if (name && name[0] != '\0')
+ if (name)
{
if (pretty)
g_string_append_printf (buffer, "\"%s\" : ", name);
@@ -458,7 +458,7 @@ dump_object (JsonGenerator *generator,
g_string_append_c (buffer, priv->indent_char);
}
- if (name && name[0] != '\0')
+ if (name)
{
if (pretty)
g_string_append_printf (buffer, "\"%s\" : ", name);
@@ -476,6 +476,7 @@ dump_object (JsonGenerator *generator,
for (l = members; l != NULL; l = l->next)
{
const gchar *member_name = l->data;
+ gchar *escaped_name = json_strescape (member_name);
JsonNode *cur = json_object_get_member (object, member_name);
guint sub_level = level + 1;
guint j;
@@ -488,29 +489,29 @@ dump_object (JsonGenerator *generator,
{
for (j = 0; j < (sub_level * indent); j++)
g_string_append_c (buffer, priv->indent_char);
- g_string_append_printf (buffer, "\"%s\" : null", member_name);
+ g_string_append_printf (buffer, "\"%s\" : null", escaped_name);
}
else
{
- g_string_append_printf (buffer, "\"%s\":null", member_name);
+ g_string_append_printf (buffer, "\"%s\":null", escaped_name);
}
break;
case JSON_NODE_VALUE:
- value = dump_value (generator, sub_level, member_name, cur, NULL);
+ value = dump_value (generator, sub_level, escaped_name, cur, NULL);
g_string_append (buffer, value);
g_free (value);
break;
case JSON_NODE_ARRAY:
- value = dump_array (generator, sub_level, member_name,
+ value = dump_array (generator, sub_level, escaped_name,
json_node_get_array (cur), NULL);
g_string_append (buffer, value);
g_free (value);
break;
case JSON_NODE_OBJECT:
- value = dump_object (generator, sub_level, member_name,
+ value = dump_object (generator, sub_level, escaped_name,
json_node_get_object (cur), NULL);
g_string_append (buffer, value);
g_free (value);
@@ -522,6 +523,8 @@ dump_object (JsonGenerator *generator,
if (pretty)
g_string_append_c (buffer, '\n');
+
+ g_free (escaped_name);
}
g_list_free (members);