# HG changeset patch # User Paul Aurich # Date 1240705341 0 # Node ID 90d5e3b94a378d65dfaafac2b8a5e335c6fa983a # Parent 06da00c70eae8ab62171862c5fe791d980f37a44 Feed a fake to the XMPP parser to silence warnings. Upgrading to TLS and disconnecting should no longer emit 'Extra content at the end of the document' References #8830. diff -r 06da00c70eae -r 90d5e3b94a37 libpurple/protocols/jabber/jabber.c --- a/libpurple/protocols/jabber/jabber.c Sun Apr 26 00:06:30 2009 +0000 +++ b/libpurple/protocols/jabber/jabber.c Sun Apr 26 00:22:21 2009 +0000 @@ -79,6 +79,10 @@ "xmlns:stream='http://etherx.jabber.org/streams' " "version='1.0'>", js->user->domain); + if (js->reinit) + /* Close down the current stream to keep the XML parser happy */ + jabber_parser_close_stream(js); + /* setup the parser fresh for each stream */ jabber_parser_setup(js); jabber_send_raw(js, open_stream, -1); @@ -628,6 +632,9 @@ static void tls_init(JabberStream *js) { + /* Close down the current stream to keep the XML parser happy */ + jabber_parser_close_stream(js); + purple_input_remove(js->gc->inpa); js->gc->inpa = 0; js->gsc = purple_ssl_connect_with_host_fd(js->gc->account, js->fd, @@ -1335,6 +1342,16 @@ if (!gc->disconnect_timeout) jabber_send_raw(js, "", -1); + if (!purple_account_get_current_error(purple_connection_get_account(gc))) { + /* + * The common case is user-triggered, so we never receive a + * from the server when disconnecting, so silence the + * parser's warnings. On errors, though, the server terminated the + * connection, so we should have received a real . + */ + jabber_parser_close_stream(js); + } + if (js->srv_query_data) purple_srv_cancel(js->srv_query_data); diff -r 06da00c70eae -r 90d5e3b94a37 libpurple/protocols/jabber/parser.c --- a/libpurple/protocols/jabber/parser.c Sun Apr 26 00:06:30 2009 +0000 +++ b/libpurple/protocols/jabber/parser.c Sun Apr 26 00:22:21 2009 +0000 @@ -207,6 +207,12 @@ jabber_parser_free(js); } +void +jabber_parser_close_stream(JabberStream *js) +{ + xmlParseChunk(js->context, "", 16 /* length */, 0); +} + void jabber_parser_free(JabberStream *js) { if (js->context) { xmlParseChunk(js->context, NULL,0,1); diff -r 06da00c70eae -r 90d5e3b94a37 libpurple/protocols/jabber/parser.h --- a/libpurple/protocols/jabber/parser.h Sun Apr 26 00:06:30 2009 +0000 +++ b/libpurple/protocols/jabber/parser.h Sun Apr 26 00:22:21 2009 +0000 @@ -25,6 +25,7 @@ #include "jabber.h" void jabber_parser_setup(JabberStream *js); +void jabber_parser_close_stream(JabberStream *js); void jabber_parser_free(JabberStream *js); void jabber_parser_process(JabberStream *js, const char *buf, int len);