t: add basic tests for our SHA-1 implementation
[gitweb.git] / fsck.c
diff --git a/fsck.c b/fsck.c
index 4c643f1d40109dcc8c0d2816826ac08a9b6cc8e9..38624d251126ed5a75cd6b8e8b7adfddbb29b283 100644 (file)
--- a/fsck.c
+++ b/fsck.c
@@ -66,6 +66,8 @@ static struct oidset gitmodules_done = OIDSET_INIT;
        FUNC(GITMODULES_LARGE, ERROR) \
        FUNC(GITMODULES_NAME, ERROR) \
        FUNC(GITMODULES_SYMLINK, ERROR) \
+       FUNC(GITMODULES_URL, ERROR) \
+       FUNC(GITMODULES_PATH, ERROR) \
        /* warnings */ \
        FUNC(BAD_FILEMODE, WARN) \
        FUNC(EMPTY_NAME, WARN) \
@@ -190,6 +192,20 @@ static void init_skiplist(struct fsck_options *options, const char *path)
                die("Could not open skip list: %s", path);
        while (!strbuf_getline(&sb, fp)) {
                const char *p;
+               const char *hash;
+
+               /*
+                * Allow trailing comments, leading whitespace
+                * (including before commits), and empty or whitespace
+                * only lines.
+                */
+               hash = strchr(sb.buf, '#');
+               if (hash)
+                       strbuf_setlen(&sb, hash - sb.buf);
+               strbuf_trim(&sb);
+               if (!sb.len)
+                       continue;
+
                if (parse_oid_hex(sb.buf, &oid, &p) || *p != '\0')
                        die("Invalid SHA-1: %s", sb.buf);
                oidset_insert(&options->skiplist, &oid);
@@ -972,6 +988,18 @@ static int fsck_gitmodules_fn(const char *var, const char *value, void *vdata)
                                    FSCK_MSG_GITMODULES_NAME,
                                    "disallowed submodule name: %s",
                                    name);
+       if (!strcmp(key, "url") && value &&
+           looks_like_command_line_option(value))
+               data->ret |= report(data->options, data->obj,
+                                   FSCK_MSG_GITMODULES_URL,
+                                   "disallowed submodule url: %s",
+                                   value);
+       if (!strcmp(key, "path") && value &&
+           looks_like_command_line_option(value))
+               data->ret |= report(data->options, data->obj,
+                                   FSCK_MSG_GITMODULES_PATH,
+                                   "disallowed submodule path: %s",
+                                   value);
        free(name);
 
        return 0;