mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge remote-tracking branch 'remotes/armbru/tags/pull-qobject-2020-11-17' into staging
QObject patches patches for 2020-11-17 # gpg: Signature made Tue 17 Nov 2020 14:41:06 GMT # gpg: using RSA key 354BC8B3D7EB2A6B68674E5F3870B400EB918653 # gpg: issuer "armbru@redhat.com" # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" [full] # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" [full] # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867 4E5F 3870 B400 EB91 8653 * remotes/armbru/tags/pull-qobject-2020-11-17: json: Fix a memleak in parse_pair() Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
@@ -257,8 +257,9 @@ static JSONToken *parser_context_peek_token(JSONParserContext *ctxt)
|
||||
*/
|
||||
static int parse_pair(JSONParserContext *ctxt, QDict *dict)
|
||||
{
|
||||
QObject *key_obj = NULL;
|
||||
QString *key;
|
||||
QObject *value;
|
||||
QString *key = NULL;
|
||||
JSONToken *peek, *token;
|
||||
|
||||
peek = parser_context_peek_token(ctxt);
|
||||
@@ -267,7 +268,8 @@ static int parse_pair(JSONParserContext *ctxt, QDict *dict)
|
||||
goto out;
|
||||
}
|
||||
|
||||
key = qobject_to(QString, parse_value(ctxt));
|
||||
key_obj = parse_value(ctxt);
|
||||
key = qobject_to(QString, key_obj);
|
||||
if (!key) {
|
||||
parse_error(ctxt, peek, "key is not a string in object");
|
||||
goto out;
|
||||
@@ -297,13 +299,11 @@ static int parse_pair(JSONParserContext *ctxt, QDict *dict)
|
||||
|
||||
qdict_put_obj(dict, qstring_get_str(key), value);
|
||||
|
||||
qobject_unref(key);
|
||||
|
||||
qobject_unref(key_obj);
|
||||
return 0;
|
||||
|
||||
out:
|
||||
qobject_unref(key);
|
||||
|
||||
qobject_unref(key_obj);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -1415,6 +1415,14 @@ static void invalid_dict_comma(void)
|
||||
g_assert(obj == NULL);
|
||||
}
|
||||
|
||||
static void invalid_dict_key(void)
|
||||
{
|
||||
Error *err = NULL;
|
||||
QObject *obj = qobject_from_json("{32:'abc'}", &err);
|
||||
error_free_or_abort(&err);
|
||||
g_assert(obj == NULL);
|
||||
}
|
||||
|
||||
static void unterminated_literal(void)
|
||||
{
|
||||
Error *err = NULL;
|
||||
@@ -1500,6 +1508,7 @@ int main(int argc, char **argv)
|
||||
g_test_add_func("/errors/unterminated/dict_comma", unterminated_dict_comma);
|
||||
g_test_add_func("/errors/invalid_array_comma", invalid_array_comma);
|
||||
g_test_add_func("/errors/invalid_dict_comma", invalid_dict_comma);
|
||||
g_test_add_func("/errors/invalid_dict_key", invalid_dict_key);
|
||||
g_test_add_func("/errors/unterminated/literal", unterminated_literal);
|
||||
g_test_add_func("/errors/limits/nesting", limits_nesting);
|
||||
g_test_add_func("/errors/multiple_values", multiple_values);
|
||||
|
||||
Reference in New Issue
Block a user