<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -77,10 +77,10 @@ static const struct
   guint name_offset;
   guint token;
 } symbols[] = {
-  {  0, JSON_TOKEN_TRUE },
+  {  0, JSON_TOKEN_TRUE  },
   {  5, JSON_TOKEN_FALSE },
-  { 11, JSON_TOKEN_NULL },
-  { 16, JSON_TOKEN_VAR }
+  { 11, JSON_TOKEN_NULL  },
+  { 16, JSON_TOKEN_VAR   }
 };
 
 static const guint n_symbols = G_N_ELEMENTS (symbols);
@@ -755,8 +755,8 @@ json_parse_object (JsonParser *parser,
 }
 
 static guint
-json_parse_statement (JsonParser *parser,
-                      JsonScanner   *scanner)
+json_parse_statement (JsonParser  *parser,
+                      JsonScanner *scanner)
 {
   JsonParserPrivate *priv = parser-&gt;priv;
   guint token;
@@ -816,6 +816,7 @@ json_parse_statement (JsonParser *parser,
 
     case JSON_TOKEN_NULL:
       priv-&gt;root = priv-&gt;current_node = json_node_new (JSON_NODE_NULL);
+      json_scanner_get_next_token (scanner);
       return G_TOKEN_NONE;
 
     case JSON_TOKEN_TRUE:
@@ -823,6 +824,7 @@ json_parse_statement (JsonParser *parser,
       priv-&gt;root = priv-&gt;current_node = json_node_new (JSON_NODE_VALUE);
       json_node_set_boolean (priv-&gt;current_node,
                              token == JSON_TOKEN_TRUE ? TRUE : FALSE);
+      json_scanner_get_next_token (scanner);
       return G_TOKEN_NONE;
 
     case '-':
@@ -851,6 +853,7 @@ json_parse_statement (JsonParser *parser,
                 return G_TOKEN_INT;
               }
 
+            json_scanner_get_next_token (scanner);
             return G_TOKEN_NONE;
           }
         else
@@ -862,12 +865,15 @@ json_parse_statement (JsonParser *parser,
     case G_TOKEN_FLOAT:
     case G_TOKEN_STRING:
       priv-&gt;root = priv-&gt;current_node = json_node_new (JSON_NODE_VALUE);
+
       if (token == G_TOKEN_INT)
         json_node_set_int (priv-&gt;current_node, scanner-&gt;value.v_int);
       else if (token == G_TOKEN_FLOAT)
         json_node_set_double (priv-&gt;current_node, scanner-&gt;value.v_float);
       else
         json_node_set_string (priv-&gt;current_node, scanner-&gt;value.v_string);
+
+      json_scanner_get_next_token (scanner);
       return G_TOKEN_NONE;
 
     default:</diff>
      <filename>json-glib/json-parser.c</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>4ecdd6bedb7961f3a33971aa1f2338115a60f7f3</id>
    </parent>
  </parents>
  <author>
    <name>Emmanuele Bassi</name>
    <email>ebassi@gnome.org</email>
  </author>
  <url>http://github.com/ebassi/json-glib/commit/112a8ec8dfd9c46304008b62e8ab256ed7714644</url>
  <id>112a8ec8dfd9c46304008b62e8ab256ed7714644</id>
  <committed-date>2009-06-28T15:49:51-07:00</committed-date>
  <authored-date>2009-06-28T15:49:51-07:00</authored-date>
  <message>[parser] Advance the tokenizer to avoid an infinite loop

The tokenizer is not advanced when we peek a base value and return.
This causes an endless loop which terminates only if the OOM killer
in the kernel gets the right process.

Thanks to Thomas Weidner for catching and reporting the issue.</message>
  <tree>657e107778f2d610764f916383e9a96ab98d0a5b</tree>
  <committer>
    <name>Emmanuele Bassi</name>
    <email>ebassi@gnome.org</email>
  </committer>
</commit>
