john@moncol.UUCP (John Ruschmeyer) (01/30/86)
Program: recmail.c (2.10.3 4.3 bsd beta)
Problem: The program incorrectly handles a line containing a cc: with no
destinations in that it attemps to send a copy of the mail to
noone. Needless to say, this fails, leaving the user a copy of
his mail in dead.letter and a note from recmail.
Action: Apply the following context diff:
*** recmail.c.orig Wed Jan 29 02:06:22 1986
--- recmail.c Wed Jan 29 22:47:27 1986
***************
*** 52,59
break;
if (strncmp(linebuf, "To: ", 4) == 0 ||
strncmp(linebuf, "to: ", 4) == 0 ||
! strncmp(linebuf, "TO: ", 4) == 0 ||
! strncmp(linebuf, "Cc: ", 4) == 0 ||
strncmp(linebuf, "cc: ", 4) == 0 ||
strncmp(linebuf, "CC: ", 4) == 0)
addrecips(linebuf+4);
--- 52,60 -----
break;
if (strncmp(linebuf, "To: ", 4) == 0 ||
strncmp(linebuf, "to: ", 4) == 0 ||
! strncmp(linebuf, "TO: ", 4) == 0)
! addrecips(linebuf+4);
! else if (strncmp(linebuf, "Cc: ", 4) == 0 ||
strncmp(linebuf, "cc: ", 4) == 0 ||
strncmp(linebuf, "CC: ", 4) == 0)
if (linebuf[4] != '\n')
***************
*** 57,62
strncmp(linebuf, "cc: ", 4) == 0 ||
strncmp(linebuf, "CC: ", 4) == 0)
! addrecips(linebuf+4);
}
if (!feof(stdin)) {
while (fgets(linebuf, sizeof linebuf, stdin) != NULL) {
--- 58,64 -----
strncmp(linebuf, "cc: ", 4) == 0 ||
strncmp(linebuf, "CC: ", 4) == 0)
! if (linebuf[4] != '\n')
! addrecips(linebuf+4);
}
if (!feof(stdin)) {
while (fgets(linebuf, sizeof linebuf, stdin) != NULL) {
--
Name: John Ruschmeyer
US Mail: Monmouth College, W. Long Branch, NJ 07764
Phone: (201) 571-3451
UUCP: ...!vax135!petsd!moncol!john ...!princeton!moncol!john
...!pesnta!moncol!john
Give an ape control of its environment and it will fill the world with bananas.brad@esc-bb.UUCP (Brad Benton) (02/21/86)
In article <158@moncol.UUCP> john@moncol.UUCP (John Ruschmeyer) writes: >Program: recmail.c (2.10.3 4.3 bsd beta) > >Problem: The program incorrectly handles a line containing a cc: with no > destinations in that it attemps to send a copy of the mail to > noone. Needless to say, this fails, leaving the user a copy of > his mail in dead.letter and a note from recmail. > Further explication of the Problem: In addrecips (the routine that parses the To: and Cc: lines) it is possible to come up with a zero-length name by having trailing garbage (blanks, commas, etc.) in the line. But addrecips doesn't notice this and goes ahead and collects a zero-length name for the mailer, which then is confronted with the user "" (in addition to all of the names validly parsed). Action: Also consider the following context diff. The advantage of the following code is that with it, recmail will correctly handle all cases in which a zero-length recipient is parsed on any line that is passed to addrecips (both To: and Cc: lines). *** recmail.c.orig Thu Feb 20 08:33:07 1986 --- recmail.c Thu Feb 20 22:43:40 1986 *************** *** 145,150 for (front=line; front < tail; ) { while (!isok(*front) && front < tail) front++; for (back=front; isok(*back); back++) ; *back=0; --- 145,152 ----- for (front=line; front < tail; ) { while (!isok(*front) && front < tail) front++; + if (front >= tail) + break; /* skip end-of-line garbage */ for (back=front; isok(*back); back++) ; *back=0; -- --brad benton ..!{gatech,seismo,ihnp4}!ut-sally!im4u!esc-bb!brad