When fsck_ident() identifies a problem with the ident, it should still
advance the pointer to the next line so that fsck can continue in the
case of a mere warning.

Signed-off-by: Johannes Schindelin <johannes.schinde...@gmx.de>
---
 fsck.c | 49 +++++++++++++++++++++++++++----------------------
 1 file changed, 27 insertions(+), 22 deletions(-)

diff --git a/fsck.c b/fsck.c
index ff50a87..256f567 100644
--- a/fsck.c
+++ b/fsck.c
@@ -444,40 +444,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_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;
 }
 
-- 
2.0.0.rc3.9669.g840d1f9

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to