summaryrefslogtreecommitdiff
path: root/chat/gaim/patches/patch-ad
diff options
context:
space:
mode:
Diffstat (limited to 'chat/gaim/patches/patch-ad')
-rw-r--r--chat/gaim/patches/patch-ad136
1 files changed, 136 insertions, 0 deletions
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;
+ }