json-glib r48 - in branches/json-glib-0-6: . json-glib



Author: ebassi
Date: Fri Jun 13 10:37:57 2008
New Revision: 48
URL: http://svn.gnome.org/viewvc/json-glib?rev=48&view=rev

Log:
2008-06-13  Emmanuele Bassi  <ebassi openedhand com>

	Bug #958 - JsonGenerator does not escape special characters

	* json-glib/json-generator.c (dump_value): Escape the special
	ASCII characters. (Lincoln de Sousa)

Modified:
   branches/json-glib-0-6/ChangeLog
   branches/json-glib-0-6/json-glib/json-generator.c

Modified: branches/json-glib-0-6/json-glib/json-generator.c
==============================================================================
--- branches/json-glib-0-6/json-glib/json-generator.c	(original)
+++ branches/json-glib-0-6/json-glib/json-generator.c	Fri Jun 13 10:37:57 2008
@@ -235,12 +235,13 @@
   guint indent = priv->indent;
   GValue value = { 0, };
   GString *buffer;
-  guint i;
 
   buffer = g_string_new ("");
 
   if (pretty)
     {
+      guint i;
+
       for (i = 0; i < (level * indent); i++)
         g_string_append_c (buffer, priv->indent_char);
     }
@@ -257,7 +258,22 @@
       break;
 
     case G_TYPE_STRING:
-      g_string_append_printf (buffer, "\"%s\"", g_value_get_string (&value));
+      {
+        gchar *tmp;
+        gchar *exceptions = g_malloc (128);
+        gint chr, i;
+
+        /* non-ascii characters can't be escaped, otherwise utf-8
+         * chars will break */
+        for (i = 0, chr = 0x7f; chr <= 0xff; chr++, i++)
+          exceptions[i] = chr;
+
+        tmp = g_strescape (g_value_get_string (&value), exceptions);
+        g_free (exceptions);
+
+        g_string_append_printf (buffer, "\"%s\"", tmp);
+        g_free (tmp);
+      }
       break;
 
     case G_TYPE_DOUBLE:



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]