summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin H. Johnson <robbat2@gentoo.org>2015-08-08 13:49:04 -0700
committerRobin H. Johnson <robbat2@gentoo.org>2015-08-08 17:38:18 -0700
commit56bd759df1d0c750a065b8c845e93d5dfa6b549d (patch)
tree3f91093cdb475e565ae857f1c5a7fd339e2d781e /net-libs/loudmouth
downloadgentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.gz
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.bz2
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.zip
proj/gentoo: Initial commit
This commit represents a new era for Gentoo: Storing the gentoo-x86 tree in Git, as converted from CVS. This commit is the start of the NEW history. Any historical data is intended to be grafted onto this point. Creation process: 1. Take final CVS checkout snapshot 2. Remove ALL ChangeLog* files 3. Transform all Manifests to thin 4. Remove empty Manifests 5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$ 5.1. Do not touch files with -kb/-ko keyword flags. Signed-off-by: Robin H. Johnson <robbat2@gentoo.org> X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration tests X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this project X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo developer, wrote Git features for the migration X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve cvs2svn X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014 work in migration X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed
Diffstat (limited to 'net-libs/loudmouth')
-rw-r--r--net-libs/loudmouth/Manifest1
-rw-r--r--net-libs/loudmouth/files/loudmouth-1.4.3-async-fix.patch30
-rw-r--r--net-libs/loudmouth/files/loudmouth-1.4.3-asyncns-system.patch83
-rw-r--r--net-libs/loudmouth/files/loudmouth-1.4.3-drop-stanzas-on-fail.patch47
-rw-r--r--net-libs/loudmouth/files/loudmouth-1.4.3-fix-sasl-md5-digest-uri.patch24
-rw-r--r--net-libs/loudmouth/files/loudmouth-1.4.3-free-before-closed.patch137
-rw-r--r--net-libs/loudmouth/files/loudmouth-1.4.3-glib-2.32.patch13
-rw-r--r--net-libs/loudmouth/files/loudmouth-1.4.3-gnutls28.patch15
-rw-r--r--net-libs/loudmouth/files/loudmouth-1.4.3-id-tag-in-opening-headers.patch35
-rw-r--r--net-libs/loudmouth/files/loudmouth-1.4.3-invalid-unicode.patch144
-rw-r--r--net-libs/loudmouth/files/loudmouth-1.4.3-silence-chdir.patch33
-rw-r--r--net-libs/loudmouth/loudmouth-1.4.3-r2.ebuild96
-rw-r--r--net-libs/loudmouth/metadata.xml11
13 files changed, 669 insertions, 0 deletions
diff --git a/net-libs/loudmouth/Manifest b/net-libs/loudmouth/Manifest
new file mode 100644
index 000000000000..10f26611de42
--- /dev/null
+++ b/net-libs/loudmouth/Manifest
@@ -0,0 +1 @@
+DIST loudmouth-1.4.3.tar.bz2 366818 SHA256 95a93f5d009b71ea8193d994aa11f311bc330a3efe1b7cd74dc48f11c7f929e3 SHA512 02d1de14a4d626a4c9100bd24c06d4b4203eabb0f95bab40ee18ea5e68ed81d47aa977625140157b2d9f7974ac748af857c2ee3a916f0db700e2a2d0934940ec WHIRLPOOL 4f9e3e8e4f2fd0a36996e84deebeb26c789d5334af11a3d6cc6c742b59508945a6279715f6fbb02bbbc04a0d9709e7aae4cc39803b2a60acfd47d76f0482f969
diff --git a/net-libs/loudmouth/files/loudmouth-1.4.3-async-fix.patch b/net-libs/loudmouth/files/loudmouth-1.4.3-async-fix.patch
new file mode 100644
index 000000000000..3213d72865aa
--- /dev/null
+++ b/net-libs/loudmouth/files/loudmouth-1.4.3-async-fix.patch
@@ -0,0 +1,30 @@
+--- a/loudmouth/lm-socket.c
++++ b/loudmouth/lm-socket.c
+@@ -1022,7 +1022,7 @@ _lm_socket_create_phase2 (LmSocket *socket, struct addrinfo *ans)
+ if (socket->connect_func) {
+ (socket->connect_func) (socket, FALSE, socket->user_data;
+ }
+- g_free (socket->connect_data);
++ g_free (socket->connect_data);
+ socket->connect_data = NULL;
+ return;
+ }
+@@ -1107,6 +1107,10 @@ lm_socket_create (GMainContext *context,
+ _lm_socket_create_phase1 (socket, NULL, 0);
+ }
+
++#ifndef HAVE_ASYNCNS
++ /* Only do this check if we are not using asyncns or it will crash.
++ * Report and patch by Senko.
++ */
+ if (socket->connect_data == NULL) {
+ /* Open failed synchronously, probably a DNS lookup problem */
+ lm_socket_unref(socket);
+@@ -1118,6 +1122,7 @@ lm_socket_create (GMainContext *context,
+
+ return NULL;
+ }
++#endif /* HAVE_ASYNCNS */
+
+
+ /* If the connection fails synchronously, we don't want to call the
diff --git a/net-libs/loudmouth/files/loudmouth-1.4.3-asyncns-system.patch b/net-libs/loudmouth/files/loudmouth-1.4.3-asyncns-system.patch
new file mode 100644
index 000000000000..9cf5345e558d
--- /dev/null
+++ b/net-libs/loudmouth/files/loudmouth-1.4.3-asyncns-system.patch
@@ -0,0 +1,83 @@
+diff --git a/configure.ac b/configure.ac
+index 9369e55..17a9e1d 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -199,19 +199,31 @@ AM_CONDITIONAL(USE_GNUTLS, test x$enable_ssl = xGnuTLS)
+ dnl +-------------------------------------------------------------------+
+ dnl | Checking for libasyncns |
+ dnl +-------------------------------------------------------------------+
+-AC_ARG_WITH(asyncns, [ --with-asyncns=yes/no define whether to use libasyncns, default=no],
+- ac_asyncns=$withval,
+- ac_asyncns=no
+- )
++AC_ARG_WITH(asyncns,
++ AS_HELP_STRING([--with-asyncns],
++ [define whether to use libasyncns, @<:@default=no@:>@ (internal/system/no)]),
++ ac_asyncns=$withval,
++ ac_asyncns=no)
+
+ enable_asyncns=no
++have_asyncns_system=no
+ if test x$ac_asyncns != xno; then
+ enable_asyncns=yes
+ AC_DEFINE(HAVE_ASYNCNS, 1, [Whether to use libasyncns])
++
++ if test x$ac_asyncns = xsystem; then
++ PKG_CHECK_MODULES(ASYNCNS, [libasyncns >= 0.3],
++ [have_asyncns_system=yes],
++ [have_asyncns_system=no])
++ fi
+ else
+ echo "Not using asynchronous dns lookups"
+ fi
+
++AC_SUBST(ASYNCNS_CFLAGS)
++AC_SUBST(ASYNCNS_LIBS)
++AM_CONDITIONAL(USE_SYSTEM_ASYNCNS, test x$have_asyncns_system = xyes)
++
+ dnl +-------------------------------------------------------------------+
+ dnl | Checking for Linux TCP/IP stack |
+ dnl +-------------------------------------------------------------------+
+diff --git a/loudmouth/Makefile.am b/loudmouth/Makefile.am
+index f73aa0c..e308e1c 100644
+--- a/loudmouth/Makefile.am
++++ b/loudmouth/Makefile.am
+@@ -6,6 +6,7 @@ AM_CPPFLAGS = \
+ -I. \
+ -I$(top_srcdir) \
+ $(LOUDMOUTH_CFLAGS) \
++ $(ASYNCNS_CFLAGS) \
+ $(LIBIDN_CFLAGS) \
+ -DLM_COMPILATION \
+ -DRUNTIME_ENDIAN \
+@@ -51,8 +52,6 @@ libloudmouth_1_la_SOURCES = \
+ lm-sock.c \
+ lm-socket.c \
+ lm-socket.h \
+- asyncns.c \
+- asyncns.h \
+ lm-sasl.c \
+ lm-sasl.h \
+ md5.c \
+@@ -61,6 +60,13 @@ libloudmouth_1_la_SOURCES = \
+ base64.h \
+ $(NULL)
+
++if ! USE_SYSTEM_ASYNCNS
++libloudmouth_1_la_SOURCES += \
++ asyncns.c \
++ asyncns.h \
++ $(NULL)
++endif
++
+ libloudmouthinclude_HEADERS = \
+ lm-connection.h \
+ lm-error.h \
+@@ -75,6 +81,7 @@ libloudmouthinclude_HEADERS = \
+
+ libloudmouth_1_la_LIBADD = \
+ $(LOUDMOUTH_LIBS) \
++ $(ASYNCNS_LIBS) \
+ $(LIBIDN_LIBS) \
+ -lresolv
+
diff --git a/net-libs/loudmouth/files/loudmouth-1.4.3-drop-stanzas-on-fail.patch b/net-libs/loudmouth/files/loudmouth-1.4.3-drop-stanzas-on-fail.patch
new file mode 100644
index 000000000000..05c76c590b58
--- /dev/null
+++ b/net-libs/loudmouth/files/loudmouth-1.4.3-drop-stanzas-on-fail.patch
@@ -0,0 +1,47 @@
+
+From: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
+Date: Tue, 13 Jan 2009 11:28:44 +0000
+Subject: [PATCH] Drop stanzas when failing to convert them to LmMessages
+
+when a stanza comes in that for some reason can't be parsed into an LmMessage,
+just drop them on the floor instead of blocking the parser. I've seen this
+issue happen in practise because some (buggy?) client sending an iq with a
+prefix e.g. <client:iq xmlns:client="jabber:client" ... />
+---
+ loudmouth/lm-parser.c | 15 ++++++---------
+ 1 files changed, 6 insertions(+), 9 deletions(-)
+
+diff --git a/loudmouth/lm-parser.c b/loudmouth/lm-parser.c
+index 1938d56..89f6675 100644
+--- a/loudmouth/lm-parser.c
++++ b/loudmouth/lm-parser.c
+@@ -151,19 +151,16 @@ parser_end_node_cb (GMarkupParseContext *context,
+ if (!m) {
+ g_warning ("Couldn't create message: %s\n",
+ parser->cur_root->name);
+- return;
+- }
+-
+- g_log (LM_LOG_DOMAIN, LM_LOG_LEVEL_PARSER,
++ } else {
++ g_log (LM_LOG_DOMAIN, LM_LOG_LEVEL_PARSER,
+ "Have a new message\n");
+- if (parser->function) {
+- (* parser->function) (parser, m, parser->user_data);
++ if (parser->function) {
++ (* parser->function) (parser, m, parser->user_data);
++ }
++ lm_message_unref (m);
+ }
+
+- lm_message_unref (m);
+ lm_message_node_unref (parser->cur_root);
+-
+-
+ parser->cur_node = parser->cur_root = NULL;
+ } else {
+ LmMessageNode *tmp_node;
+--
+1.5.6.5
+
+
diff --git a/net-libs/loudmouth/files/loudmouth-1.4.3-fix-sasl-md5-digest-uri.patch b/net-libs/loudmouth/files/loudmouth-1.4.3-fix-sasl-md5-digest-uri.patch
new file mode 100644
index 000000000000..5bca69c0c15e
--- /dev/null
+++ b/net-libs/loudmouth/files/loudmouth-1.4.3-fix-sasl-md5-digest-uri.patch
@@ -0,0 +1,24 @@
+diff --git a/loudmouth/lm-connection.c b/loudmouth/lm-connection.c
+index 21c1bc2..ae8de94 100644
+--- a/loudmouth/lm-connection.c
++++ b/loudmouth/lm-connection.c
+@@ -1441,11 +1441,18 @@ lm_connection_authenticate (LmConnection *connection,
+ connection->effective_jid = g_strdup_printf ("%s/%s",
+ connection->jid, connection->resource);
+
+ if (connection->use_sasl) {
++ gchar *domain = NULL;
++
++ if (!connection_get_server_from_jid (connection->jid, &domain)) {
++ domain = g_strdup (connection->server);
++ }
++
+ lm_sasl_authenticate (connection->sasl,
+ username, password,
+- connection->server,
++ domain,
+ connection_sasl_auth_finished);
++ g_free (domain);
+
+ connection->features_cb =
+ lm_message_handler_new (connection_features_cb,
diff --git a/net-libs/loudmouth/files/loudmouth-1.4.3-free-before-closed.patch b/net-libs/loudmouth/files/loudmouth-1.4.3-free-before-closed.patch
new file mode 100644
index 000000000000..d6c43ae9d66f
--- /dev/null
+++ b/net-libs/loudmouth/files/loudmouth-1.4.3-free-before-closed.patch
@@ -0,0 +1,137 @@
+From ff113220df9073c3e6078487e87b6a7b86e2d952 Mon Sep 17 00:00:00 2001
+From: Mikael Hallendal <micke@imendio.com>
+Date: Sun, 30 Nov 2008 09:27:21 +0100
+Subject: [PATCH] Don't free connection internals before it's closed. [#34]
+
+When the connection freed up internal states (in this case the handler
+lists) before closing itself it segfaulted when trying to unregister the
+SASL handlers.
+
+Reported by Julien Puydt.
+---
+ loudmouth/lm-connection.c | 30 +++++++++++++++++-------------
+ loudmouth/lm-sasl.c | 18 +++++++++---------
+ 2 files changed, 26 insertions(+), 22 deletions(-)
+
+diff --git a/loudmouth/lm-connection.c b/loudmouth/lm-connection.c
+index 915c0ad..dda2978 100644
+--- a/loudmouth/lm-connection.c
++++ b/loudmouth/lm-connection.c
+@@ -191,13 +191,21 @@ connection_free (LmConnection *connection)
+ {
+ int i;
+
++ /* This needs to be run before starting to free internal states.
++ * It used to be run after the handlers where freed which lead to a crash
++ * when the connection was freed prior to running lm_connection_close.
++ */
++ if (connection->state >= LM_CONNECTION_STATE_OPENING) {
++ connection_do_close (connection);
++ }
++
+ g_free (connection->server);
+ g_free (connection->jid);
+ g_free (connection->effective_jid);
+ g_free (connection->stream_id);
+ g_free (connection->resource);
+
+- if (connection->sasl) {
++ if (connection->sasl) {
+ lm_sasl_free (connection->sasl);
+ }
+
+@@ -218,13 +226,9 @@ connection_free (LmConnection *connection)
+
+ g_slist_free (connection->handlers[i]);
+ }
+-
+ g_hash_table_destroy (connection->id_handlers);
+- if (connection->state >= LM_CONNECTION_STATE_OPENING) {
+- connection_do_close (connection);
+- }
+
+- if (connection->open_cb) {
++ if (connection->open_cb) {
+ _lm_utils_free_callback (connection->open_cb);
+ }
+
+@@ -2030,11 +2034,11 @@ lm_connection_unregister_message_handler (LmConnection *connection,
+ g_return_if_fail (handler != NULL);
+ g_return_if_fail (type != LM_MESSAGE_TYPE_UNKNOWN);
+
+- for (l = connection->handlers[type]; l; l = l->next) {
+- HandlerData *hd = (HandlerData *) l->data;
+-
++ for (l = connection->handlers[type]; l; l = l->next) {
++ HandlerData *hd = (HandlerData *) l->data;
++
+ if (handler == hd->handler) {
+- connection->handlers[type] = g_slist_remove_link (connection->handlers[type], l);
++ connection->handlers[type] = g_slist_remove_link (connection->handlers[type], l);
+ g_slist_free (l);
+ lm_message_handler_unref (hd->handler);
+ g_free (hd);
+@@ -2140,7 +2144,7 @@ lm_connection_ref (LmConnection *connection)
+ g_return_val_if_fail (connection != NULL, NULL);
+
+ connection->ref_count++;
+-
++
+ return connection;
+ }
+
+@@ -2157,8 +2161,8 @@ lm_connection_unref (LmConnection *connection)
+ g_return_if_fail (connection != NULL);
+
+ connection->ref_count--;
+-
++
+ if (connection->ref_count == 0) {
+- connection_free (connection);
++ connection_free (connection);
+ }
+ }
+diff --git a/loudmouth/lm-sasl.c b/loudmouth/lm-sasl.c
+index 42ee0e1..e6a72f5 100644
+--- a/loudmouth/lm-sasl.c
++++ b/loudmouth/lm-sasl.c
+@@ -807,27 +807,27 @@ lm_sasl_free (LmSASL *sasl)
+ g_free (sasl->server);
+
+ if (sasl->features_cb) {
+- lm_connection_unregister_message_handler (sasl->connection,
+- sasl->features_cb,
+- LM_MESSAGE_TYPE_STREAM_FEATURES);
++ lm_connection_unregister_message_handler (sasl->connection,
++ sasl->features_cb,
++ LM_MESSAGE_TYPE_STREAM_FEATURES);
+ }
+
+ if (sasl->challenge_cb) {
+ lm_connection_unregister_message_handler (sasl->connection,
+- sasl->challenge_cb,
+- LM_MESSAGE_TYPE_CHALLENGE);
++ sasl->challenge_cb,
++ LM_MESSAGE_TYPE_CHALLENGE);
+ }
+
+ if (sasl->success_cb) {
+ lm_connection_unregister_message_handler (sasl->connection,
+- sasl->success_cb,
+- LM_MESSAGE_TYPE_SUCCESS);
++ sasl->success_cb,
++ LM_MESSAGE_TYPE_SUCCESS);
+ }
+
+ if (sasl->failure_cb) {
+ lm_connection_unregister_message_handler (sasl->connection,
+- sasl->failure_cb,
+- LM_MESSAGE_TYPE_FAILURE);
++ sasl->failure_cb,
++ LM_MESSAGE_TYPE_FAILURE);
+ }
+
+ g_free (sasl);
+--
+1.7.7.1
+
diff --git a/net-libs/loudmouth/files/loudmouth-1.4.3-glib-2.32.patch b/net-libs/loudmouth/files/loudmouth-1.4.3-glib-2.32.patch
new file mode 100644
index 000000000000..87fc170c80da
--- /dev/null
+++ b/net-libs/loudmouth/files/loudmouth-1.4.3-glib-2.32.patch
@@ -0,0 +1,13 @@
+Index: loudmouth-1.4.3/loudmouth/lm-error.c
+===================================================================
+--- loudmouth-1.4.3.orig/loudmouth/lm-error.c
++++ loudmouth-1.4.3/loudmouth/lm-error.c
+@@ -19,7 +19,7 @@
+ */
+
+ #include <config.h>
+-#include <glib/gerror.h>
++#include <glib.h>
+ #include "lm-error.h"
+
+ /**
diff --git a/net-libs/loudmouth/files/loudmouth-1.4.3-gnutls28.patch b/net-libs/loudmouth/files/loudmouth-1.4.3-gnutls28.patch
new file mode 100644
index 000000000000..a538533db03b
--- /dev/null
+++ b/net-libs/loudmouth/files/loudmouth-1.4.3-gnutls28.patch
@@ -0,0 +1,15 @@
+# Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=272027
+# Patch from mandriva
+--- a/configure.ac 2009-05-30 17:59:03.000000000 +0200
++++ b/configure.ac 2009-05-30 18:02:24.000000000 +0200
+@@ -146,8 +146,9 @@
+ enable_ssl=no
+ if test "x$ac_ssl" = "xgnutls"; then
+ dnl Look for GnuTLS
+- AM_PATH_LM_LIBGNUTLS($GNUTLS_REQUIRED, have_libgnutls=yes, have_libgnutls=no)
++ PKG_CHECK_EXISTS([gnutls >= $GNUTLS_REQUIRED], have_libgnutls=yes, have_libgnutls=no)
+ if test "x$have_libgnutls" = "xyes"; then
++ PKG_CHECK_MODULES(LIBGNUTLS, [gnutls >= $GNUTLS_REQUIRED])
+ CFLAGS="$CFLAGS $LIBGNUTLS_CFLAGS"
+ LIBS="$LIBS $LIBGNUTLS_LIBS"
+ AC_DEFINE(HAVE_GNUTLS, 1, [whether to use GnuTSL support.])
diff --git a/net-libs/loudmouth/files/loudmouth-1.4.3-id-tag-in-opening-headers.patch b/net-libs/loudmouth/files/loudmouth-1.4.3-id-tag-in-opening-headers.patch
new file mode 100644
index 000000000000..43b923a5e73f
--- /dev/null
+++ b/net-libs/loudmouth/files/loudmouth-1.4.3-id-tag-in-opening-headers.patch
@@ -0,0 +1,35 @@
+From 6f3a168d985d37af42e747412b5d6d427b4d1ab8 Mon Sep 17 00:00:00 2001
+From: Will Thompson <will.thompson@collabora.co.uk>
+Date: Wed, 5 Nov 2008 23:19:42 +0100
+Subject: [PATCH] Don't append the 'id'-tag in opening stream headers. [#30]
+
+According to RFC 3920 (section 4.4) the id attribute SHOULD NOT be added
+by the initiating party.
+
+[#30 responsible:Hallski state:resolved milestone:Loudmouth 1.4.4 tagged:committed]
+---
+ loudmouth/lm-message.c | 8 +++++---
+ 1 files changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/loudmouth/lm-message.c b/loudmouth/lm-message.c
+index a7d1b46..e2fdcc2 100644
+--- a/loudmouth/lm-message.c
++++ b/loudmouth/lm-message.c
+@@ -223,9 +223,11 @@ lm_message_new (const gchar *to, LmMessageType type)
+
+ m->node = _lm_message_node_new (_lm_message_type_to_string (type));
+
+- id = _lm_utils_generate_id ();
+- lm_message_node_set_attribute (m->node, "id", id);
+- g_free (id);
++ if (type != LM_MESSAGE_TYPE_STREAM) {
++ id = _lm_utils_generate_id ();
++ lm_message_node_set_attribute (m->node, "id", id);
++ g_free (id);
++ }
+
+ if (to) {
+ lm_message_node_set_attribute (m->node, "to", to);
+--
+1.7.7.1
+
diff --git a/net-libs/loudmouth/files/loudmouth-1.4.3-invalid-unicode.patch b/net-libs/loudmouth/files/loudmouth-1.4.3-invalid-unicode.patch
new file mode 100644
index 000000000000..2a97653c93cd
--- /dev/null
+++ b/net-libs/loudmouth/files/loudmouth-1.4.3-invalid-unicode.patch
@@ -0,0 +1,144 @@
+From e08dbcca6cf50c834e2fe4e7290cce642903251d Mon Sep 17 00:00:00 2001
+From: Hermitifier <quantifier666@gmail.com>
+Date: Mon, 3 Oct 2011 17:06:18 +0200
+Subject: [PATCH] Protect GMarkup parser against invalid unicode characters
+
+[Alexandre Rostovtsev <tetromino@gentoo.org>: backport to 1.4.3]
+
+http://loudmouth.lighthouseapp.com/projects/17276/tickets/61
+---
+ loudmouth/lm-parser.c | 94 ++++++++++++++++++++++++++++++++++++++++++++-----
+ 1 files changed, 85 insertions(+), 9 deletions(-)
+
+diff --git a/loudmouth/lm-parser.c b/loudmouth/lm-parser.c
+index 89f6675..0a61a56 100644
+--- a/loudmouth/lm-parser.c
++++ b/loudmouth/lm-parser.c
+@@ -43,6 +43,8 @@ struct LmParser {
+
+ GMarkupParser *m_parser;
+ GMarkupParseContext *context;
++ gchar *incomplete; /* incomplete utf-8 character
++ found at the end of buffer */
+ };
+
+
+@@ -233,25 +235,98 @@ lm_parser_new (LmParserMessageFunction function,
+ parser->cur_root = NULL;
+ parser->cur_node = NULL;
+
++ parser->incomplete = NULL;
++
+ return parser;
+ }
+
++static gchar *
++_lm_parser_make_valid (const gchar *buffer, gchar **incomplete)
++{
++ GString *string;
++ const gchar *remainder, *invalid;
++ gint remaining_bytes, valid_bytes;
++ gunichar code; /*error code for invalid character*/
++
++ g_return_val_if_fail (buffer != NULL, NULL);
++
++ string = NULL;
++ remainder = buffer;
++ remaining_bytes = strlen (buffer);
++
++ while (remaining_bytes != 0)
++ {
++ if (g_utf8_validate (remainder, remaining_bytes, &invalid))
++ break;
++ valid_bytes = invalid - remainder;
++
++ if (string == NULL)
++ string = g_string_sized_new (remaining_bytes);
++
++ g_string_append_len (string, remainder, valid_bytes);
++
++ remainder = g_utf8_find_next_char(invalid, NULL);
++ remaining_bytes -= valid_bytes + (remainder - invalid);
++
++ code = g_utf8_get_char_validated (invalid, -1);
++
++ if (code == -1) {
++ /* A complete but invalid codepoint */
++ /* append U+FFFD REPLACEMENT CHARACTER */
++ g_string_append (string, "\357\277\275");
++#ifndef LM_NO_DEBUG
++ g_debug ("invalid character!\n");
++#endif
++ } else if (code == -2) {
++ /* Beginning of what could be a character */
++ *incomplete = g_strdup (invalid);
++#ifndef LM_NO_DEBUG
++ g_debug ("incomplete character: %s\n", *incomplete);
++#endif
++
++ g_assert (remaining_bytes == 0);
++ g_assert (*(g_utf8_find_next_char(invalid, NULL)) == '\0');
++ }
++ }
++
++ if (string == NULL)
++ return g_strdup (buffer);
++
++ g_string_append (string, remainder);
++
++ g_assert (g_utf8_validate (string->str, -1, NULL));
++
++ return g_string_free (string, FALSE);
++}
++
++
+ void
+ lm_parser_parse (LmParser *parser, const gchar *string)
+ {
++ gchar *valid, *completed;
+ g_return_if_fail (parser != NULL);
+
+- if (!parser->context) {
+- parser->context = g_markup_parse_context_new (parser->m_parser, 0,
+- parser, NULL);
+- }
+-
+- if (g_markup_parse_context_parse (parser->context, string,
+- (gssize)strlen (string), NULL)) {
+- } else {
++ if (!parser->context) {
++ parser->context = g_markup_parse_context_new (parser->m_parser, 0,
++ parser, NULL);
++ }
++
++ if (parser->incomplete) {
++ completed = g_strdup_printf("%s%s", parser->incomplete, string);
++ g_free(parser->incomplete);
++ parser->incomplete = NULL;
++ } else {
++ completed = g_strdup(string);
++ }
++ valid = _lm_parser_make_valid (completed, &parser->incomplete);
++ g_free(completed);
++ if (g_markup_parse_context_parse (parser->context, valid,
++ (gssize)strlen (valid), NULL)) {
++ } else {
+ g_markup_parse_context_free (parser->context);
+ parser->context = NULL;
+- }
++ }
++ g_free(valid);
+ }
+
+ void
+@@ -264,6 +339,7 @@ lm_parser_free (LmParser *parser)
+ if (parser->context) {
+ g_markup_parse_context_free (parser->context);
+ }
++ g_free (parser->incomplete);
+ g_free (parser->m_parser);
+ g_free (parser);
+ }
+--
+1.7.7.1
+
diff --git a/net-libs/loudmouth/files/loudmouth-1.4.3-silence-chdir.patch b/net-libs/loudmouth/files/loudmouth-1.4.3-silence-chdir.patch
new file mode 100644
index 000000000000..0ee8c940fade
--- /dev/null
+++ b/net-libs/loudmouth/files/loudmouth-1.4.3-silence-chdir.patch
@@ -0,0 +1,33 @@
+From 4d8a5ea64abb65ed086efc3e32125c529068acbe Mon Sep 17 00:00:00 2001
+From: Mikael Hallendal <micke@imendio.com>
+Date: Wed, 19 Nov 2008 10:16:40 +0100
+Subject: [PATCH] Silence chdir by catching return value
+
+---
+ loudmouth/asyncns.c | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+diff --git a/loudmouth/asyncns.c b/loudmouth/asyncns.c
+index 9b238fa..55cb471 100644
+--- a/loudmouth/asyncns.c
++++ b/loudmouth/asyncns.c
+@@ -382,6 +382,7 @@ static int process_worker(int in_fd, int out_fd) {
+ int have_death_sig = 0;
+ assert(in_fd > 2);
+ assert(out_fd > 2);
++ int no_warn;
+
+ close(0);
+ close(1);
+@@ -391,7 +392,7 @@ static int process_worker(int in_fd, int out_fd) {
+ open("/dev/null", O_WRONLY);
+ open("/dev/null", O_WRONLY);
+
+- chdir("/");
++ no_warn = chdir("/");
+
+ if (geteuid() == 0) {
+ struct passwd *pw;
+--
+1.7.7.1
+
diff --git a/net-libs/loudmouth/loudmouth-1.4.3-r2.ebuild b/net-libs/loudmouth/loudmouth-1.4.3-r2.ebuild
new file mode 100644
index 000000000000..0a1453575be9
--- /dev/null
+++ b/net-libs/loudmouth/loudmouth-1.4.3-r2.ebuild
@@ -0,0 +1,96 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+GNOME_TARBALL_SUFFIX="bz2"
+GNOME2_LA_PUNT="yes"
+# Not using gnome macro, but behavior is similar, #434736
+GCONF_DEBUG="yes"
+
+inherit autotools eutils gnome2
+
+DESCRIPTION="Lightweight C Jabber library"
+HOMEPAGE="https://github.com/engineyard/loudmouth"
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+KEYWORDS="alpha amd64 ~arm ia64 ppc ppc64 sparc x86 ~ppc-macos"
+
+IUSE="asyncns ssl static-libs test"
+
+# Automagic libidn dependency
+RDEPEND="
+ >=dev-libs/glib-2.4:2
+ net-dns/libidn
+ ssl? ( >=net-libs/gnutls-1.4.0 )
+ asyncns? ( net-libs/libasyncns )
+"
+# FIXME:
+# openssl dropped because of bug #216705
+
+DEPEND="${RDEPEND}
+ test? ( dev-libs/check )
+ virtual/pkgconfig
+ >=dev-util/gtk-doc-am-1
+"
+
+src_prepare() {
+ # Use system libasyncns, bug #236844
+ epatch "${FILESDIR}/${P}-asyncns-system.patch"
+
+ # Fix detection of gnutls-2.8, bug #272027
+ epatch "${FILESDIR}/${P}-gnutls28.patch"
+
+ # Fix digest auth with SRV (or similar)
+ # Upstream: http://loudmouth.lighthouseapp.com/projects/17276-libloudmouth/tickets/44-md5-digest-uri-not-set-correctly-when-using-srv
+ epatch "${FILESDIR}/${P}-fix-sasl-md5-digest-uri.patch"
+
+ # Drop stanzas when failing to convert them to LmMessages
+ # From debian..
+ epatch "${FILESDIR}/${P}-drop-stanzas-on-fail.patch"
+
+ # Don't check for sync dns problems when using asyncns [#33]
+ # From debian..
+ epatch "${FILESDIR}/${P}-async-fix.patch"
+
+ # Don't append id tag in opening headers [#30]
+ epatch "${FILESDIR}/${P}-id-tag-in-opening-headers.patch"
+
+ # Silence chdir, from engineyard git
+ epatch "${FILESDIR}/${P}-silence-chdir.patch"
+
+ # Don't free connection internals before connection is closed [#34]
+ epatch "${FILESDIR}/${P}-free-before-closed.patch"
+
+ # Check for invalid utf8, bug #389127
+ # Upstream: http://loudmouth.lighthouseapp.com/projects/17276/tickets/61
+ epatch "${FILESDIR}/${P}-invalid-unicode.patch"
+
+ # http://loudmouth.lighthouseapp.com/projects/17276/tickets/63
+ epatch "${FILESDIR}/${P}-glib-2.32.patch"
+
+ sed -i -e 's:AM_CONFIG_HEADER:AC_CONFIG_HEADERS:' configure.ac || die #467694
+
+ eautoreconf
+ gnome2_src_prepare
+}
+
+src_configure() {
+ local myconf
+
+ if use ssl; then
+ myconf="${myconf} --with-ssl=gnutls"
+ else
+ myconf="${myconf} --with-ssl=no"
+ fi
+
+ if use asyncns; then
+ myconf="${myconf} --with-asyncns=system"
+ else
+ myconf="${myconf} --without-asyncns"
+ fi
+ gnome2_src_configure \
+ $(use_enable static-libs static) \
+ ${myconf}
+}
diff --git a/net-libs/loudmouth/metadata.xml b/net-libs/loudmouth/metadata.xml
new file mode 100644
index 000000000000..fcbfe25fc1fc
--- /dev/null
+++ b/net-libs/loudmouth/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <herd>gnome</herd>
+ <use>
+ <flag name="asyncns">Use libasyncns for asynchronous name resolution.</flag>
+ </use>
+ <upstream>
+ <remote-id type="github">engineyard/loudmouth</remote-id>
+ </upstream>
+</pkgmetadata>