summaryrefslogtreecommitdiff
path: root/qobject
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2016-05-18 15:46:52 -0600
committerMichael Roth <mdroth@linux.vnet.ibm.com>2016-08-04 16:34:10 -0500
commitebe0376e8cd0a6b2318096992a0902663d58e522 (patch)
tree99495b1414c92452164ad3e5e3498d5e6515d574 /qobject
parent9520c6cb1f7e0c6e61c318c1022c64e4ed776335 (diff)
downloadqemu-ebe0376e8cd0a6b2318096992a0902663d58e522.tar.gz
json-streamer: Don't leak tokens on incomplete parse
Valgrind complained about a number of leaks in tests/check-qobject-json: ==12657== definitely lost: 17,247 bytes in 1,234 blocks All of which had the same root cause: on an incomplete parse, we were abandoning the token queue without cleaning up the allocated data within each queue element. Introduced in commit 95385fe, when we switched from QList (which recursively frees contents) to g_queue (which does not). We don't yet require glib 2.32 with its g_queue_free_full(), so open-code it instead. CC: qemu-stable@nongnu.org Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <1463608012-12760-1-git-send-email-eblake@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> (cherry picked from commit ba4dba54347d5062436a8553f527dbbed6dcf069) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Diffstat (limited to 'qobject')
-rw-r--r--qobject/json-streamer.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/qobject/json-streamer.c b/qobject/json-streamer.c
index 02516853a1..7164390cf5 100644
--- a/qobject/json-streamer.c
+++ b/qobject/json-streamer.c
@@ -20,9 +20,15 @@
#define MAX_TOKEN_COUNT (2ULL << 20)
#define MAX_NESTING (1ULL << 10)
+static void json_message_free_token(void *token, void *opaque)
+{
+ g_free(token);
+}
+
static void json_message_free_tokens(JSONMessageParser *parser)
{
if (parser->tokens) {
+ g_queue_foreach(parser->tokens, json_message_free_token, NULL);
g_queue_free(parser->tokens);
parser->tokens = NULL;
}