diff options
author | Emmanuele Bassi <ebassi@gmail.com> | 2020-08-24 16:55:18 +0000 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gmail.com> | 2020-08-24 16:55:18 +0000 |
commit | 7858887ba699bad68c9860562451e95ffdb0f4f0 (patch) | |
tree | 95d744f8ce4e38ca0449874a453d63a7ea45177c /json-glib/json-parser.c | |
parent | 1bfdc6534dd3ba90aa5564af10df178af834221e (diff) | |
parent | 55f4392952772aac74c40c30377a8dd899ac2b88 (diff) | |
download | json-glib-7858887ba699bad68c9860562451e95ffdb0f4f0.tar.gz |
Merge branch 'wip/ordered-iter' into 'master'
Bug squashing
Closes #46, #45, and #41
See merge request GNOME/json-glib!30
Diffstat (limited to 'json-glib/json-parser.c')
-rw-r--r-- | json-glib/json-parser.c | 27 |
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; } } |