/soc/2013/ankitkv/gobjectification: 8826f95514fd: Merged default...

Ankit Vani <[email protected]>
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: 8826f95514fdba180150a7c4993a44a427b4654e
Author:	 Ankit Vani <[email protected]>
Date:	 2014-05-15 10:16 +0530
Branch:	 soc.2013.gobjectification.plugins
URL: https://hg.pidgin.im/soc/2013/ankitkv/gobjectification/rev/8826f95514fd

Description:

Merged default branch

diffstat:

 configure.ac                              |   23 +++--
 doc/reference/libpurple/Makefile.am       |    5 +-
 finch/libgnt/gnttextview.c                |    4 +
 libpurple/dnssrv.c                        |    8 +
 libpurple/internal.h                      |   30 ++++++-
 libpurple/log.c                           |   28 +++---
 libpurple/network.c                       |   35 ++++++-
 libpurple/plugins/log_reader.c            |   29 ++++--
 libpurple/plugins/perl/common/module.h    |   11 ++
 libpurple/protocols/bonjour/bonjour_ft.c  |   10 +--
 libpurple/protocols/bonjour/jabber.c      |    9 +-
 libpurple/protocols/irc/dcc_send.c        |    9 +-
 libpurple/protocols/jabber/jabber.c       |    2 +-
 libpurple/protocols/jabber/roster.c       |    9 +-
 libpurple/protocols/jabber/si.c           |    9 +-
 libpurple/protocols/oscar/peer.c          |    8 +-
 libpurple/protocols/silc/util.c           |  129 ++++++-----------------------
 libpurple/protocols/simple/simple.c       |   10 +-
 libpurple/protocols/yahoo/yahoo_profile.c |    2 +-
 libpurple/protocols/zephyr/ZReadAscii.c   |    2 +-
 libpurple/protocols/zephyr/zephyr.c       |    4 +-
 libpurple/proxy.c                         |   50 +----------
 libpurple/util.c                          |   27 +++++-
 libpurple/xmlnode.c                       |    4 +-
 pidgin/gtkprefs.c                         |    5 +-
 pidgin/gtkutils.c                         |    9 ++
 pidgin/plugins/spellchk.c                 |    2 +-
 po/POTFILES.in                            |    1 +
 28 files changed, 220 insertions(+), 254 deletions(-)

diffs (truncated from 1065 to 300 lines):

diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
@@ -270,18 +270,21 @@ if test "x$is_win32" != "xyes" ; then
 fi
 AC_CHECK_LIB(resolv, __res_query)
 AC_CHECK_LIB(nsl, gethostent)
-if test "x$is_win32" != "xyes" ; then
+if test "x$is_win32" = "xyes" ; then
+	AC_DEFINE(HAVE_GETADDRINFO, 1, [Define to 1 if you have the getaddrinfo function.])
+	AC_DEFINE(HAVE_INET_NTOP, 1, [Define to 1 if you have the `inet_ntop' function.])
+else
 	AC_CHECK_FUNC(socket, , [AC_CHECK_LIB(socket, socket, ,
 		[AC_MSG_ERROR([socket not found])])])
+	dnl If all goes well, by this point the previous two checks will have
+	dnl pulled in -lsocket and -lnsl if we need them.
+	AC_CHECK_FUNC(getaddrinfo,
+		[AC_DEFINE([HAVE_GETADDRINFO], [1],
+			[Define to 1 if you have the getaddrinfo function.])],
+		[AC_CHECK_LIB(socket, getaddrinfo,
+			[AC_DEFINE([HAVE_GETADDRINFO]) LIBS="-lsocket -lnsl $LIBS"], , -lnsl)])
+	AC_CHECK_FUNCS(inet_ntop)
 fi
-dnl If all goes well, by this point the previous two checks will have
-dnl pulled in -lsocket and -lnsl if we need them.
-AC_CHECK_FUNC(getaddrinfo,
-	[AC_DEFINE([HAVE_GETADDRINFO], [1],
-		[Define to 1 if you have the getaddrinfo function.])],
-	[AC_CHECK_LIB(socket, getaddrinfo,
-		[AC_DEFINE([HAVE_GETADDRINFO]) LIBS="-lsocket -lnsl $LIBS"], , -lnsl)])
-AC_CHECK_FUNCS(inet_ntop)
 AC_CHECK_FUNCS(getifaddrs)
 dnl Check for socklen_t (in Unix98)
 AC_MSG_CHECKING(for socklen_t)
@@ -875,7 +878,7 @@ if test "x$enable_consoleui" = "xyes"; t
 	    [enable_consoleui=no], [$GNT_LIBS])
 
 	if test "x$is_win32" = "xyes" ; then
-		ncurses_sys_prefix="/usr/$host/sys-root/$host"
+		ncurses_sys_prefix="/usr/$host/sys-root/mingw"
 	else
 		ncurses_sys_prefix="/usr"
 	fi
diff --git a/doc/reference/libpurple/Makefile.am b/doc/reference/libpurple/Makefile.am
--- a/doc/reference/libpurple/Makefile.am
+++ b/doc/reference/libpurple/Makefile.am
@@ -58,8 +58,9 @@ CFILE_GLOB=$(top_srcdir)/$(DOC_MODULE)/*
 # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
 # TODO: those files are not properly scanned when building out-of-tree
 EXTRA_HFILES = \
-	$(top_builddir)/$(DOC_MODULE)/version.h \
-	$(top_builddir)/$(DOC_MODULE)/purple.h
+	$(top_builddir)/$(DOC_MODULE)/enums.h \
+	$(top_builddir)/$(DOC_MODULE)/purple.h \
+	$(top_builddir)/$(DOC_MODULE)/version.h
 
 # Header files or dirs to ignore when scanning. Use base file/dir names
 # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code
diff --git a/finch/libgnt/gnttextview.c b/finch/libgnt/gnttextview.c
--- a/finch/libgnt/gnttextview.c
+++ b/finch/libgnt/gnttextview.c
@@ -772,6 +772,10 @@ int gnt_text_view_tag_change(GntTextView
 
 				for (segs = line->segments; segs; segs = snext) {
 					GntTextSegment *seg = segs->data;
+
+					if (!line)
+						break;
+
 					snext = segs->next;
 					if (seg->start >= tag->end) {
 						/* The segment is somewhere after the tag */
diff --git a/libpurple/dnssrv.c b/libpurple/dnssrv.c
--- a/libpurple/dnssrv.c
+++ b/libpurple/dnssrv.c
@@ -555,6 +555,14 @@ resolved(gpointer data, gint source, Pur
 							responses = NULL;
 							break;
 						}
+						if (len > MAX_ADDR_RESPONSE_LEN) {
+							purple_debug_error("dnssrv", "we've read invalid number\n");
+							size = 0;
+							g_list_foreach(responses, (GFunc)purple_txt_response_destroy, NULL);
+							g_list_free(responses);
+							responses = NULL;
+							break;
+						}
 
 						res = g_new0(PurpleTxtResponse, 1);
 						res->content = g_new0(gchar, len);
diff --git a/libpurple/internal.h b/libpurple/internal.h
--- a/libpurple/internal.h
+++ b/libpurple/internal.h
@@ -147,7 +147,6 @@
 	[(condition) ? 1 : -1]; static_assertion_failed_ ## message dummy; \
 	(void)dummy; }
 
-
 #ifdef __clang__
 
 #define PURPLE_BEGIN_IGNORE_CAST_ALIGN \
@@ -166,6 +165,14 @@
 
 #include <glib-object.h>
 
+#ifdef __COVERITY__
+
+/* avoid TAINTED_SCALAR warning */
+#undef g_utf8_next_char
+#define g_utf8_next_char(p) (char *)((p) + 1)
+
+#endif
+
 typedef union
 {
 	struct sockaddr sa;
@@ -335,4 +342,25 @@ int *_purple_statuses_get_primitive_scor
 const gchar *
 _purple_blist_get_localized_default_group_name(void);
 
+/**
+ * Sets most commonly used socket flags: O_NONBLOCK and FD_CLOEXEC.
+ *
+ * @param fd The file descriptor for the socket.
+ *
+ * @return TRUE if succeeded, FALSE otherwise.
+ */
+gboolean
+_purple_network_set_common_socket_flags(int fd);
+
+/**
+ * A fstat alternative, like g_stat for stat.
+ *
+ * @param fd The file descriptor.
+ * @param st The stat buffer.
+ *
+ * @return the result just like for fstat.
+ */
+int
+_purple_fstat(int fd, GStatBuf *st);
+
 #endif /* _PURPLE_INTERNAL_H_ */
diff --git a/libpurple/log.c b/libpurple/log.c
--- a/libpurple/log.c
+++ b/libpurple/log.c
@@ -1704,7 +1704,7 @@ static GList *old_logger_list(PurpleLogT
 	time_t log_last_modified;
 	FILE *index;
 	FILE *file;
-	int index_fd;
+	int file_fd, index_fd;
 	char *index_tmp;
 	char buf[BUF_LONG];
 	struct tm tm;
@@ -1720,13 +1720,21 @@ static GList *old_logger_list(PurpleLogT
 
 	g_free(logfile);
 
-	if (g_stat(purple_stringref_value(pathref), &st))
-	{
+	file_fd = g_open(purple_stringref_value(pathref), 0, O_RDONLY);
+	if (file_fd == -1 || (file = fdopen(file_fd, "rb")) == NULL) {
+		purple_debug_error("log",
+			"Failed to open log file \"%s\" for reading: %s\n",
+			purple_stringref_value(pathref), g_strerror(errno));
 		purple_stringref_unref(pathref);
 		g_free(pathstr);
 		return NULL;
 	}
-	else
+	if (_purple_fstat(file_fd, &st) == -1) {
+		purple_stringref_unref(pathref);
+		g_free(pathstr);
+		fclose(file);
+		return NULL;
+	} else
 		log_last_modified = st.st_mtime;
 
 	/* Change the .log extension to .idx */
@@ -1734,7 +1742,7 @@ static GList *old_logger_list(PurpleLogT
 
 	index_fd = g_open(pathstr, 0, O_RDONLY);
 	if (index_fd != -1) {
-		if (fstat(index_fd, &st) != 0) {
+		if (_purple_fstat(index_fd, &st) != 0) {
 			close(index_fd);
 			index_fd = -1;
 		}
@@ -1744,6 +1752,7 @@ static GList *old_logger_list(PurpleLogT
 		if (st.st_mtime < log_last_modified)
 		{
 			purple_debug_warning("log", "Index \"%s\" exists, but is older than the log.\n", pathstr);
+			close(index_fd);
 		}
 		else
 		{
@@ -1779,19 +1788,12 @@ static GList *old_logger_list(PurpleLogT
 				fclose(index);
 				purple_stringref_unref(pathref);
 
+				fclose(file);
 				return list;
 			}
 		}
 	}
 
-	if (!(file = g_fopen(purple_stringref_value(pathref), "rb"))) {
-		purple_debug_error("log", "Failed to open log file \"%s\" for reading: %s\n",
-		                   purple_stringref_value(pathref), g_strerror(errno));
-		purple_stringref_unref(pathref);
-		g_free(pathstr);
-		return NULL;
-	}
-
 	index_tmp = g_strdup_printf("%s.XXXXXX", pathstr);
 	if ((index_fd = g_mkstemp(index_tmp)) == -1) {
 		purple_debug_error("log", "Failed to open index temp file: %s\n",
diff --git a/libpurple/network.c b/libpurple/network.c
--- a/libpurple/network.c
+++ b/libpurple/network.c
@@ -403,7 +403,6 @@ purple_network_do_listen(unsigned short 
                              PurpleNetworkListenCallback cb, gpointer cb_data)
 {
 	int listenfd = -1;
-	int flags;
 	const int on = 1;
 	PurpleNetworkListenData *listen_data;
 	unsigned short actual_port;
@@ -488,12 +487,7 @@ purple_network_do_listen(unsigned short 
 		close(listenfd);
 		return NULL;
 	}
-	flags = fcntl(listenfd, F_GETFL);
-	fcntl(listenfd, F_SETFL, flags | O_NONBLOCK);
-#ifndef _WIN32
-	if (fcntl(listenfd, F_SETFD, FD_CLOEXEC) != 0)
-		purple_debug_warning("network", "couldn't set FD_CLOEXEC\n");
-#endif
+	_purple_network_set_common_socket_flags(listenfd);
 	actual_port = purple_network_get_port_from_fd(listenfd);
 
 	purple_debug_info("network", "Listening on port: %hu\n", actual_port);
@@ -1156,6 +1150,33 @@ int purple_network_convert_idn_to_ascii(
 #endif
 }
 
+gboolean
+_purple_network_set_common_socket_flags(int fd)
+{
+	int flags;
+	gboolean succ = TRUE;
+
+	g_return_val_if_fail(fd >= 0, FALSE);
+
+	flags = fcntl(fd, F_GETFL);
+
+	if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) != 0) {
+		purple_debug_warning("network",
+			"Couldn't set O_NONBLOCK flag\n");
+		succ = FALSE;
+	}
+
+#ifndef _WIN32
+	if (fcntl(fd, F_SETFD, FD_CLOEXEC) != 0) {
+		purple_debug_warning("network",
+			"Couldn't set FD_CLOEXEC flag\n");
+		succ = FALSE;
+	}
+#endif
+
+	return succ;
+}
+
 void
 purple_network_init(void)
 {
diff --git a/libpurple/plugins/log_reader.c b/libpurple/plugins/log_reader.c
--- a/libpurple/plugins/log_reader.c
+++ b/libpurple/plugins/log_reader.c
@@ -1409,12 +1409,16 @@ static char * trillian_logger_read (Purp
 
 	purple_debug_info("Trillian log read", "Reading %s\n", data->path);
 
-	read = g_malloc(data->length + 2);
-
 	file = g_fopen(data->path, "rb");
 	g_return_val_if_fail(file != NULL, g_strdup(""));
-	if (fseek(file, data->offset, SEEK_SET) != 0)
+
+	read = g_malloc(data->length + 2);
+
+	if (fseek(file, data->offset, SEEK_SET) != 0) {
+		fclose(file);
+		g_free(read);
 		g_return_val_if_reached(g_strdup(""));
+	}
 	data->length = fread(read, 1, data->length, file);
 	fclose(file);
 
@@ -1831,8 +1835,7 @@ static GList *qip_logger_list(PurpleLogT
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.