From 7443b9649a6d83443439ae95458434038313b42b Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Tue, 24 Mar 2015 20:54:39 -0400 Subject: [PATCH] Fix missing NUL-terminator in grep Currently, grep read()s into a buffer and then uses the buffer as a string. Since there's no NUL-terminator, this can cause it to falsely identify line breaks and matches from leftover data on earlier lines and, if a line fills up the entire buffer, to read past the end of the buffer. Fix this by NUL-terminating any data returned by read(). Thanks to Keiichi Watanabe for the report. --- grep.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/grep.c b/grep.c index 2fbf5b6cb1..28ff11a8da 100644 --- a/grep.c +++ b/grep.c @@ -14,8 +14,9 @@ grep(char *pattern, int fd) char *p, *q; m = 0; - while((n = read(fd, buf+m, sizeof(buf)-m)) > 0){ + while((n = read(fd, buf+m, sizeof(buf)-m-1)) > 0){ m += n; + buf[m] = '\0'; p = buf; while((q = strchr(p, '\n')) != 0){ *q = 0;