summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: f7cc77d)
raw | patch | inline | side by side (parent: f7cc77d)
author | Linus Torvalds <torvalds@g5.osdl.org> | |
Wed, 27 Jul 2005 22:16:03 +0000 (15:16 -0700) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Thu, 28 Jul 2005 01:57:03 +0000 (18:57 -0700) |
We historically used to be very careful in fsck-cache, but when it was
re-written to use "parse_object()" instead of parsing everything by
hand, it lost a bit of the checks. This, together with the previous
commit, should make it do more proper commit object syntax checks.
Also add a "--strict" flag, which warns about the old-style "0664" file
mode bits, which shouldn't exist in modern trees, but that happened
early on in git trees and that the default git-fsck-cache thus silently
accepts.
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
re-written to use "parse_object()" instead of parsing everything by
hand, it lost a bit of the checks. This, together with the previous
commit, should make it do more proper commit object syntax checks.
Also add a "--strict" flag, which warns about the old-style "0664" file
mode bits, which shouldn't exist in modern trees, but that happened
early on in git trees and that the default git-fsck-cache thus silently
accepts.
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fsck-cache.c | patch | blob | history |
diff --git a/fsck-cache.c b/fsck-cache.c
index 8e21bf1327a60840273973c08216c1387aac95b8..c6603919cb9d7bdd686e10298b9e871a6898930e 100644 (file)
--- a/fsck-cache.c
+++ b/fsck-cache.c
static int show_unreachable = 0;
static int standalone = 0;
static int check_full = 0;
+static int check_strict = 0;
static int keep_cache_objects = 0;
static unsigned char head_sha1[20];
* bits..
*/
case S_IFREG | 0664:
- break;
+ if (!check_strict)
+ break;
default:
printf("tree %s has entry %o %s\n",
sha1_to_hex(item->object.sha1),
static int fsck_commit(struct commit *commit)
{
+ char *buffer = commit->buffer;
+ unsigned char sha1[20];
+
+ if (memcmp(buffer, "tree ", 5))
+ return -1;
+ if (get_sha1_hex(buffer+5, sha1) || buffer[45] != '\n')
+ return -1;
+ buffer += 46;
+ while (!memcmp(buffer, "parent ", 7)) {
+ if (get_sha1_hex(buffer+7, sha1) || buffer[47] != '\n')
+ return -1;
+ buffer += 48;
+ }
+ if (memcmp(buffer, "author ", 7))
+ return -1;
free(commit->buffer);
commit->buffer = NULL;
if (!commit->tree)
check_full = 1;
continue;
}
+ if (!strcmp(arg, "--strict")) {
+ check_strict = 1;
+ continue;
+ }
if (*arg == '-')
usage("git-fsck-cache [--tags] [[--unreachable] [--cache] [--standalone | --full] <head-sha1>*]");
}