summaryrefslogtreecommitdiff
path: root/json-glib/json-parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'json-glib/json-parser.c')
-rw-r--r--json-glib/json-parser.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/json-glib/json-parser.c b/json-glib/json-parser.c
index 3d77975..4e08848 100644
--- a/json-glib/json-parser.c
+++ b/json-glib/json-parser.c
@@ -122,20 +122,9 @@ json_parser_clear (JsonParser *parser)
{
JsonParserPrivate *priv = parser->priv;
- g_free (priv->variable_name);
- priv->variable_name = NULL;
-
- if (priv->last_error)
- {
- g_error_free (priv->last_error);
- priv->last_error = NULL;
- }
-
- if (priv->root)
- {
- json_node_unref (priv->root);
- priv->root = NULL;
- }
+ g_clear_pointer (&priv->variable_name, g_free);
+ g_clear_pointer (&priv->last_error, g_error_free);
+ g_clear_pointer (&priv->root, json_node_unref);
}
static void
@@ -880,6 +869,14 @@ json_parse_statement (JsonParser *parser,
case G_TOKEN_FLOAT:
case G_TOKEN_STRING:
case G_TOKEN_IDENTIFIER:
+ if (priv->root != NULL)
+ {
+ JSON_NOTE (PARSER, "Only one top level statement is possible");
+ json_scanner_get_next_token (scanner);
+ priv->error_code = JSON_PARSER_ERROR_INVALID_BAREWORD;
+ return G_TOKEN_EOF;
+ }
+
JSON_NOTE (PARSER, "Statement is a value");
token = json_scanner_get_next_token (scanner);
return json_parse_value (parser, scanner, token, &priv->root);
@@ -888,7 +885,7 @@ json_parse_statement (JsonParser *parser,
JSON_NOTE (PARSER, "Unknown statement");
json_scanner_get_next_token (scanner);
priv->error_code = JSON_PARSER_ERROR_INVALID_BAREWORD;
- return G_TOKEN_SYMBOL;
+ return priv->root != NULL ? G_TOKEN_EOF : G_TOKEN_SYMBOL;
}
}