lynx/lynx-2.8.5-can_2005_3120.patch

394 lines
9.0 KiB
Diff
Raw Permalink Normal View History

--- lynx2-8-5/WWW/Library/Implementation/HTMIME.c.orig 2004-01-07 19:03:09.000000000 -0700
+++ lynx2-8-5/WWW/Library/Implementation/HTMIME.c 2005-10-10 13:23:32.000000000 -0700
@@ -2062,27 +2062,23 @@
**
** Written by S. Ichikawa,
** partially inspired by encdec.c of <jh@efd.lth.se>.
-** Assume caller's buffer is LINE_LENGTH bytes, these decode to
-** no longer than the input strings.
*/
-#define LINE_LENGTH 512 /* Maximum length of line of ARTICLE etc */
-#ifdef ESC
-#undef ESC
-#endif /* ESC */
#include <LYCharVals.h> /* S/390 -- gil -- 0163 */
-#define ESC CH_ESC
PRIVATE char HTmm64[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" ;
PRIVATE char HTmmquote[] = "0123456789ABCDEF";
PRIVATE int HTmmcont = 0;
-PUBLIC void HTmmdec_base64 ARGS2(
- char *, t,
+PRIVATE void HTmmdec_base64 ARGS2(
+ char **, t,
char *, s)
{
int d, count, j, val;
- char buf[LINE_LENGTH], *bp, nw[4], *p;
+ char *buf, *bp, nw[4], *p;
+
+ if ((buf = malloc(strlen(s) * 3 + 1)) == 0)
+ outofmem(__FILE__, "HTmmdec_base64");
for (bp = buf; *s; s += 4) {
val = 0;
@@ -2113,14 +2109,18 @@
*bp++ = nw[2];
}
*bp = '\0';
- strcpy(t, buf);
+ StrAllocCopy(*t, buf);
+ FREE(buf);
}
-PUBLIC void HTmmdec_quote ARGS2(
- char *, t,
+PRIVATE void HTmmdec_quote ARGS2(
+ char **, t,
char *, s)
{
- char buf[LINE_LENGTH], cval, *bp, *p;
+ char *buf, cval, *bp, *p;
+
+ if ((buf = malloc(strlen(s) + 1)) == 0)
+ outofmem(__FILE__, "HTmmdec_quote");
for (bp = buf; *s; ) {
if (*s == '=') {
@@ -2147,23 +2147,27 @@
}
}
*bp = '\0';
- strcpy(t, buf);
+ StrAllocCopy(*t, buf);
+ FREE(buf);
}
/*
** HTmmdecode for ISO-2022-JP - FM
*/
PUBLIC void HTmmdecode ARGS2(
- char *, trg,
+ char **, trg,
char *, str)
{
- char buf[LINE_LENGTH], mmbuf[LINE_LENGTH];
+ char *buf;
+ char *mmbuf = NULL;
+ char *m2buf = NULL;
char *s, *t, *u;
int base64, quote;
- buf[0] = '\0';
-
- for (s = str, u = buf; *s; ) {
+ if ((buf = malloc(strlen(str) + 1)) == 0)
+ outofmem(__FILE__, "HTmmdecode");
+
+ for (s = str, u = buf; *s;) {
if (!strncasecomp(s, "=?ISO-2022-JP?B?", 16)) {
base64 = 1;
} else {
@@ -2181,11 +2185,14 @@
u--;
}
}
+ if (mmbuf == 0) /* allocate buffer big enough for source */
+ StrAllocCopy(mmbuf, str);
for (s += 16, t = mmbuf; *s; ) {
if (s[0] == '?' && s[1] == '=') {
break;
} else {
*t++ = *s++;
+ *t = '\0';
}
}
if (s[0] != '?' || s[1] != '=') {
@@ -2195,14 +2202,12 @@
*t = '\0';
}
if (base64)
- HTmmdec_base64(mmbuf, mmbuf);
+ HTmmdec_base64(&m2buf, mmbuf);
if (quote)
- HTmmdec_quote(mmbuf, mmbuf);
- for (t = mmbuf; *t; )
+ HTmmdec_quote(&m2buf, mmbuf);
+ for (t = m2buf; *t; )
*u++ = *t++;
HTmmcont = 1;
- /* if (*s == ' ' || *s == '\t') *u++ = *s; */
- /* for ( ; *s == ' ' || *s == '\t'; s++) ; */
} else {
if (*s != ' ' && *s != '\t')
HTmmcont = 0;
@@ -2211,7 +2216,10 @@
}
*u = '\0';
end:
- strcpy(trg, buf);
+ StrAllocCopy(*t, buf);
+ FREE(m2buf);
+ FREE(mmbuf);
+ FREE(buf);
}
/*
@@ -2219,22 +2227,27 @@
** (The author of this function "rjis" is S. Ichikawa.)
*/
PUBLIC int HTrjis ARGS2(
- char *, t,
+ char **, t,
char *, s)
{
- char *p, buf[LINE_LENGTH];
+ char *p;
+ char *buf = NULL;
int kanji = 0;
- if (strchr(s, ESC) || !strchr(s, '$')) {
- if (s != t)
- strcpy(t, s);
+ if (strchr(s, CH_ESC) || !strchr(s, '$')) {
+ if (s != *t)
+ StrAllocCopy(*t, s);
return 1;
}
+
+ if ((buf = malloc(strlen(s) * 2 + 1)) == 0)
+ outofmem(__FILE__, "HTrjis");
+
for (p = buf; *s; ) {
if (!kanji && s[0] == '$' && (s[1] == '@' || s[1] == 'B')) {
if (HTmaybekanji((int)s[2], (int)s[3])) {
kanji = 1;
- *p++ = ESC;
+ *p++ = CH_ESC;
*p++ = *s++;
*p++ = *s++;
*p++ = *s++;
@@ -2246,7 +2259,7 @@
}
if (kanji && s[0] == '(' && (s[1] == 'J' || s[1] == 'B')) {
kanji = 0;
- *p++ = ESC;
+ *p++ = CH_ESC;
*p++ = *s++;
*p++ = *s++;
continue;
@@ -2255,7 +2268,8 @@
}
*p = *s; /* terminate string */
- strcpy(t, buf);
+ StrAllocCopy(*t, buf);
+ FREE(buf);
return 0;
}
--- lynx2-8-5/WWW/Library/Implementation/HTMIME.h.orig 2003-01-22 02:43:13.000000000 -0700
+++ lynx2-8-5/WWW/Library/Implementation/HTMIME.h 2005-10-10 13:23:32.000000000 -0700
@@ -67,20 +67,12 @@
For handling Japanese headers.
*/
-extern void HTmmdec_base64 PARAMS((
- char * t,
- char * s));
-
-extern void HTmmdec_quote PARAMS((
- char * t,
- char * s));
-
extern void HTmmdecode PARAMS((
- char * trg,
+ char ** trg,
char * str));
extern int HTrjis PARAMS((
- char * t,
+ char ** t,
char * s));
extern int HTmaybekanji PARAMS((
--- lynx2-8-5/WWW/Library/Implementation/HTNews.c.orig 2004-01-07 19:03:09.000000000 -0700
+++ lynx2-8-5/WWW/Library/Implementation/HTNews.c 2005-10-10 13:24:48.000000000 -0700
@@ -940,7 +940,6 @@
}
}
-#ifdef SH_EX /* for MIME */
#ifdef NEWS_DEBUG
/* for DEBUG 1997/11/07 (Fri) 17:20:16 */
void debug_print(unsigned char *p)
@@ -962,45 +961,15 @@
}
#endif
-static char *decode_mime(char *str)
+static char *decode_mime(char **str)
{
- char temp[LINE_LENGTH]; /* FIXME: what determines the actual size? */
- char *p, *q;
-
- if (str == NULL)
- return "";
-
+#ifdef SH_EX
if (HTCJK != JAPANESE)
- return str;
-
- LYstrncpy(temp, str, sizeof(temp) - 1);
- q = temp;
- while ((p = strchr(q, '=')) != 0) {
- if (p[1] == '?') {
- HTmmdecode(p, p);
- q = p + 2;
- } else {
- q = p + 1;
- }
- }
-#ifdef NEWS_DEBUG
- printf("new=[");
- debug_print(temp);
+ return *str;
#endif
- HTrjis(temp, temp);
- strcpy(str, temp);
-
- return str;
+ HTmmdecode(str, *str);
+ return HTrjis(str, *str) ? *str : "";
}
-#else /* !SH_EX */
-static char *decode_mime ARGS1(char *, str)
-{
- HTmmdecode(str, str);
- HTrjis(str, str);
- return str;
-}
-#endif
-
/* Read in an Article read_article
** ------------------
@@ -1087,22 +1056,22 @@
} else if (match(full_line, "SUBJECT:")) {
StrAllocCopy(subject, HTStrip(strchr(full_line,':')+1));
- decode_mime(subject);
+ decode_mime(&subject);
} else if (match(full_line, "DATE:")) {
StrAllocCopy(date, HTStrip(strchr(full_line,':')+1));
} else if (match(full_line, "ORGANIZATION:")) {
StrAllocCopy(organization,
HTStrip(strchr(full_line,':')+1));
- decode_mime(organization);
+ decode_mime(&organization);
} else if (match(full_line, "FROM:")) {
StrAllocCopy(from, HTStrip(strchr(full_line,':')+1));
- decode_mime(from);
+ decode_mime(&from);
} else if (match(full_line, "REPLY-TO:")) {
StrAllocCopy(replyto, HTStrip(strchr(full_line,':')+1));
- decode_mime(replyto);
+ decode_mime(&replyto);
} else if (match(full_line, "NEWSGROUPS:")) {
StrAllocCopy(newsgroups, HTStrip(strchr(full_line,':')+1));
@@ -1711,8 +1680,8 @@
int, last_required)
{
char line[LINE_LENGTH+1];
- char author[LINE_LENGTH+1];
- char subject[LINE_LENGTH+1];
+ char *author = NULL;
+ char *subject = NULL;
char *date = NULL;
int i;
char *p;
@@ -1725,7 +1694,6 @@
int status, count, first, last; /* Response fields */
/* count is only an upper limit */
- author[0] = '\0';
START(HTML_HEAD);
PUTC('\n');
START(HTML_TITLE);
@@ -1946,8 +1914,8 @@
case 'S':
case 's':
if (match(line, "SUBJECT:")) {
- LYstrncpy(subject, line+9, sizeof(subject)-1);/* Save subject */
- decode_mime(subject);
+ StrAllocCopy(subject, line + 9);
+ decode_mime(&subject);
}
break;
@@ -1964,10 +1932,8 @@
case 'F':
if (match(line, "FROM:")) {
char * p2;
- LYstrncpy(author,
- author_name(strchr(line,':')+1),
- sizeof(author)-1);
- decode_mime(author);
+ StrAllocCopy(author, strchr(line, ':') + 1);
+ decode_mime(&author);
p2 = author + strlen(author) - 1;
if (*p2==LF)
*p2 = '\0'; /* Chop off newline */
@@ -1988,11 +1954,8 @@
PUTC('\n');
START(HTML_LI);
-#ifdef SH_EX /* for MIME */
- HTSprintf0(&temp, "\"%s\"", decode_mime(subject));
-#else
- HTSprintf0(&temp, "\"%s\"", subject);
-#endif
+ p = decode_mime(&subject);
+ HTSprintf0(&temp, "\"%s\"", NonNull(p));
if (reference) {
write_anchor(temp, reference);
FREE(reference);
@@ -2001,18 +1964,14 @@
}
FREE(temp);
- if (author[0] != '\0') {
+ if (author != NULL) {
PUTS(" - ");
if (LYListNewsDates)
START(HTML_I);
-#ifdef SH_EX /* for MIME */
- PUTS(decode_mime(author));
-#else
- PUTS(author);
-#endif
+ PUTS(decode_mime(&author));
if (LYListNewsDates)
END(HTML_I);
- author[0] = '\0';
+ FREE(author);
}
if (date) {
if (!diagnostic) {
@@ -2055,6 +2014,8 @@
MAYBE_END(HTML_LI);
} /* Handle response to HEAD request */
} /* Loop over article */
+ FREE(author);
+ FREE(subject);
} /* If read headers */
PUTC('\n');
if (LYListNewsNumbers)