]> git.ipfire.org Git - thirdparty/git.git/blobdiff - fsck.c
fsck: make fsck_ident() warn-friendly
[thirdparty/git.git] / fsck.c
diff --git a/fsck.c b/fsck.c
index 4748f1e23aacfcce03ca3b3aa5b511027a4bd505..8a6ecf31a59b09dff260c7520034a106a420a289 100644 (file)
--- a/fsck.c
+++ b/fsck.c
@@ -482,40 +482,45 @@ static int require_end_of_header(const void *data, unsigned long size,
 
 static int fsck_ident(const char **ident, struct object *obj, struct fsck_options *options)
 {
+       const char *p = *ident;
        char *end;
 
-       if (**ident == '<')
+       *ident = strchrnul(*ident, '\n');
+       if (**ident == '\n')
+               (*ident)++;
+
+       if (*p == '<')
                return report(options, obj, FSCK_MSG_MISSING_NAME_BEFORE_EMAIL, "invalid author/committer line - missing space before email");
-       *ident += strcspn(*ident, "<>\n");
-       if (**ident == '>')
+       p += strcspn(p, "<>\n");
+       if (*p == '>')
                return report(options, obj, FSCK_MSG_BAD_NAME, "invalid author/committer line - bad name");
-       if (**ident != '<')
+       if (*p != '<')
                return report(options, obj, FSCK_MSG_MISSING_EMAIL, "invalid author/committer line - missing email");
-       if ((*ident)[-1] != ' ')
+       if (p[-1] != ' ')
                return report(options, obj, FSCK_MSG_MISSING_SPACE_BEFORE_EMAIL, "invalid author/committer line - missing space before email");
-       (*ident)++;
-       *ident += strcspn(*ident, "<>\n");
-       if (**ident != '>')
+       p++;
+       p += strcspn(p, "<>\n");
+       if (*p != '>')
                return report(options, obj, FSCK_MSG_BAD_EMAIL, "invalid author/committer line - bad email");
-       (*ident)++;
-       if (**ident != ' ')
+       p++;
+       if (*p != ' ')
                return report(options, obj, FSCK_MSG_MISSING_SPACE_BEFORE_DATE, "invalid author/committer line - missing space before date");
-       (*ident)++;
-       if (**ident == '0' && (*ident)[1] != ' ')
+       p++;
+       if (*p == '0' && p[1] != ' ')
                return report(options, obj, FSCK_MSG_ZERO_PADDED_DATE, "invalid author/committer line - zero-padded date");
-       if (date_overflows(strtoul(*ident, &end, 10)))
+       if (date_overflows(strtoul(p, &end, 10)))
                return report(options, obj, FSCK_MSG_BAD_DATE_OVERFLOW, "invalid author/committer line - date causes integer overflow");
-       if (end == *ident || *end != ' ')
+       if ((end == p || *end != ' '))
                return report(options, obj, FSCK_MSG_BAD_DATE, "invalid author/committer line - bad date");
-       *ident = end + 1;
-       if ((**ident != '+' && **ident != '-') ||
-           !isdigit((*ident)[1]) ||
-           !isdigit((*ident)[2]) ||
-           !isdigit((*ident)[3]) ||
-           !isdigit((*ident)[4]) ||
-           ((*ident)[5] != '\n'))
+       p = end + 1;
+       if ((*p != '+' && *p != '-') ||
+           !isdigit(p[1]) ||
+           !isdigit(p[2]) ||
+           !isdigit(p[3]) ||
+           !isdigit(p[4]) ||
+           (p[5] != '\n'))
                return report(options, obj, FSCK_MSG_BAD_TIMEZONE, "invalid author/committer line - bad time zone");
-       (*ident) += 6;
+       p += 6;
        return 0;
 }