Message ID | 20190401215334.18678-1-rybak.a.v@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2,1/2] mailinfo: use starts_with() for clarity | expand |
On Mon, Apr 01, 2019 at 11:53:33PM +0200, Andrei Rybak wrote: > Existing checks using memcmp(3) never read past the end of the line, > because all substrings we are interested in are two characters long, and > the outer loop guarantees we have at least one character. So at most we > will look at the NUL. > > However, this is too subtle and may lead to bugs in code which copies > this behavior without realizing substring length requirement. So use > starts_with() instead, which will stop at NUL regardless of the length > of the prefix. Remove extra pair of parentheses while we are here. > > Helped-by: Jeff King <peff@peff.net> > Signed-off-by: Andrei Rybak <rybak.a.v@gmail.com> > --- > > On Mon, Apr 01, 2019 at 06:11:57 -0400, Jeff King wrote: > > I wonder if it's worth re-writing it like: > > Turned Peff's suggestion into a patch. Thanks. I think this may be worth doing regardless of what happens with patch 2. -Peff
diff --git a/mailinfo.c b/mailinfo.c index b395adbdf2..f4aaa89788 100644 --- a/mailinfo.c +++ b/mailinfo.c @@ -693,8 +693,8 @@ static int is_scissors_line(const char *line) perforation++; continue; } - if ((!memcmp(c, ">8", 2) || !memcmp(c, "8<", 2) || - !memcmp(c, ">%", 2) || !memcmp(c, "%<", 2))) { + if (starts_with(c, ">8") || starts_with(c, "8<") || + starts_with(c, ">%") || starts_with(c, "%<")) { in_perforation = 1; perforation += 2; scissors += 2;