page@ulowell.cs.ulowell.edu (Bob Page) (07/10/87)
Subject: msgs(1) doesn't filter garbage characters + FIX
Index: /usr/src/ucb/msgs/msgs.c 4.3BSD
Description:
Mail to msgs may contain non-printable characters which are
not filtered upon delivery. When reading the message, the
non-printable characters are delivered to the output device.
Repeat-By:
% echo ^V^G | mail -s "beep" msgs
% msgs
Sure, you might like control G and all the CSI stuff for
blink and bold, but your system tyrants will love control S.
Fix:
Apply this patch, which will filter the non-printable characters
upon reading. This isn't the best solution, but it's the one
finger(1) uses, so I duplicated it.
*** msgs.c.orig Thu Apr 10 12:20:43 1986
--- msgs.c Fri Jul 10 16:10:08 1987
***************
*** 464,470 ****
while (nlines < 6
&& fgets(inbuf, sizeof inbuf, newmsg)
&& inbuf[0] != '\n') {
! fputs(inbuf, stdout);
nlines++;
}
}
--- 464,481 ----
while (nlines < 6
&& fgets(inbuf, sizeof inbuf, newmsg)
&& inbuf[0] != '\n') {
! register i = 0;
! for (;;) {
! register char c = inbuf[i++];
! if (c == '\n') {
! putchar(c);
! break;
! }
! if (isprint(c) || isspace(c))
! putchar(c);
! else
! putchar(c ^ 100);
! }
nlines++;
}
}
***************
*** 590,596 ****
putc('\n', outf);
while (fgets(inbuf, sizeof inbuf, newmsg)) {
! fputs(inbuf, outf);
if (ferror(outf)) {
clearerr(outf);
break;
--- 601,618 ----
putc('\n', outf);
while (fgets(inbuf, sizeof inbuf, newmsg)) {
! register i = 0;
! for (;;) {
! register char c = inbuf[i++];
! if (c == '\n') {
! putc(c, outf);
! break;
! }
! if (isprint(c) || isspace(c))
! putc(c, outf);
! else
! putc(c ^ 100, outf);
! }
if (ferror(outf)) {
clearerr(outf);
break;
--
Bob Page, U of Lowell CS Dept. page@ulowell.{uucp,edu,csnet} matt@oddjob.UChicago.EDU (Matt Crawford) (07/11/87)
page@ulowell.cs.ulowell.edu (Bob Page) writes:
) Subject: msgs(1) doesn't filter garbage characters + FIX
) Index: /usr/src/ucb/msgs/msgs.c 4.3BSD
) ...
Unfortunately this fix propagates a bug in the 4.3 finger
program. Change all instances of "c ^ 100" to "c ^ 0100".
Matt Crawford
I can incant, decant and recant, but I can't cant.