--- a/libpurple/conversation.c Sat Oct 05 19:57:39 2013 +0200 +++ b/libpurple/conversation.c Sat Oct 05 20:20:46 2013 +0200 @@ -602,6 +602,9 @@ gc = purple_conversation_get_connection(conv); name = purple_conversation_get_name(conv); + purple_e2ee_state_unref(conv->e2ee_state); + conv->e2ee_state = NULL; + if (gc != NULL) { /* Still connected */ @@ -949,7 +952,8 @@ if (conv->e2ee_state == state) return; - purple_e2ee_state_ref(state); + if (state) + purple_e2ee_state_ref(state); purple_e2ee_state_unref(conv->e2ee_state); conv->e2ee_state = state; @@ -960,27 +964,16 @@ purple_conversation_get_e2ee_state(PurpleConversation *conv) { PurpleE2eeProvider *provider; - PurpleE2eeFeatures features; g_return_val_if_fail(conv != NULL, NULL); + if (conv->e2ee_state == NULL) + return NULL; + provider = purple_e2ee_provider_get_main(); if (provider == NULL) return NULL; - features = purple_e2ee_provider_get_features(provider); - if (conv->type == PURPLE_CONV_TYPE_IM) { - if (!(features & PURPLE_E2EE_FEATURE_IM)) - return NULL; - } else if (conv->type == PURPLE_CONV_TYPE_CHAT) { - if (!(features & PURPLE_E2EE_FEATURE_CHAT)) - return NULL; - } else - return NULL; - - if (conv->e2ee_state == NULL) - return purple_e2ee_provider_get_default_state(provider); - if (purple_e2ee_state_get_provider(conv->e2ee_state) != provider) { purple_debug_warning("conversation", "e2ee state has invalid provider set");