--- a/libpurple/protocols/bonjour/jabber.c Fri Feb 22 18:54:43 2013 -0500 +++ b/libpurple/protocols/bonjour/jabber.c Sun Feb 24 11:37:14 2013 -0500 @@ -411,16 +411,18 @@ _client_socket_handler(gpointer data, gint socket, PurpleInputCondition condition) { BonjourJabberConversation *bconv = data; - gint len, message_length; + gssize len; static char message[4096]; /* Read the data from the socket */ - if ((len = recv(socket, message, sizeof(message) - 1, 0)) == -1) { + if ((len = recv(socket, message, sizeof(message) - 1, 0)) < 0) { /* There have been an error reading from the socket */ - if (errno != EAGAIN) { + if (len != -1 || errno != EAGAIN) { const char *err = g_strerror(errno); - purple_debug_warning("bonjour", "receive error: %s\n", err ? err : "(null)"); + purple_debug_warning("bonjour", + "receive of %" G_GSSIZE_FORMAT " error: %s\n", + len, err ? err : "(null)"); bonjour_jabber_close_conversation(bconv); if (bconv->pb != NULL) { @@ -439,19 +441,12 @@ purple_debug_warning("bonjour", "Connection closed (without stream end) by %s.\n", (name) ? name : "(unknown)"); bonjour_jabber_stream_ended(bconv); return; - } else { - message_length = len; - message[message_length] = '\0'; - - while (message_length > 0 && g_ascii_iscntrl(message[message_length - 1])) { - message[message_length - 1] = '\0'; - message_length--; - } } - purple_debug_info("bonjour", "Receive: -%s- %d bytes\n", message, len); + message[len] = '\0'; - bonjour_parser_process(bconv, message, message_length); + purple_debug_info("bonjour", "Receive: -%s- %" G_GSSIZE_FORMAT " bytes\n", message, len); + bonjour_parser_process(bconv, message, len); } struct _stream_start_data {