From: Junio C Hamano Date: Fri, 28 Mar 2014 20:51:24 +0000 (-0700) Subject: Merge branch 'ys/fsck-commit-parsing' X-Git-Tag: v2.0.0-rc0~51 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=40adf520a306220ebaedee72528efd1d0c4840ce;p=git-core%2Fgit.git Merge branch 'ys/fsck-commit-parsing' * ys/fsck-commit-parsing: fsck.c:fsck_commit(): use skip_prefix() to verify and skip constant fsck.c:fsck_ident(): ident points at a const string --- 40adf520a306220ebaedee72528efd1d0c4840ce diff --cc fsck.c index 64bf279fd,6aab23b84..b3022ad98 --- a/fsck.c +++ b/fsck.c @@@ -243,10 -243,8 +243,10 @@@ static int fsck_tree(struct tree *item return retval; } - static int fsck_ident(char **ident, struct object *obj, fsck_error error_func) + static int fsck_ident(const char **ident, struct object *obj, fsck_error error_func) { + char *end; + if (**ident == '<') return error_func(obj, FSCK_ERROR, "invalid author/committer line - missing space before email"); *ident += strcspn(*ident, "<>\n"); @@@ -290,15 -287,20 +290,17 @@@ static int fsck_commit(struct commit *c int parents = 0; int err; - if (memcmp(buffer, "tree ", 5)) - if (commit->date == ULONG_MAX) - return error_func(&commit->object, FSCK_ERROR, "invalid author/committer line"); - + buffer = skip_prefix(buffer, "tree "); + if (!buffer) return error_func(&commit->object, FSCK_ERROR, "invalid format - expected 'tree' line"); - if (get_sha1_hex(buffer+5, tree_sha1) || buffer[45] != '\n') + if (get_sha1_hex(buffer, tree_sha1) || buffer[40] != '\n') return error_func(&commit->object, FSCK_ERROR, "invalid 'tree' line format - bad sha1"); - buffer += 46; - while (!memcmp(buffer, "parent ", 7)) { - if (get_sha1_hex(buffer+7, sha1) || buffer[47] != '\n') + buffer += 41; + while ((tmp = skip_prefix(buffer, "parent "))) { + buffer = tmp; + if (get_sha1_hex(buffer, sha1) || buffer[40] != '\n') return error_func(&commit->object, FSCK_ERROR, "invalid 'parent' line format - bad sha1"); - buffer += 48; + buffer += 41; parents++; } graft = lookup_commit_graft(commit->object.sha1);