]> git.ipfire.org Git - thirdparty/git.git/commitdiff
mailinfo: use starts_with() when checking scissors
authorAndrei Rybak <rybak.a.v@gmail.com>
Tue, 8 Jun 2021 20:48:41 +0000 (22:48 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 9 Jun 2021 02:13:07 +0000 (11:13 +0900)
Existing checks for scissors characters 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>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
mailinfo.c

index 5681d9130db6f54971cf2b966d1743b87a130b86..6f3bb5a22e28cdc6788196c73ac40b4b50db183a 100644 (file)
@@ -705,8 +705,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;