summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/cmd/upas/fs/dat.h1
-rw-r--r--sys/src/cmd/upas/fs/fs.c16
-rw-r--r--sys/src/cmd/upas/fs/header.c2
-rw-r--r--sys/src/cmd/upas/fs/mbox.c12
4 files changed, 11 insertions, 20 deletions
diff --git a/sys/src/cmd/upas/fs/dat.h b/sys/src/cmd/upas/fs/dat.h
index 3e3fb48bb..f4543e22f 100644
--- a/sys/src/cmd/upas/fs/dat.h
+++ b/sys/src/cmd/upas/fs/dat.h
@@ -129,7 +129,6 @@ struct Message {
char converted;
char encoding;
char decoded;
- char mimeflag;
Message *next;
Message *part;
diff --git a/sys/src/cmd/upas/fs/fs.c b/sys/src/cmd/upas/fs/fs.c
index c1e3109b3..c77d25462 100644
--- a/sys/src/cmd/upas/fs/fs.c
+++ b/sys/src/cmd/upas/fs/fs.c
@@ -1517,12 +1517,12 @@ struct Ignorance
char *str;
int len;
};
-Ignorance *ignorance;
+static Ignorance *ignorance;
/*
* read the file of headers to ignore
*/
-void
+static void
readignore(void)
{
char *p;
@@ -1554,14 +1554,14 @@ readignore(void)
Bterm(b);
}
-int
-ignore(char *p)
+static int
+ignore(char *p, int n)
{
Ignorance *i;
readignore();
for(i = ignorance; i != nil; i = i->next)
- if(cistrncmp(i->str, p, i->len) == 0)
+ if(i->len <= n && cistrncmp(i->str, p, i->len) == 0)
return 1;
return 0;
}
@@ -1580,9 +1580,9 @@ readheader(Message *m, char *buf, int off, int cnt)
/* copy in good headers */
while(cnt > 0 && p < e){
- n = hdrlen(p, e);
- assert(n > 0);
- if(ignore(p)){
+ if((n = hdrlen(p, e)) <= 0)
+ break;
+ if(ignore(p, n)){
p += n;
continue;
}
diff --git a/sys/src/cmd/upas/fs/header.c b/sys/src/cmd/upas/fs/header.c
index c6ffe8216..b55415018 100644
--- a/sys/src/cmd/upas/fs/header.c
+++ b/sys/src/cmd/upas/fs/header.c
@@ -10,7 +10,7 @@ hdrlen(char *p, char *e)
ep = p;
do {
- ep = strchr(ep, '\n');
+ ep = memchr(ep, '\n', e - ep);
if(ep == nil){
ep = e;
break;
diff --git a/sys/src/cmd/upas/fs/mbox.c b/sys/src/cmd/upas/fs/mbox.c
index 5fa9898e6..0c7f440ff 100644
--- a/sys/src/cmd/upas/fs/mbox.c
+++ b/sys/src/cmd/upas/fs/mbox.c
@@ -393,8 +393,6 @@ haschild(Message *m, int i)
{
for(m = m->part; m && i; i--)
m = m->next;
- if(m)
- m->mimeflag = 0;
return m;
}
@@ -426,11 +424,8 @@ parseattachments(Message *m, Mailbox *mb)
}
/* no boundary, we're done */
if(x == nil){
- if(nm != nil){
+ if(nm != nil)
nm->rbend = nm->bend = nm->end = m->bend;
- if(nm->end == nm->start)
- nm->mimeflag |= Mtrunc;
- }
break;
}
/* boundary must be at the start of a line */
@@ -475,8 +470,6 @@ parseattachments(Message *m, Mailbox *mb)
assert(nm->ballocd == 0);
nm->start = nm->header = nm->body = nm->rbody = m->body;
nm->end = nm->bend = nm->rbend = m->bend;
- if(nm->end == nm->start)
- nm->mimeflag |= Mtrunc;
nm->size = nm->end - nm->start;
parse(mb, nm, 0, 0);
cachehash(mb, nm); /* botchy place for this */
@@ -497,7 +490,7 @@ parseheaders(Mailbox *mb, Message *m, int addfrom, int justmime)
i0 = Mhead;
s = emalloc(2048);
e = s + 2048 - 1;
- while((n = hdrlen(p, m->end)) != 0){
+ while((n = hdrlen(p, m->end)) > 0){
if(n > e - s){
s = erealloc(s, n);
e = s + n - 1;
@@ -598,7 +591,6 @@ void
parse(Mailbox *mb, Message *m, int addfrom, int justmime)
{
sanemsg(m);
- assert(m->end - m->start > 0 || (m->mimeflag&Mtrunc) != 0 && m->end - m->start == 0);
if((m->cstate & Cheader) == 0)
parseheaders(mb, m, addfrom, justmime);
parsebody(m, mb);