summaryrefslogtreecommitdiff
path: root/json-glib/json-parser.c
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@linux.intel.com>2009-04-13 22:25:42 +0100
committerEmmanuele Bassi <ebassi@linux.intel.com>2009-04-13 22:32:57 +0100
commit8080df63b4b4eae3b59d1214fc67f48149f49773 (patch)
tree104323c38272bdf1da43236e5f387b733b517d7a /json-glib/json-parser.c
parentca329a7d5c1185cdf15fb85891693eca30295de1 (diff)
downloadjson-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.c38
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;
}