libpurple/xmlnode.c

branch
release-2.x.y
changeset 41044
59a77978ca08
parent 40755
fb2056ce3c58
child 42586
488055ab5531
--- a/libpurple/xmlnode.c	Sat Sep 11 11:51:05 2021 -0500
+++ b/libpurple/xmlnode.c	Mon Sep 13 17:06:37 2021 -0500
@@ -725,8 +725,15 @@
 	ret = xpd->current;
 	if (xpd->error) {
 		ret = NULL;
-		if (xpd->current)
+		if (xpd->current) {
+			/* If an error occurred while parsing, we may be
+			 * pointing at some random child, so walk back up the
+			 * tree in order to free everything. */
+			while (xpd->current->parent != NULL) {
+				xpd->current = xpd->current->parent;
+			}
 			xmlnode_free(xpd->current);
+		}
 	}
 
 	g_free(xpd);

mercurial