summaryrefslogtreecommitdiff
path: root/chat/centericq/patches/patch-aj
diff options
context:
space:
mode:
Diffstat (limited to 'chat/centericq/patches/patch-aj')
-rw-r--r--chat/centericq/patches/patch-aj83
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);
+