diff --git a/src/auth.c b/src/auth.c index 442bb3f..30161c0 100644 --- a/src/auth.c +++ b/src/auth.c @@ -939,6 +939,13 @@ _handle_features_sasl(xmpp_conn_t *conn, xmpp_stanza_t *stanza, void *userdata) if (bind) { ns = xmpp_stanza_get_ns(bind); conn->bind_required = ns != NULL && strcmp(ns, XMPP_NS_BIND) == 0; + bind = xmpp_stanza_copy(bind); + if (!bind) { + disconnect_mem_error(conn); + return 0; + } + } else { + conn->bind_required = 0; } /* check whether session establishment is required */ @@ -956,12 +963,6 @@ _handle_features_sasl(xmpp_conn_t *conn, xmpp_stanza_t *stanza, void *userdata) conn->sm_state->sm_support = 1; } - bind = xmpp_stanza_copy(bind); - if (!bind) { - disconnect_mem_error(conn); - return 0; - } - /* we are expecting either and since this is a XMPP style connection or we the previous session */ @@ -989,7 +990,9 @@ _handle_features_sasl(xmpp_conn_t *conn, xmpp_stanza_t *stanza, void *userdata) _do_bind(conn, bind); } else { /* can't bind, disconnect */ - xmpp_stanza_release(bind); + if (bind) { + xmpp_stanza_release(bind); + } strophe_error(conn->ctx, "xmpp", "Stream features does not allow " "resource bind.");