]> git.ipfire.org Git - thirdparty/git.git/commitdiff
parse_commit(): describe more date-parsing failure modes
authorJeff King <peff@peff.net>
Thu, 27 Apr 2023 08:17:24 +0000 (04:17 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 27 Apr 2023 16:31:46 +0000 (09:31 -0700)
The previous few commits improved the parsing of dates in malformed
commit objects. But there's one big case left implicit: we may still
feed garbage to parse_timestamp(). This is preferable to trying to be
more strict, but let's document the thinking in a comment.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
commit.c

index a54b0a0df053c337af3a1a3061a7624d9e6c7ab8..73e883fe4543628b2baf2edcda5a385578ffba38 100644 (file)
--- a/commit.c
+++ b/commit.c
@@ -143,6 +143,15 @@ static timestamp_t parse_commit_date(const char *buf, const char *tail)
        /*
         * We know there is at least one digit (or dash), so we'll begin
         * parsing there and stop at worst case at eol.
+        *
+        * Note that we may feed parse_timestamp() extra characters here if the
+        * commit is malformed, and it will parse as far as it can. For
+        * example, "123foo456" would return "123". That might be questionable
+        * (versus returning "0"), but it would help in a hypothetical case
+        * like "123456+0100", where the whitespace from the timezone is
+        * missing. Since such syntactic errors may be baked into history and
+        * hard to correct now, let's err on trying to make our best guess
+        * here, rather than insist on perfect syntax.
         */
        return parse_timestamp(dateptr, NULL, 10);
 }