changeset 28718:cb4853d04b92

merge of '5b55f7c6ba5c3a07e85fbc2cd0370a411c7c70db' and 'dedf12bbe8f6f101fc524b05f2d97eec1e92f605'
author Paul Aurich <paul@darkrain42.org>
date Fri, 09 Oct 2009 18:54:35 +0000
parents 911560d0c36f (diff) 11c98889d0a6 (current diff)
children b8d68532c188
files
diffstat 21 files changed, 91 insertions(+), 56 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Oct 09 18:51:11 2009 +0000
+++ b/ChangeLog	Fri Oct 09 18:54:35 2009 +0000
@@ -7,6 +7,9 @@
 	  is specified.
 	* Fix a crash when adding a buddy without an '@'.
 
+	Yahoo:
+	* Fix sending /buzz.
+
 	General:
 	* New 'plugins' sub-command to 'debug' command (i.e. '/debug plugins')
 	  to announce the list of loaded plugins (in both Finch and Pidgin).
--- a/finch/gntblist.c	Fri Oct 09 18:51:11 2009 +0000
+++ b/finch/gntblist.c	Fri Oct 09 18:54:35 2009 +0000
@@ -1940,7 +1940,7 @@
 	} else if (!gnt_tree_is_searching(GNT_TREE(ggblist->tree))) {
 		if (strcmp(text, "t") == 0) {
 			finch_blist_toggle_tag_buddy(gnt_tree_get_selection_data(GNT_TREE(ggblist->tree)));
-			gnt_bindable_perform_action_named(GNT_BINDABLE(ggblist->tree), "move-down");
+			gnt_bindable_perform_action_named(GNT_BINDABLE(ggblist->tree), "move-down", NULL);
 		} else if (strcmp(text, "a") == 0) {
 			finch_blist_place_tagged(gnt_tree_get_selection_data(GNT_TREE(ggblist->tree)));
 		} else
--- a/finch/libgnt/gntbindable.h	Fri Oct 09 18:51:11 2009 +0000
+++ b/finch/libgnt/gntbindable.h	Fri Oct 09 18:54:35 2009 +0000
@@ -166,7 +166,7 @@
  *
  * @return  @c TRUE if the action was performed successfully, @c FALSE otherwise.
  */
-gboolean gnt_bindable_perform_action_named(GntBindable *bindable, const char *name, ...);
+gboolean gnt_bindable_perform_action_named(GntBindable *bindable, const char *name, ...) G_GNUC_NULL_TERMINATED;
 
 /**
  * Returns a GntTree populated with "key" -> "binding" for the widget.
--- a/finch/libgnt/gntbox.c	Fri Oct 09 18:51:11 2009 +0000
+++ b/finch/libgnt/gntbox.c	Fri Oct 09 18:54:35 2009 +0000
@@ -687,8 +687,8 @@
 		get_title_thingies(b, prev, &pos, &right);
 		mvwhline(w->window, 0, pos - 1, ACS_HLINE | gnt_color_pair(GNT_COLOR_NORMAL),
 				right - pos + 2);
-		g_free(prev);
 	}
+	g_free(prev);
 }
 
 void gnt_box_set_pad(GntBox *box, int pad)
--- a/finch/libgnt/gntentry.c	Fri Oct 09 18:51:11 2009 +0000
+++ b/finch/libgnt/gntentry.c	Fri Oct 09 18:54:35 2009 +0000
@@ -495,7 +495,7 @@
 {
 	GntEntry *entry = GNT_ENTRY(bind);
 	if (entry->ddown) {
-		gnt_bindable_perform_action_named(GNT_BINDABLE(entry->ddown), "move-down");
+		gnt_bindable_perform_action_named(GNT_BINDABLE(entry->ddown), "move-down", NULL);
 		return TRUE;
 	}
 	return show_suggest_dropdown(entry);
--- a/finch/libgnt/gntfilesel.c	Fri Oct 09 18:51:11 2009 +0000
+++ b/finch/libgnt/gntfilesel.c	Fri Oct 09 18:54:35 2009 +0000
@@ -176,9 +176,13 @@
 	splits = g_strsplit(path, G_DIR_SEPARATOR_S, -1);
 	for (i = 0, j = 0; splits[i]; i++) {
 		if (strcmp(splits[i], ".") == 0) {
+			g_free(splits[i]);
+			splits[i] = NULL;
 		} else if (strcmp(splits[i], "..") == 0) {
 			if (j)
 				j--;
+			g_free(splits[i]);
+			splits[i] = NULL;
 		} else {
 			if (i != j) {
 				g_free(splits[j]);
@@ -625,6 +629,7 @@
 
 	sel->files = gnt_tree_new_with_columns(2);  /* Name, Size */
 	gnt_tree_set_compare_func(GNT_TREE(sel->files), (GCompareFunc)g_utf8_collate);
+	gnt_tree_set_hash_fns(GNT_TREE(sel->files), g_str_hash, g_str_equal, g_free);
 	gnt_tree_set_column_titles(GNT_TREE(sel->files), "Filename", "Size");
 	gnt_tree_set_show_title(GNT_TREE(sel->files), TRUE);
 	gnt_tree_set_col_width(GNT_TREE(sel->files), 0, 25);
--- a/finch/libgnt/gnttextview.c	Fri Oct 09 18:51:11 2009 +0000
+++ b/finch/libgnt/gnttextview.c	Fri Oct 09 18:54:35 2009 +0000
@@ -767,6 +767,7 @@
 							line->segments = g_list_delete_link(line->segments, segs);
 							if (line->segments == NULL) {
 								free_text_line(line, NULL);
+								line = NULL;
 								if (view->list == iter) {
 									if (inext)
 										view->list = inext;
@@ -780,7 +781,8 @@
 							seg->start = tag->start;
 							seg->end = tag->end - change;
 						}
-						line->length -= change;
+						if (line)
+							line->length -= change;
 						/* XXX: Make things work if the tagged text spans over several lines. */
 					} else {
 						/* XXX: handle the rest of the conditions */
--- a/finch/libgnt/gntutils.c	Fri Oct 09 18:51:11 2009 +0000
+++ b/finch/libgnt/gntutils.c	Fri Oct 09 18:54:35 2009 +0000
@@ -374,6 +374,7 @@
 	gnt_widget_from_xmlnode(node, data, num);
 
 	xmlFreeDoc(doc);
+	xmlFreeParserCtxt(ctxt);
 	xmlCleanupParser();
 	va_end(list);
 	g_free(data);
@@ -470,6 +471,7 @@
 		xmlFreeDoc(doc);
 		ret = TRUE;
 	}
+	xmlFreeParserCtxt(ctxt);
 	xmlCleanupParser();
 	return ret;
 #endif
--- a/finch/plugins/gnttinyurl.c	Fri Oct 09 18:51:11 2009 +0000
+++ b/finch/plugins/gnttinyurl.c	Fri Oct 09 18:54:35 2009 +0000
@@ -148,7 +148,9 @@
 					url_buf = g_strndup(c, t - c);
 					if (!g_list_find_custom(ret, url_buf, (GCompareFunc)strcmp)) {
 						purple_debug_info("TinyURL", "Added URL %s\n", url_buf);
-						ret = g_list_append(ret, g_strdup(url_buf));
+						ret = g_list_append(ret, url_buf);
+					} else {
+						g_free(url_buf);
 					}
 					c = t;
 					break;
@@ -179,6 +181,8 @@
 						if (!g_list_find_custom(ret, url_buf, (GCompareFunc)strcmp)) {
 							purple_debug_info("TinyURL", "Added URL %s\n", url_buf);
 							ret = g_list_append(ret, url_buf);
+						} else {
+							g_free(url_buf);
 						}
 						c = t;
 						break;
@@ -231,7 +235,7 @@
 				PurpleConversation *conv, PurpleMessageFlags flags)
 {
 	GString *t;
-	GList *iter, *urls;
+	GList *iter, *urls, *next;
 	int c = 0;
 
 	if ((flags & (PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_INVISIBLE)))
@@ -247,7 +251,8 @@
 
 	t = g_string_new(*message);
 	g_free(*message);
-	for (iter = urls; iter; iter = iter->next) {
+	for (iter = urls; iter; iter = next) {
+		next = iter->next;
 		if (g_utf8_strlen((char *)iter->data, -1) >= purple_prefs_get_int(PREF_LENGTH)) {
 			int pos, x = 0;
 			gchar *j, *s, *str, *orig;
@@ -265,15 +270,8 @@
 			g_free(str);
 			continue;
 		} else {
-			if (iter->prev) {
-				iter = iter->prev;
-				g_free(iter->next->data);
-				urls = g_list_delete_link(urls, iter->next);
-			} else {
-				g_free(iter->data);
-				g_list_free(urls);
-				urls = NULL;
-			}
+			g_free(iter->data);
+			urls = g_list_delete_link(urls, iter);
 		}
 	}
 	*message = t->str;
--- a/libpurple/account.c	Fri Oct 09 18:51:11 2009 +0000
+++ b/libpurple/account.c	Fri Oct 09 18:54:35 2009 +0000
@@ -1052,7 +1052,10 @@
 
 	priv = PURPLE_ACCOUNT_GET_PRIVATE(account);
 	PURPLE_DBUS_UNREGISTER_POINTER(priv->current_error);
-	g_free(priv->current_error);
+	if (priv->current_error) {
+		g_free(priv->current_error->description);
+		g_free(priv->current_error);
+	}
 	g_free(priv);
 
 	PURPLE_DBUS_UNREGISTER_POINTER(account);
--- a/libpurple/plugins/perl/common/Prpl.xs	Fri Oct 09 18:51:11 2009 +0000
+++ b/libpurple/plugins/perl/common/Prpl.xs	Fri Oct 09 18:54:35 2009 +0000
@@ -62,11 +62,15 @@
 PREINIT:
 	PurplePluginProtocolInfo *prpl_info;
 CODE:
-	prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl);
-	if (prpl_info && prpl_info->send_raw != NULL) {
-		RETVAL = prpl_info->send_raw(gc, str, strlen(str));
-	} else {
+	if (!gc)
 		RETVAL = 0;
+	else {
+		prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl);
+		if (prpl_info && prpl_info->send_raw != NULL) {
+			RETVAL = prpl_info->send_raw(gc, str, strlen(str));
+		} else {
+			RETVAL = 0;
+		}
 	}
 OUTPUT:
 	RETVAL
--- a/libpurple/plugins/perl/perl.c	Fri Oct 09 18:51:11 2009 +0000
+++ b/libpurple/plugins/perl/perl.c	Fri Oct 09 18:54:35 2009 +0000
@@ -621,6 +621,9 @@
 			g_free(gps);
 			plugin->info->extra_info = NULL;
 		}
+
+		g_free(plugin->info);
+		plugin->info = NULL;
 	}
 }
 
--- a/libpurple/protocols/msn/contact.c	Fri Oct 09 18:51:11 2009 +0000
+++ b/libpurple/protocols/msn/contact.c	Fri Oct 09 18:54:35 2009 +0000
@@ -206,6 +206,7 @@
 		                   "Operation {%s} failed. No response received from server.\n",
 		                   msn_contact_operation_str(state->action));
 		msn_session_set_error(state->session, MSN_ERROR_BAD_BLIST, NULL);
+		msn_callback_state_free(state);
 		return;
 	}
 
--- a/libpurple/protocols/msn/nexus.c	Fri Oct 09 18:51:11 2009 +0000
+++ b/libpurple/protocols/msn/nexus.c	Fri Oct 09 18:54:35 2009 +0000
@@ -338,8 +338,10 @@
 			xmlnode *cipher = xmlnode_get_child(node, "RequestedSecurityToken/EncryptedData/CipherData/CipherValue");
 			xmlnode *secret = xmlnode_get_child(node, "RequestedProofToken/BinarySecret");
 
+			g_free(nexus->cipher);
 			nexus->cipher = xmlnode_get_data(cipher);
 			data = xmlnode_get_data(secret);
+			g_free(nexus->secret);
 			nexus->secret = (char *)purple_base64_decode(data, NULL);
 			g_free(data);
 
--- a/libpurple/protocols/msn/notification.c	Fri Oct 09 18:51:11 2009 +0000
+++ b/libpurple/protocols/msn/notification.c	Fri Oct 09 18:54:35 2009 +0000
@@ -582,7 +582,7 @@
 
 	trans = msn_transaction_new(cmdproc, "FQY", "%d", payload_len);
 	msn_transaction_set_payload(trans, payload, payload_len);
-	msn_transaction_set_data(trans, data);
+	msn_transaction_set_data(trans, data);	/* XXX: 'data' leaks */
 	msn_cmdproc_send_trans(cmdproc, trans);
 }
 
@@ -621,7 +621,7 @@
 				user->list_op & MSN_LIST_OP_MASK, network);
 		payload = xmlnode_to_str(adl_node, &payload_len);
 		msn_notification_post_adl(session->notification->cmdproc, payload, payload_len);
-
+		g_free(payload);
 	} else {
 		purple_debug_error("msn",
 		                   "Got FQY update for unknown user %s on network %d.\n",
--- a/libpurple/protocols/msn/oim.c	Fri Oct 09 18:51:11 2009 +0000
+++ b/libpurple/protocols/msn/oim.c	Fri Oct 09 18:54:35 2009 +0000
@@ -481,6 +481,7 @@
 
 	g_free(msg_body);
 	g_free(soap_body);
+	msn_oim_free_send_req(oim_request);
 }
 
 /****************************************
--- a/libpurple/protocols/msn/servconn.c	Fri Oct 09 18:51:11 2009 +0000
+++ b/libpurple/protocols/msn/servconn.c	Fri Oct 09 18:54:35 2009 +0000
@@ -86,7 +86,7 @@
 	if (servconn->tx_handler > 0)
 		purple_input_remove(servconn->tx_handler);
 	if (servconn->timeout_handle > 0)
-		purple_input_remove(servconn->timeout_handle);
+		purple_timeout_remove(servconn->timeout_handle);
 
 	msn_cmdproc_destroy(servconn->cmdproc);
 	g_free(servconn);
@@ -280,7 +280,7 @@
 
 	if (servconn->timeout_handle > 0)
 	{
-		purple_input_remove(servconn->timeout_handle);
+		purple_timeout_remove(servconn->timeout_handle);
 		servconn->timeout_handle = 0;
 	}
 
@@ -300,7 +300,7 @@
 servconn_idle_timeout_cb(MsnServConn *servconn)
 {
 	msn_servconn_disconnect(servconn);
-	servconn->timeout_handle = 0;
+	servconn->timeout_handle = 0;	/* XXX: servconn may not be valid anymore */
 	return FALSE;
 }
 
@@ -308,7 +308,7 @@
 servconn_timeout_renew(MsnServConn *servconn)
 {
 	if (servconn->timeout_handle) {
-		purple_input_remove(servconn->timeout_handle);
+		purple_timeout_remove(servconn->timeout_handle);
 		servconn->timeout_handle = 0;
 	}
 
@@ -440,11 +440,12 @@
 	memcpy(servconn->rx_buf + servconn->rx_len, buf, len + 1);
 	servconn->rx_len += len;
 
-	msn_servconn_process_data(servconn);
-	servconn_timeout_renew(servconn);
+	servconn = msn_servconn_process_data(servconn);
+	if (servconn)
+		servconn_timeout_renew(servconn);
 }
 
-void msn_servconn_process_data(MsnServConn *servconn)
+MsnServConn *msn_servconn_process_data(MsnServConn *servconn)
 {
 	char *cur, *end, *old_rx_buf;
 	int cur_len;
@@ -503,10 +504,13 @@
 
 	servconn->processing = FALSE;
 
-	if (servconn->wasted)
+	if (servconn->wasted) {
 		msn_servconn_destroy(servconn);
+		servconn = NULL;
+	}
 
 	g_free(old_rx_buf);
+	return servconn;
 }
 
 #if 0
--- a/libpurple/protocols/msn/servconn.h	Fri Oct 09 18:51:11 2009 +0000
+++ b/libpurple/protocols/msn/servconn.h	Fri Oct 09 18:54:35 2009 +0000
@@ -178,8 +178,10 @@
  * data from the socket.
  *
  * @param servconn The servconn.
+ *
+ * @return @c NULL if servconn was destroyed, 'servconn' otherwise.
  */
-void msn_servconn_process_data(MsnServConn *servconn);
+MsnServConn *msn_servconn_process_data(MsnServConn *servconn);
 
 /**
  * Set a idle timeout fot this servconn
--- a/libpurple/protocols/yahoo/util.c	Fri Oct 09 18:51:11 2009 +0000
+++ b/libpurple/protocols/yahoo/util.c	Fri Oct 09 18:54:35 2009 +0000
@@ -881,6 +881,9 @@
 						}
 						g_free(etag);
 					}
+				} else {
+					/* We don't know what the tag is. Send it unmodified. */
+					g_string_append(dest, tag);
 				}
 
 				i = j;
--- a/libpurple/tests/test_yahoo_util.c	Fri Oct 09 18:51:11 2009 +0000
+++ b/libpurple/tests/test_yahoo_util.c	Fri Oct 09 18:54:35 2009 +0000
@@ -180,6 +180,12 @@
 
 	assert_string_equal_free("\x1B[1mbold \x1B[#FF0000mred <font face=\"Comic Sans MS\" size=\"20\">larger \x1B[#000000mbacktoblack <font size=\"12\">normalsize</font>\x1B[#FF0000m</font>\x1B[#000000m\x1B[x1m",
 			yahoo_html_to_codes("<b>bold <font color=\"#FF0000\">red <font face=\"Comic Sans MS\" size=\"5\">larger <font color=\"#000000\">backtoblack <font size=\"3\">normalsize</font></font></font></font></b>"));
+
+	/* buzz/unknown tags */
+	assert_string_equal_free("<ding>",
+			yahoo_html_to_codes("<ding>"));
+	assert_string_equal_free("Unknown <tags>",
+			yahoo_html_to_codes("Unknown <tags>"));
 }
 END_TEST
 
--- a/po/de.po	Fri Oct 09 18:51:11 2009 +0000
+++ b/po/de.po	Fri Oct 09 18:54:35 2009 +0000
@@ -11,8 +11,8 @@
 msgstr ""
 "Project-Id-Version: de\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-05 21:56+0200\n"
-"PO-Revision-Date: 2009-10-05 21:59+0200\n"
+"POT-Creation-Date: 2009-10-07 22:35+0200\n"
+"PO-Revision-Date: 2009-10-07 22:34+0200\n"
 "Last-Translator: Bjoern Voigt <bjoern@cs.tu-berlin.de>\n"
 "Language-Team: Deutsch <de@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -1531,10 +1531,10 @@
 
 #, c-format
 msgid "TinyURL for above: %s"
-msgstr ""
+msgstr "TinyURL für oben: %s"
 
 msgid "Please wait while TinyURL fetches a shorter URL ..."
-msgstr ""
+msgstr "Bitte warten Sie, während TinyURL eine kürzere URL holt ..."
 
 msgid "Only create TinyURL for URLs of this length or greater"
 msgstr "TinyURL nur für URLs mit mindestens dieser Länge generieren"
@@ -1894,9 +1894,9 @@
 msgid "Resolver process exited without answering our request"
 msgstr "Auflösungsprozess hat sich beendet ohne die Anfrage zu beantworten"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Error converting %s to punycode: %d"
-msgstr "Fehler beim Auflösen von %s: %d"
+msgstr "Fehler beim Konvertieren von %s zu Punycode: %d"
 
 #, c-format
 msgid "Thread creation failure: %s"
@@ -5190,7 +5190,7 @@
 "Für MSN wird SSL-Unterstützung benötigt. Bitte installieren Sie eine "
 "unterstützte SSL-Bibliothek."
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to add the buddy %s because the username is invalid.  Usernames must "
 "be valid email addresses."
@@ -9724,12 +9724,14 @@
 
 msgid "Can't send SMS. Unable to obtain mobile carrier."
 msgstr ""
+"Die SMS kann nicht gesendet werden. Es konnte kein Mobilfunkkanal erreicht "
+"werden."
 
 msgid "Can't send SMS. Unknown mobile carrier."
-msgstr ""
+msgstr "Die SMS kann nicht gesendet werden. Unbekannter Mobilfunkkanal."
 
 msgid "Getting mobile carrier to send the SMS."
-msgstr ""
+msgstr "Hole einen Mobilfunkkanal zum Senden der SMS."
 
 #. Write a local message to this conversation showing that a request for a
 #. * Doodle session has been made
@@ -12399,7 +12401,7 @@
 msgstr "Verwerfen"
 
 msgid "<span weight=\"bold\" size=\"larger\">You have pounced!</span>"
-msgstr "<span weight=\"bold\" size=\"larger\">Sie haben geklopft!</span>"
+msgstr "<span weight=\"bold\" size=\"larger\">Sie wurden angestoßen!</span>"
 
 msgid "The following plugins will be unloaded."
 msgstr "Die folgenden Plugins werden entladen."
@@ -12559,21 +12561,19 @@
 msgstr "Unbekannt.... Bitte berichten Sie dieses Problem!"
 
 msgid "(Custom)"
-msgstr ""
-
-#, fuzzy
+msgstr "(Benutzerdefiniert)"
+
 msgid "(Default)"
 msgstr "(Standard)"
 
 msgid "The default Pidgin sound theme"
-msgstr ""
-
-#, fuzzy
+msgstr "Das Standard-Klangthema für Pidgin"
+
 msgid "The default Pidgin buddy list theme"
-msgstr "Pidgin Buddy-Listen-Thema-Editor"
+msgstr "Das Standard-Buddy-Listen-Thema für Pidgin"
 
 msgid "The default Pidgin status icon theme"
-msgstr ""
+msgstr "Das Standard-Status-Icon-Thema für Pidgin"
 
 msgid "Theme failed to unpack."
 msgstr "Thema konnte nicht entpackt werden."
@@ -14429,9 +14429,8 @@
 msgid "_Start %s on Windows startup"
 msgstr "_Starte %s beim Windows-Start"
 
-#, fuzzy
 msgid "Allow multiple instances"
-msgstr "mehrere Instanzen erlauben"
+msgstr "Mehrere Instanzen erlauben"
 
 msgid "_Dockable Buddy List"
 msgstr "An_dockbare Buddy-Liste"
@@ -14492,6 +14491,3 @@
 msgid "This plugin is useful for debbuging XMPP servers or clients."
 msgstr ""
 "Dieses Plugin ist nützlich zur Fehlersuche in XMPP-Servern oder -Clients."
-
-#~ msgid "GTK+ Runtime Version"
-#~ msgstr "GTK+ Runtime Version"