[prev in list] [next in list] [prev in thread] [next in thread]
List: git
Subject: [PATCH v4 07/19] fsck: Make =?UTF-8?Q?fsck=5Fident=28=29=20warn-f?= =?UTF-8?Q?riendly?=
From: Johannes Schindelin <johannes.schindelin () gmx ! de>
Date: 2015-01-31 21:05:41
Message-ID: 8f24728329cfdac09800e4bb249b44486e459bc2.1422737997.git.johannes.schindelin () gmx ! de
[Download RAW message or body]
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.schindelin@gmx.de>
---
fsck.c | 49 +++++++++++++++++++++++++++----------------------
1 file changed, 27 insertions(+), 22 deletions(-)
diff --git a/fsck.c b/fsck.c
index e52b027..cd3ee48 100644
--- a/fsck.c
+++ b/fsck.c
@@ -459,40 +459,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.2.0.33.gc18b867
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic