diff options
author | Emmanuele Bassi <ebassi@linux.intel.com> | 2009-04-13 22:25:42 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@linux.intel.com> | 2009-04-13 22:32:57 +0100 |
commit | 8080df63b4b4eae3b59d1214fc67f48149f49773 (patch) | |
tree | 104323c38272bdf1da43236e5f387b733b517d7a /json-glib/json-parser.c | |
parent | ca329a7d5c1185cdf15fb85891693eca30295de1 (diff) | |
download | json-glib-8080df63b4b4eae3b59d1214fc67f48149f49773.tar.gz |
[parser] Prevent leaks on error codepaths
Static analysis of the code showed some potential leaks inside
error paths for JsonParser.
Thanks to: Gordon Williams <gordon.williams@collabora.co.uk>
Diffstat (limited to 'json-glib/json-parser.c')
-rw-r--r-- | json-glib/json-parser.c | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/json-glib/json-parser.c b/json-glib/json-parser.c index 46a05f5..8786ff3 100644 --- a/json-glib/json-parser.c +++ b/json-glib/json-parser.c @@ -392,7 +392,11 @@ json_parse_array (JsonParser *parser, break; if (token != G_TOKEN_COMMA) - return G_TOKEN_RIGHT_BRACE; + { + json_array_unref (array); + + return G_TOKEN_RIGHT_BRACE; + } continue; } @@ -429,7 +433,11 @@ json_parse_array (JsonParser *parser, break; if (token != G_TOKEN_COMMA) - return G_TOKEN_RIGHT_BRACE; + { + json_array_unref (array); + + return G_TOKEN_RIGHT_BRACE; + } continue; } @@ -446,6 +454,8 @@ json_parse_array (JsonParser *parser, } else { + json_array_unref (array); + return G_TOKEN_INT; } } @@ -480,6 +490,7 @@ json_parse_array (JsonParser *parser, break; default: + json_array_unref (array); return G_TOKEN_RIGHT_BRACE; } @@ -495,7 +506,11 @@ json_parse_array (JsonParser *parser, token = json_scanner_get_next_token (scanner); if (token != G_TOKEN_COMMA && token != G_TOKEN_RIGHT_BRACE) - return G_TOKEN_RIGHT_BRACE; + { + json_array_unref (array); + + return G_TOKEN_RIGHT_BRACE; + } } json_node_take_array (priv->current_node, array); @@ -604,7 +619,11 @@ json_parse_object (JsonParser *parser, break; if (token != G_TOKEN_COMMA) - return G_TOKEN_RIGHT_CURLY; + { + json_object_unref (object); + + return G_TOKEN_RIGHT_CURLY; + } continue; } @@ -643,7 +662,11 @@ json_parse_object (JsonParser *parser, break; if (token != G_TOKEN_COMMA) - return G_TOKEN_RIGHT_CURLY; + { + json_object_unref (object); + + return G_TOKEN_RIGHT_CURLY; + } continue; } @@ -659,6 +682,9 @@ json_parse_object (JsonParser *parser, } else { + g_free (name); + json_object_unref (object); + return G_TOKEN_INT; } } @@ -693,6 +719,8 @@ json_parse_object (JsonParser *parser, break; default: + g_free (name); + json_object_unref (object); return G_TOKEN_SYMBOL; } |