gww@marduk.UUCP (Gary Winiger) (09/05/87)
Subject: Mail dereferences null pointers. +Fix Index: ucb/Mail 4.3BSD +Fix Description: Both head.c and optim.c can cause null pointers to be dereferneced. Repeat-By: Inspection of the code. These happened some time ago, but I didn't get to posting them. Now in the process of porting 4.3, I'm going back through all my 4.2 bug fixes. Fix: The attached code corrects the problem at Elxsi. Gary.. {ucbvax!sun,lll-lcc!lll-tis,amdahl!altos86,bridge2}!elxsi!gww --------- cut --------- snip --------- :.,$w diff ------------- *** /tmp/,RCSt1001196 Fri Dec 19 17:56:40 1986 --- head.c Fri Dec 19 17:56:18 1986 *************** *** 1,5 **** --- 1,8 ---- /* * $Log: head.c,v $ + * Revision 1.2 86/12/19 17:55:54 gww + * Get rid of null pointer references. + * * Revision 1.1 86/12/19 17:40:09 gww * Initial revision * *************** *** 11,17 **** */ #ifndef lint ! static char *ERcsId = "$Header: head.c,v 1.1 86/12/19 17:40:09 gww Exp $ ENIX BSD"; static char *sccsid = "@(#)head.c 5.2 (Berkeley) 6/21/85"; #endif not lint --- 14,20 ---- */ #ifndef lint ! static char *ERcsId = "$Header: head.c,v 1.2 86/12/19 17:55:54 gww Exp $ ENIX BSD"; static char *sccsid = "@(#)head.c 5.2 (Berkeley) 6/21/85"; #endif not lint *************** *** 95,101 **** dp = nextword(cp, word); if (!equal(word, "")) hl->l_from = copyin(word, &sp); ! if (strncmp(dp, "tty", 3) == 0) { cp = nextword(dp, word); hl->l_tty = copyin(word, &sp); if (cp != NOSTR) --- 98,104 ---- dp = nextword(cp, word); if (!equal(word, "")) hl->l_from = copyin(word, &sp); ! if (dp && (strncmp(dp, "tty", 3) == 0)) { cp = nextword(dp, word); hl->l_tty = copyin(word, &sp); if (cp != NOSTR) *************** *** 295,310 **** */ any(ch, str) ! char *str; { register char *f; ! register c; ! ! f = str; ! c = ch; ! while (*f) ! if (c == *f++) ! return(1); return(0); } --- 298,313 ---- */ any(ch, str) ! register char ch; ! register char *str; { register char *f; ! if (f=str) ! { ! while (*f) ! if (ch == *f++) ! return(1); ! } return(0); } *** /tmp/,RCSt1001349 Fri Dec 19 18:31:45 1986 --- optim.c Fri Dec 19 18:31:25 1986 *************** *** 1,5 **** --- 1,8 ---- /* * $Log: optim.c,v $ + * Revision 1.2 86/12/19 18:31:12 gww + * Get rid of null pointer reference. + * * Revision 1.1 86/12/19 17:40:18 gww * Initial revision * *************** *** 11,17 **** */ #ifndef lint ! static char *ERcsId = "$Header: optim.c,v 1.1 86/12/19 17:40:18 gww Exp $ ENIX BSD"; static char *sccsid = "@(#)optim.c 5.5 (Berkeley) 11/2/85"; #endif not lint --- 14,20 ---- */ #ifndef lint ! static char *ERcsId = "$Header: optim.c,v 1.2 86/12/19 18:31:12 gww Exp $ ENIX BSD"; static char *sccsid = "@(#)optim.c 5.5 (Berkeley) 11/2/85"; #endif not lint *************** *** 53,59 **** if (cp == nbuf) return(name); *++cp = 0; ! strcat(nbuf, revarpa(name)); optim(nbuf, ret); cp = revarpa(ret); if (!icequal(name, cp)) --- 56,63 ---- if (cp == nbuf) return(name); *++cp = 0; ! if ((cp = revarpa(name)) != NOSTR) ! strcat(nbuf, cp); optim(nbuf, ret); cp = revarpa(ret); if (!icequal(name, cp)) *** /tmp/,RCSt1001583 Thu Aug 6 17:13:02 1987 --- optim.c Thu Aug 6 17:12:26 1987 *************** *** 1,5 **** --- 1,8 ---- /* * $Log: optim.c,v $ + * Revision 1.3 87/08/06 17:12:03 gww + * Get rid of another null pointer reference. + * * Revision 1.2 86/12/19 18:31:12 gww * Get rid of null pointer reference. * *************** *** 14,20 **** */ #ifndef lint ! static char *ERcsId = "$Header: optim.c,v 1.2 86/12/19 18:31:12 gww Exp $ ENIX BSD"; static char *sccsid = "@(#)optim.c 5.5 (Berkeley) 11/2/85"; #endif not lint --- 17,23 ---- */ #ifndef lint ! static char *ERcsId = "$Header: optim.c,v 1.3 87/08/06 17:12:03 gww Exp $ ENIX BSD"; static char *sccsid = "@(#)optim.c 5.5 (Berkeley) 11/2/85"; #endif not lint *************** *** 59,65 **** if ((cp = revarpa(name)) != NOSTR) strcat(nbuf, cp); optim(nbuf, ret); ! cp = revarpa(ret); if (!icequal(name, cp)) return(savestr(cp)); return(name); --- 62,69 ---- if ((cp = revarpa(name)) != NOSTR) strcat(nbuf, cp); optim(nbuf, ret); ! if ((cp = revarpa(ret)) == NOSTR) ! return(name); if (!icequal(name, cp)) return(savestr(cp)); return(name);