svn commit: r355370 - stable/11/usr.bin/tip/tip
Eric van Gyzen
vangyzen at FreeBSD.org
Tue Dec 3 22:59:56 UTC 2019
Author: vangyzen
Date: Tue Dec 3 22:59:55 2019
New Revision: 355370
URL: https://svnweb.freebsd.org/changeset/base/355370
Log:
MFC r354624
tip/cu: check for EOF on input on the local side
If cu reads an EOF on the input side, it goes into a tight loop
sending a garbage byte to the remote. With this change, it exits
gracefully, along with its child.
Sponsored by: Dell EMC Isilon
Modified:
stable/11/usr.bin/tip/tip/tip.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/usr.bin/tip/tip/tip.c
==============================================================================
--- stable/11/usr.bin/tip/tip/tip.c Tue Dec 3 22:57:10 2019 (r355369)
+++ stable/11/usr.bin/tip/tip/tip.c Tue Dec 3 22:59:55 2019 (r355370)
@@ -250,7 +250,6 @@ cucommon:
tipin();
else
tipout();
- /*NOTREACHED*/
exit(0);
}
@@ -400,11 +399,16 @@ tipin(void)
}
while (1) {
- gch = getchar()&STRIP_PAR;
- /* XXX does not check for EOF */
+ gch = getchar();
+ if (gch == EOF)
+ return;
+ gch = gch & STRIP_PAR;
if ((gch == character(value(ESCAPE))) && bol) {
if (!noesc) {
- if (!(gch = escape()))
+ gch = escape();
+ if (gch == EOF)
+ return;
+ if (gch == 0)
continue;
}
} else if (!cumode && gch == character(value(RAISECHAR))) {
@@ -418,7 +422,10 @@ tipin(void)
printf("\r\n");
continue;
} else if (!cumode && gch == character(value(FORCE)))
- gch = getchar()&STRIP_PAR;
+ gch = getchar();
+ if (gch == EOF)
+ return;
+ gch = gch & STRIP_PAR;
bol = any(gch, value(EOL));
if (boolean(value(RAISE)) && islower(gch))
gch = toupper(gch);
@@ -442,8 +449,10 @@ escape(void)
esctable_t *p;
char c = character(value(ESCAPE));
- gch = (getchar()&STRIP_PAR);
- /* XXX does not check for EOF */
+ gch = getchar();
+ if (gch == EOF)
+ return (EOF);
+ gch = gch & STRIP_PAR;
for (p = etable; p->e_char; p++)
if (p->e_char == gch) {
if ((p->e_flags&PRIV) && uid)
More information about the svn-src-stable-11
mailing list