libpurple/protocols/jabber/jabber.c

changeset 40281
294012def01e
parent 40266
8785aa7408b0
parent 40280
da304c8c1cf9
child 40288
b72d9137eca7
--- a/libpurple/protocols/jabber/jabber.c	Tue Feb 04 03:05:18 2020 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Wed Feb 05 02:20:05 2020 +0000
@@ -1599,8 +1599,18 @@
 		jabber_bosh_connection_destroy(js->bosh);
 		js->bosh = NULL;
 	} else if (js->output != NULL) {
-		jabber_send_raw(js, "</stream:stream>", -1);
-
+		/* We should emit the stream termination message here
+		 * normally, but since we destroy the jabber stream just
+		 * after, it has no way to effectively go out on the
+		 * wire. Moreover, it causes a connection lost error in
+		 * the output queued stream that triggers an
+		 * heap-use-after-free error in jabber_push_bytes_cb().
+		 *
+		 * This case happens when disabling the jabber account
+		 * from the dialog box.
+		 *
+		 * jabber_send_raw(js, "</stream:stream>", -1);
+		 */
 		if(js->inpa) {
 			g_source_remove(js->inpa);
 			js->inpa = 0;

mercurial