aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuslan Ermilov <ru@FreeBSD.org>2001-07-19 08:07:09 +0000
committerRuslan Ermilov <ru@FreeBSD.org>2001-07-19 08:07:09 +0000
commit1a084f197dfb714e530b40393f2930ed42c7ca01 (patch)
treed45493f65bc83c01389f3c411358f98025ecb86b
parenta4c53d91847dcc3ed73b04d98f57047a96f0bf94 (diff)
downloadsrc-1a084f197dfb714e530b40393f2930ed42c7ca01.tar.gz
src-1a084f197dfb714e530b40393f2930ed42c7ca01.zip
Fixed the race caused by not checking the result of fgets(3):
/usr/bin/env MALLOC_OPTIONS=J banner </dev/null PR: bin/29074 Fixed the problem when banner(6) would eat last character: echo -n a | banner MFC after: 1 week
Notes
Notes: svn path=/head/; revision=79939
-rw-r--r--usr.bin/banner/banner.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/usr.bin/banner/banner.c b/usr.bin/banner/banner.c
index c89d433f5ad9..7134c133a3c1 100644
--- a/usr.bin/banner/banner.c
+++ b/usr.bin/banner/banner.c
@@ -1075,9 +1075,16 @@ main(int argc, char *argv[])
if ((message = malloc((size_t)MAXMSG)) == NULL)
err(1, "malloc");
fprintf(stderr,"Message: ");
- (void)fgets(message, MAXMSG, stdin);
- nchars = strlen(message);
- message[nchars--] = '\0'; /* get rid of newline */
+ if (fgets(message, MAXMSG, stdin) == NULL) {
+ nchars = 0;
+ message[0] = '\0';
+ } else {
+ nchars = strlen(message);
+
+ /* Get rid of newline. */
+ if (message[nchars - 1] == '\n')
+ message[--nchars] = '\0';
+ }
}
/* some debugging print statements */