NOTE: this is the second revision of the patch

Apply by doing:
	cd /usr/src
	patch -p0 < 005_sendmail.patch

And then rebuild and install sendmail:
	cd gnu/usr.sbin/sendmail
	make depend
	make
	make install

Restart sendmail if necessary:
	kill -HUP `sed q /var/run/sendmail.pid`

Index: gnu/usr.sbin/sendmail/sendmail/parseaddr.c
===================================================================
RCS file: /cvs/src/gnu/usr.sbin/sendmail/sendmail/parseaddr.c,v
retrieving revision 1.16
diff -u -r1.16 parseaddr.c
--- gnu/usr.sbin/sendmail/sendmail/parseaddr.c	29 Mar 2003 19:44:01 -0000	1.16
+++ gnu/usr.sbin/sendmail/sendmail/parseaddr.c	17 Sep 2003 17:14:50 -0000
@@ -700,7 +700,11 @@
 						addr[MAXNAME] = '\0';
 	returnnull:
 					if (delimptr != NULL)
+					{
+						if (p > addr)
+							p--;
 						*delimptr = p;
+					}
 					CurEnv->e_to = saveto;
 					return NULL;
 				}
@@ -1000,6 +1004,8 @@
 	}
 	if (pvp == NULL)
 		return EX_USAGE;
+	if (maxatom <= 0)
+		return EX_USAGE;
 
 	/*
 	**  Run through the list of rewrite rules, applying
@@ -1866,6 +1872,7 @@
 	register ENVELOPE *e;
 {
 	bool tempfail = false;
+	int maxatom;
 	struct mailer **mp;
 	register struct mailer *m;
 	register char *p;
@@ -1880,6 +1887,7 @@
 		printav(tv);
 	}
 
+	maxatom = MAXATOM;
 	if (a == NULL)
 		a = (ADDRESS *) sm_rpool_malloc_x(e->e_rpool, sizeof *a);
 	memset((char *) a, '\0', sizeof *a);
@@ -1919,14 +1927,22 @@
 		return a;
 	}
 	mname = *++tv;
+	--maxatom;
 
 	/* extract host and user portions */
 	if (*++tv != NULL && (**tv & 0377) == CANONHOST)
+	{
 		hostp = ++tv;
+		--maxatom;
+	}
 	else
 		hostp = NULL;
+	--maxatom;
 	while (*tv != NULL && (**tv & 0377) != CANONUSER)
+	{
 		tv++;
+		--maxatom;
+	}
 	if (*tv == NULL)
 	{
 		syserr("554 5.3.5 buildaddr: no user");
@@ -1937,6 +1953,7 @@
 	else if (hostp != NULL)
 		cataddr(hostp, tv - 1, hbuf, sizeof hbuf, '\0');
 	cataddr(++tv, NULL, ubuf, sizeof ubuf, ' ');
+	--maxatom;
 
 	/* save away the host name */
 	if (sm_strcasecmp(mname, "error") == 0)
@@ -2041,6 +2058,7 @@
 	{
 		p++;
 		tv++;
+		--maxatom;
 		a->q_flags |= QNOTREMOTE;
 	}
 
@@ -2071,11 +2089,11 @@
 	    !bitset(RF_SENDERADDR|RF_HEADERADDR, flags))
 	{
 		/* sender addresses done later */
-		(void) REWRITE(tv, 2, e);
+		(void) rewrite(tv, 2, 0, e, maxatom);
 		if (m->m_re_rwset > 0)
-		       (void) REWRITE(tv, m->m_re_rwset, e);
+		       (void) rewrite(tv, m->m_re_rwset, 0, e, maxatom);
 	}
-	(void) REWRITE(tv, 4, e);
+	(void) rewrite(tv, 4, 0, e, maxatom);
 
 	/* save the result for the command line/RCPT argument */
 	cataddr(tv, NULL, ubuf, sizeof ubuf, '\0');
