diff options
| -rw-r--r-- | dir.c | 10 | ||||
| -rwxr-xr-x | t/t0008-ignores.sh | 8 | ||||
| -rwxr-xr-x | t/t6112-rev-list-filters-objects.sh | 12 |
3 files changed, 28 insertions, 2 deletions
@@ -32,6 +32,12 @@ #include "tree.h" #include "hex.h" + /* + * The maximum size of a pattern/exclude file. If the file exceeds this size + * we will ignore it. + */ +#define PATTERN_MAX_FILE_SIZE (100 * 1024 * 1024) + /* * Tells read_directory_recursive how a file or directory should be treated. * Values are ordered by significance, e.g. if a directory contains both @@ -1137,7 +1143,7 @@ static int add_patterns(const char *fname, const char *base, int baselen, } } - if (size > INT_MAX) { + if (size > PATTERN_MAX_FILE_SIZE) { warning("ignoring excessively large pattern file: %s", fname); free(buf); return -1; @@ -1199,7 +1205,7 @@ int add_patterns_from_blob_to_list( if (r != 1) return r; - if (size > INT_MAX) { + if (size > PATTERN_MAX_FILE_SIZE) { warning("ignoring excessively large pattern blob: %s", oid_to_hex(oid)); free(buf); diff --git a/t/t0008-ignores.sh b/t/t0008-ignores.sh index 361446b2f4..02a18d4fdb 100755 --- a/t/t0008-ignores.sh +++ b/t/t0008-ignores.sh @@ -945,4 +945,12 @@ test_expect_success SYMLINKS 'symlinks not respected in-tree' ' test_grep "unable to access.*gitignore" err ' +test_expect_success EXPENSIVE 'large exclude file ignored in tree' ' + test_when_finished "rm .gitignore" && + dd if=/dev/zero of=.gitignore bs=101M count=1 && + git ls-files -o --exclude-standard 2>err && + echo "warning: ignoring excessively large pattern file: .gitignore" >expect && + test_cmp expect err +' + test_done diff --git a/t/t6112-rev-list-filters-objects.sh b/t/t6112-rev-list-filters-objects.sh index 43e1afd44c..0387f35a32 100755 --- a/t/t6112-rev-list-filters-objects.sh +++ b/t/t6112-rev-list-filters-objects.sh @@ -701,4 +701,16 @@ test_expect_success 'expand blob limit in protocol' ' grep "blob:limit=1024" trace ' +test_expect_success EXPENSIVE 'large sparse filter file ignored' ' + blob=$(dd if=/dev/zero bs=101M count=1 | + git hash-object -w --stdin) && + test_must_fail \ + git rev-list --all --objects --filter=sparse:oid=$blob 2>err && + cat >expect <<-EOF && + warning: ignoring excessively large pattern blob: $blob + fatal: unable to parse sparse filter data in $blob + EOF + test_cmp expect err +' + test_done |
