diff options
Diffstat (limited to 'chat/centericq/patches/patch-aj')
-rw-r--r-- | chat/centericq/patches/patch-aj | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/chat/centericq/patches/patch-aj b/chat/centericq/patches/patch-aj new file mode 100644 index 00000000000..fa9a1d38314 --- /dev/null +++ b/chat/centericq/patches/patch-aj @@ -0,0 +1,83 @@ +$NetBSD: patch-aj,v 1.1 2005/09/19 19:42:11 adrianp Exp $ + +--- libgadu-0.1/libgadu.c.orig 2004-03-30 23:44:07.000000000 +0100 ++++ libgadu-0.1/libgadu.c +@@ -378,7 +378,7 @@ int gg_read(struct gg_session *sess, cha + */ + int gg_write(struct gg_session *sess, const char *buf, int length) + { +- int res; ++ int res = 0; + + #ifdef __GG_LIBGADU_HAVE_OPENSSL + if (sess->ssl) { +@@ -415,7 +415,8 @@ void *gg_recv_packet(struct gg_session * + { + struct gg_header h; + char *buf = NULL; +- int ret = 0, offset, size = 0; ++ int ret = 0; ++ unsigned int offset, size = 0; + + gg_debug(GG_DEBUG_FUNCTION, "** gg_recv_packet(%p);\n", sess); + +@@ -477,7 +478,7 @@ void *gg_recv_packet(struct gg_session * + memcpy(&h, sess->recv_buf, sizeof(h)); + + /* jakieś sensowne limity na rozmiar pakietu */ +- if (h.length < 0 || h.length > 65535) { ++ if (h.length > 65535) { + gg_debug(GG_DEBUG_MISC, "// gg_recv_packet() invalid packet length (%d)\n", h.length); + errno = ERANGE; + return NULL; +@@ -503,11 +504,18 @@ void *gg_recv_packet(struct gg_session * + while (size > 0) { + ret = gg_read(sess, buf + sizeof(h) + offset, size); + gg_debug(GG_DEBUG_MISC, "// gg_recv_packet() body recv(%d,%p,%d) = %d\n", sess->fd, buf + sizeof(h) + offset, size, ret); ++ if (!ret) { ++ gg_debug(GG_DEBUG_MISC, "// gg_recv_packet() failed: connection broken\n"); ++ errno = ECONNRESET; ++ return NULL; ++ } + if (ret > -1 && ret <= size) { + offset += ret; + size -= ret; + } else if (ret == -1) { ++ int errno2 = errno; + gg_debug(GG_DEBUG_MISC, "// gg_recv_packet() body recv() failed (errno=%d, %s)\n", errno, strerror(errno)); ++ errno = errno2; + if (errno == EAGAIN) { + gg_debug(GG_DEBUG_MISC, "// gg_recv_packet() %d bytes received, %d left\n", offset, size); + sess->recv_buf = buf; +@@ -558,9 +566,9 @@ int gg_send_packet(struct gg_session *se + { + struct gg_header *h; + char *tmp; +- int tmp_length; ++ unsigned int tmp_length; + void *payload; +- int payload_length; ++ unsigned int payload_length; + va_list ap; + int res; + +@@ -584,7 +592,9 @@ int gg_send_packet(struct gg_session *se + while (payload) { + char *tmp2; + +- payload_length = va_arg(ap, int); ++ if (payload_length < 0) ++ gg_debug(GG_DEBUG_MISC, "// gg_send_packet() invalid payload length (%d)\n", payload_length); ++ payload_length = va_arg(ap, unsigned int); + + if (payload_length < 0) + gg_debug(GG_DEBUG_MISC, "// gg_send_packet() invalid payload length (%d)\n", payload_length); +@@ -1150,7 +1160,7 @@ int gg_image_reply(struct gg_session *se + struct gg_send_msg s; + const char *tmp; + char buf[1910]; +- int res; ++ int res = -1; + + gg_debug(GG_DEBUG_FUNCTION, "** gg_image_reply(%p, %d, \"%s\", %p, %d);\n", sess, recipient, filename, image, size); + |