avoid problems with very long addresses
authorEric Allman <eric@ucbvax.Berkeley.EDU>
Mon, 29 Nov 1993 06:28:24 +0000 (22:28 -0800)
committerEric Allman <eric@ucbvax.Berkeley.EDU>
Mon, 29 Nov 1993 06:28:24 +0000 (22:28 -0800)
SCCS-vsn: usr.sbin/sendmail/src/parseaddr.c 8.19

usr/src/usr.sbin/sendmail/src/parseaddr.c

index 54e8e58..c4624c7 100644 (file)
@@ -7,7 +7,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)parseaddr.c        8.18 (Berkeley) %G%";
+static char sccsid[] = "@(#)parseaddr.c        8.19 (Berkeley) %G%";
 #endif /* not lint */
 
 #include "sendmail.h"
 #endif /* not lint */
 
 #include "sendmail.h"
@@ -103,6 +103,14 @@ parseaddr(addr, a, flags, delim, delimptr, e)
        if (delimptr == NULL)
                delimptr = &delimptrbuf;
 
        if (delimptr == NULL)
                delimptr = &delimptrbuf;
 
+       if (strlen(addr) >= MAXNAME)
+       {
+               usrerr("Name too long, %d characters max", MAXNAME - 1);
+               if (tTd(20, 1))
+                       printf("parseaddr-->NULL\n");
+               return NULL;
+       }
+
        pvp = prescan(addr, delim, pvpbuf, delimptr);
        if (pvp == NULL)
        {
        pvp = prescan(addr, delim, pvpbuf, delimptr);
        if (pvp == NULL)
        {
@@ -598,7 +606,11 @@ prescan(addr, delim, pvpbuf, delimptr)
        }
        CurEnv->e_to = saveto;
        if (av[0] == NULL)
        }
        CurEnv->e_to = saveto;
        if (av[0] == NULL)
+       {
+               if (tTd(22, 1))
+                       printf("prescan: null leading token\n");
                return (NULL);
                return (NULL);
+       }
        return (av);
 }
 \f/*
        return (av);
 }
 \f/*