summaryrefslogtreecommitdiff
path: root/chat
diff options
context:
space:
mode:
Diffstat (limited to 'chat')
-rw-r--r--chat/gaim/Makefile3
-rw-r--r--chat/gaim/distinfo5
-rw-r--r--chat/gaim/patches/patch-aa2
-rw-r--r--chat/gaim/patches/patch-ab176
-rw-r--r--chat/gaim/patches/patch-ac13
-rw-r--r--chat/gaim/patches/patch-ad136
6 files changed, 332 insertions, 3 deletions
diff --git a/chat/gaim/Makefile b/chat/gaim/Makefile
index c47ecb2bb98..849ea569516 100644
--- a/chat/gaim/Makefile
+++ b/chat/gaim/Makefile
@@ -1,7 +1,8 @@
-# $NetBSD: Makefile,v 1.50 2004/01/22 07:49:20 grant Exp $
+# $NetBSD: Makefile,v 1.51 2004/01/27 01:24:51 recht Exp $
#
DISTNAME= gaim-0.75
+PKGREVISION= 1
CATEGORIES= chat x11
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=gaim/}
EXTRACT_SUFX= .tar.bz2
diff --git a/chat/gaim/distinfo b/chat/gaim/distinfo
index 9229b0732fa..fe9ef139352 100644
--- a/chat/gaim/distinfo
+++ b/chat/gaim/distinfo
@@ -1,5 +1,8 @@
-$NetBSD: distinfo,v 1.37 2004/01/11 20:54:07 jmmv Exp $
+$NetBSD: distinfo,v 1.38 2004/01/27 01:24:52 recht Exp $
SHA1 (gaim-0.75.tar.bz2) = 20a7ccadf276d9db6b74ae3d07d90601d805a4a9
Size (gaim-0.75.tar.bz2) = 3370977 bytes
SHA1 (patch-aa) = 90d7bbc5c9ab5c6ffeba30a6c782e66cb1e3d861
+SHA1 (patch-ab) = aff902959e96d00c0712ac88b235aa918ba082d6
+SHA1 (patch-ac) = 803423543063b5838139dfad4c80172d6bfb4d70
+SHA1 (patch-ad) = 02f5d4d7b6cf2bc49043eba09b079ce2530552dc
diff --git a/chat/gaim/patches/patch-aa b/chat/gaim/patches/patch-aa
index bb00bd79433..c00d5ae2940 100644
--- a/chat/gaim/patches/patch-aa
+++ b/chat/gaim/patches/patch-aa
@@ -1,4 +1,4 @@
-$NetBSD: patch-aa,v 1.16 2004/01/11 20:54:08 jmmv Exp $
+$NetBSD: patch-aa,v 1.17 2004/01/27 01:24:52 recht Exp $
--- src/protocols/oscar/ft.c.orig 2004-01-05 02:34:04.000000000 +0100
+++ src/protocols/oscar/ft.c
diff --git a/chat/gaim/patches/patch-ab b/chat/gaim/patches/patch-ab
new file mode 100644
index 00000000000..09b7568e0b0
--- /dev/null
+++ b/chat/gaim/patches/patch-ab
@@ -0,0 +1,176 @@
+$NetBSD: patch-ab,v 1.6 2004/01/27 01:24:52 recht Exp $
+
+--- src/protocols/yahoo/yahoo.c.orig 2004-01-10 06:04:09.000000000 +0100
++++ src/protocols/yahoo/yahoo.c
+@@ -20,6 +20,7 @@
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
++#include <limits.h>
+ #include "internal.h"
+
+ #include "account.h"
+@@ -131,8 +132,15 @@ static void yahoo_packet_read(struct yah
+ while (pos + 1 < len) {
+ if (data[pos] == 0xc0 && data[pos + 1] == 0x80)
+ break;
++ if (x >= sizeof(key)-1) {
++ x++;
++ continue;
++
++ }
+ key[x++] = data[pos++];
+ }
++ if (x >= sizeof(key)-1)
++ x = 0;
+ key[x] = 0;
+ pos += 2;
+ pair->key = strtol(key, NULL, 10);
+@@ -868,32 +876,66 @@ static void yahoo_process_contact(GaimCo
+ }
+ }
+
++
++static void octal(const char **p, const char *end, unsigned char *n)
++{
++ int i, c;
++
++ for (i = 0, c = 0; i < 3 && *p < end; ++i, ++*p) {
++ c <<= 3;
++ switch (**p) {
++ case '0': break;
++ case '1': c += 1; break;
++ case '2': c += 2; break;
++ case '3': c += 3; break;
++ case '4': c += 4; break;
++ case '5': c += 5; break;
++ case '6': c += 6; break;
++ case '7': c += 7; break;
++ default:
++ if (i == 0) {
++ *n = **p;
++ ++*p;
++ return;
++ }
++ c >>= 3;
++ goto done;
++ }
++ }
++done:
++ *n = (c > UCHAR_MAX) ? '?' : c;
++ return;
++}
++
+ #define OUT_CHARSET "utf-8"
+
+ static char *yahoo_decode(const char *text)
+ {
+ char *converted;
+- char *p, *n, *new;
+-
+- n = new = g_malloc(strlen (text) + 1);
+-
+- for (p = (char *)text; *p; p++, n++) {
++ unsigned char *n, *new;
++ size_t len;
++ const char *p, *end;
++
++ len = strlen (text);
++ p = text;
++ end = &text[len];
++ n = new = g_malloc(len + 1);
++ while (p < end) {
+ if (*p == '\\') {
+- sscanf(p + 1, "%3o\n", (int *)n);
+- p += 3;
+- }
+- else
+- *n = *p;
++ ++p;
++ octal(&p, end, n);
++ } else
++ *n = *p++;
++ ++n;
+ }
+-
+ *n = '\0';
+-
+ converted = g_convert(new, n - new, OUT_CHARSET, "iso-8859-1", NULL, NULL, NULL);
+ g_free(new);
+
+ return converted;
+ }
+
++
+ static void yahoo_process_mail(GaimConnection *gc, struct yahoo_packet *pkt)
+ {
+ GaimAccount *account = gaim_connection_get_account(gc);
+@@ -1903,32 +1945,30 @@ static void yahoo_got_web_connected(gpoi
+
+ static void yahoo_web_pending(gpointer data, gint source, GaimInputCondition cond)
+ {
++ static const char http302[] = "HTTP/1.0 302";
++ static const char setcookie[] = "Set-Cookie: ";
+ GaimConnection *gc = data;
+ GaimAccount *account = gaim_connection_get_account(gc);
+ struct yahoo_data *yd = gc->proto_data;
+- char buf[1024], buf2[256], *i = buf, *r = buf2;
+- int len, o = 0;
++ char buf[1024], *i = buf;
++ int len;
++ GString *s;
+
+ len = read(source, buf, sizeof(buf));
+- if (len <= 0 || strncmp(buf, "HTTP/1.0 302", strlen("HTTP/1.0 302"))) {
++ if (len <= 0 || (len >= sizeof(http302)-1 &&
++ memcmp(http302, buf, sizeof(http302)-1) != 0)) {
+ gaim_connection_error(gc, _("Unable to read"));
+ return;
+ }
+-
+- while ((i = strstr(i, "Set-Cookie: ")) && 0 < 2) {
+- i += strlen("Set-Cookie: ");
+- for (;*i != ';'; r++, i++) {
+- *r = *i;
+- }
+- *r=';';
+- r++;
+- *r=' ';
+- r++;
+- o++;
+- }
+- /* Get rid of that "; " */
+- *(r-2) = '\0';
+- yd->auth = g_strdup(buf2);
++ s = g_string_sized_new(len);
++ buf[len] = '\0';
++ while ((i = strstr(i, setcookie)) != NULL) {
++ i += sizeof(setcookie)-1;
++ for (;*i != ';'; i++)
++ g_string_append_c(s, *i);
++ g_string_append(s, "; ");
++ }
++ yd->auth = g_string_free(s, FALSE);
+ gaim_input_remove(gc->inpa);
+ close(source);
+ /* Now we have our cookies to login with. I'll go get the milk. */
+@@ -1974,15 +2014,17 @@ static GHashTable *yahoo_login_page_hash
+ const char *c = buf;
+ char *d;
+ char name[64], value[64];
++ int count = sizeof(name)-1;
+ while ((c < (buf + len)) && (c = strstr(c, "<input "))) {
+ c = strstr(c, "name=\"") + strlen("name=\"");
+- for (d = name; *c!='"'; c++, d++)
++ for (d = name; *c!='"' && count; c++, d++, count--)
+ *d = *c;
+ *d = '\0';
++ count = sizeof(value)-1;
+ d = strstr(c, "value=\"") + strlen("value=\"");
+ if (strchr(c, '>') < d)
+ break;
+- for (c = d, d = value; *c!='"'; c++, d++)
++ for (c = d, d = value; *c!='"' && count; c++, d++, count--)
+ *d = *c;
+ *d = '\0';
+ g_hash_table_insert(hash, g_strdup(name), g_strdup(value));
diff --git a/chat/gaim/patches/patch-ac b/chat/gaim/patches/patch-ac
new file mode 100644
index 00000000000..cc5cae22770
--- /dev/null
+++ b/chat/gaim/patches/patch-ac
@@ -0,0 +1,13 @@
+$NetBSD: patch-ac,v 1.5 2004/01/27 01:24:52 recht Exp $
+
+--- src/proxy.c.orig 2004-01-10 05:04:56.000000000 +0100
++++ src/proxy.c
+@@ -974,7 +974,7 @@ http_canread(gpointer data, gint source,
+
+ gaim_input_remove(phb->inpa);
+
+- while ((nlc != 2) && (read(source, &inputline[pos++], 1) == 1)) {
++ while ((pos < sizeof(inputline)-1) && (nlc != 2) && (read(source, &inputline[pos++], 1) == 1)) {
+ if (inputline[pos - 1] == '\n')
+ nlc++;
+ else if (inputline[pos - 1] != '\r')
diff --git a/chat/gaim/patches/patch-ad b/chat/gaim/patches/patch-ad
new file mode 100644
index 00000000000..0c4ea64cf1c
--- /dev/null
+++ b/chat/gaim/patches/patch-ad
@@ -0,0 +1,136 @@
+$NetBSD: patch-ad,v 1.1 2004/01/27 01:24:52 recht Exp $
+
+--- src/util.c.orig 2004-01-10 05:04:56.000000000 +0100
++++ src/util.c
+@@ -247,24 +247,71 @@ gaim_base64_decode(const char *text, cha
+ /**************************************************************************
+ * Quoted Printable Functions
+ **************************************************************************/
+-void
+-gaim_quotedp_decode(const char *str, char **ret_str, int *ret_len)
++static void hex(const char **p, const char *end, unsigned char *n)
+ {
+- char *p, *n, *new;
++ int i, c;
+
+- n = new = g_malloc(strlen (str) + 1);
++ for (i = 0, c = 0; i < 2 && *p < end; ++i, ++*p) {
++ c <<= 4;
++ switch (**p) {
++ case '0': break;
++ case '1': c += 1; break;
++ case '2': c += 2; break;
++ case '3': c += 3; break;
++ case '4': c += 4; break;
++ case '5': c += 5; break;
++ case '6': c += 6; break;
++ case '7': c += 7; break;
++ case '8': c += 8; break;
++ case '9': c += 9; break;
++ case 'a': c += 10; break;
++ case 'b': c += 11; break;
++ case 'c': c += 12; break;
++ case 'd': c += 13; break;
++ case 'e': c += 14; break;
++ case 'f': c += 15; break;
++ case 'A': c += 10; break;
++ case 'B': c += 11; break;
++ case 'C': c += 12; break;
++ case 'D': c += 13; break;
++ case 'E': c += 14; break;
++ case 'F': c += 15; break;
++ default:
++ if (i == 0) {
++ *n = **p;
++ ++*p;
++ return;
++ }
++ c >>= 4;
++ goto done;
++ }
++ }
++done:
++ *n = (c > UCHAR_MAX) ? '?' : c;
++ return;
++}
+
+- for (p = (char *)str; *p; p++, n++) {
++void
++gaim_quotedp_decode(const char *str, char **ret_str, int *ret_len)
++{
++ const char *p, *end;
++ unsigned char *n, *new;
++ size_t len;
++
++ len = strlen (str);
++ n = new = g_malloc(len + 1);
++ p = str;
++ end = &p[len];
++ while (p < end) {
+ if (*p == '=') {
+- sscanf(p + 1, "%2x\n", (int *)n);
+- p += 2;
+- }
+- else if (*p == '_')
++ ++p;
++ hex(&p, end, n);
++ } else if (*p == '_')
+ *n = ' ';
+ else
+ *n = *p;
++ ++n;
+ }
+-
+ *n = '\0';
+
+ if (ret_len)
+@@ -1962,7 +2009,7 @@ gaim_url_parse(const char *url, char **r
+ char **ret_path)
+ {
+ char scan_info[255];
+- char port_str[5];
++ char port_str[6];
+ int f;
+ const char *turl;
+ char host[256], path[256];
+@@ -1982,16 +2029,21 @@ gaim_url_parse(const char *url, char **r
+ }
+
+ g_snprintf(scan_info, sizeof(scan_info),
+- "%%[%s]:%%[%s]/%%[%s]", addr_ctrl, port_ctrl, page_ctrl);
++ "%%255[%s]:%%5[%s]/%%255[%s]", addr_ctrl, port_ctrl, page_ctrl);
++ addr_ctrl[sizeof(addr_ctrl)-1] = '\0';
++ port_ctrl[sizeof(port_ctrl)-1] = '\0';
++ page_ctrl[sizeof(page_ctrl)-1] = '\0';
+
+ f = sscanf(url, scan_info, host, port_str, path);
+
+ if (f == 1)
+ {
+ g_snprintf(scan_info, sizeof(scan_info),
+- "%%[%s]/%%[%s]",
++ "%%255[%s]/%%255[%s]",
+ addr_ctrl, page_ctrl);
+ f = sscanf(url, scan_info, host, path);
++ addr_ctrl[sizeof(addr_ctrl)-1] = '\0';
++ page_ctrl[sizeof(page_ctrl)-1] = '\0';
+ g_snprintf(port_str, sizeof(port_str), "80");
+ }
+
+@@ -2081,9 +2133,14 @@ parse_redirect(const char *data, size_t
+ static size_t
+ parse_content_len(const char *data, size_t data_len)
+ {
+- size_t content_len = 0;
++ int content_len = 0;
++ char *tmp;
+
+- sscanf(data, "Content-Length: %d", (int *)&content_len);
++ tmp = g_malloc(data_len + 1);
++ memcpy(tmp, data, data_len);
++ tmp[data_len] = '\0';
++ sscanf(tmp, "Content-Length: %d", &content_len);
++ g_free(tmp);
+
+ return content_len;
+ }