[pkg-otr-team] [irssi-plugin-otr] 161/167: Be more defensive about purple_conversation_get_data
Holger Levsen
holger at moszumanska.debian.org
Mon Mar 3 21:55:41 UTC 2014
This is an automated email from the git hooks/post-receive script.
holger pushed a commit to tag 4.0.0
in repository irssi-plugin-otr.
commit 9048218d6fb4607b4675af5879aa0df8e6ac6420
Author: Ian Goldberg <iang at cs.uwaterloo.ca>
Date: Thu Aug 23 11:38:01 2012 -0400
Be more defensive about purple_conversation_get_data
When we're looking up information from
purple_conversation_get_data(conv, ...), it may happen that the result
is NULL because pidgin has emitted conversation-switched before emitting
conversation-created, so we try to switch to a conversation that the
conversation-created callback hasn't yet filled in the data for. This
causes a crash. Be more defensive about this.
---
gtk-dialog.c | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
diff --git a/gtk-dialog.c b/gtk-dialog.c
index fba4337..26ee8af 100644
--- a/gtk-dialog.c
+++ b/gtk-dialog.c
@@ -2191,7 +2191,9 @@ static void select_meta_ctx(GtkWidget *widget, gpointer data) {
GTK_CHECK_MENU_ITEM(select_recent)->active = !value;
if (value) {
- *selected_instance = OTRL_INSTAG_BEST;
+ if (selected_instance) {
+ *selected_instance = OTRL_INSTAG_BEST;
+ }
context = (ConnContext *) otrg_plugin_conv_to_selected_context(conv,
1);
@@ -2215,7 +2217,7 @@ static void select_meta_ctx(GtkWidget *widget, gpointer data) {
} else if (widget == select_recent) {
GTK_CHECK_MENU_ITEM(select_best)->active = !value;
- if (value) {
+ if (value && selected_instance) {
*selected_instance = OTRL_INSTAG_RECENT_RECEIVED;
}
}
@@ -2237,15 +2239,17 @@ static void select_menu_ctx(GtkWidget *widget, gpointer data) {
gboolean *is_multi_instance = purple_conversation_get_data(conv,
"otr-conv_multi_instances");
- if (*is_multi_instance) {
- *selected_instance = context->their_instance;
+ if (is_multi_instance && *is_multi_instance) {
+ if (selected_instance) {
+ *selected_instance = context->their_instance;
+ }
unselect_meta_ctx(conv);
}
pidgin_conv_switch_active_conversation(conv);
dialog_update_label(context);
- if (*is_multi_instance && context != recent_context) {
+ if (is_multi_instance && *is_multi_instance && context != recent_context) {
gchar *buf = g_strdup_printf(_("Warning: The selected outgoing OTR "
"session (%u) is not the most recently active one (%u). "
"Your buddy may not receive your messages. Use the icon menu "
@@ -2268,7 +2272,7 @@ static void build_meta_instance_submenu( PurpleConversation *conv,
otrl_instag_t * selected_instance = purple_conversation_get_data(conv,
"otr-ui_selected_ctx");
- if (*selected_instance == OTRL_INSTAG_BEST) {
+ if (!selected_instance || *selected_instance == OTRL_INSTAG_BEST) {
GTK_CHECK_MENU_ITEM(select_recent)->active = 0;
GTK_CHECK_MENU_ITEM(select_best)->active = 1;
} else if (*selected_instance == OTRL_INSTAG_RECENT_RECEIVED) {
@@ -2626,7 +2630,9 @@ static void otr_add_buddy_top_menus(PurpleConversation *conv) {
is_multi_instance = purple_conversation_get_data(currentConv,
"otr-conv_multi_instances");
- *is_multi_instance = FALSE;
+ if (is_multi_instance) {
+ *is_multi_instance = FALSE;
+ }
if (num_contexts > 1) {
/* We will need the master context */
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-otr/packages/irssi-plugin-otr.git
More information about the Pkg-otr-team
mailing list