Merge branch 'jk/cap-exclude-file-size' into maint-2.45
An overly large ".gitignore" files are now rejected silently. * jk/cap-exclude-file-size: dir.c: reduce max pattern file size to 100MB dir.c: skip .gitignore, etc larger than INT_MAXmaint
commit
f30e5332e4
20
dir.c
20
dir.c
|
@ -30,6 +30,13 @@
|
||||||
#include "symlinks.h"
|
#include "symlinks.h"
|
||||||
#include "trace2.h"
|
#include "trace2.h"
|
||||||
#include "tree.h"
|
#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.
|
* Tells read_directory_recursive how a file or directory should be treated.
|
||||||
|
@ -1148,6 +1155,12 @@ static int add_patterns(const char *fname, const char *base, int baselen,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (size > PATTERN_MAX_FILE_SIZE) {
|
||||||
|
warning("ignoring excessively large pattern file: %s", fname);
|
||||||
|
free(buf);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
add_patterns_from_buffer(buf, size, base, baselen, pl);
|
add_patterns_from_buffer(buf, size, base, baselen, pl);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1204,6 +1217,13 @@ int add_patterns_from_blob_to_list(
|
||||||
if (r != 1)
|
if (r != 1)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
if (size > PATTERN_MAX_FILE_SIZE) {
|
||||||
|
warning("ignoring excessively large pattern blob: %s",
|
||||||
|
oid_to_hex(oid));
|
||||||
|
free(buf);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
add_patterns_from_buffer(buf, size, base, baselen, pl);
|
add_patterns_from_buffer(buf, size, base, baselen, pl);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -945,4 +945,12 @@ test_expect_success SYMLINKS 'symlinks not respected in-tree' '
|
||||||
test_grep "unable to access.*gitignore" err
|
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
|
test_done
|
||||||
|
|
|
@ -701,4 +701,16 @@ test_expect_success 'expand blob limit in protocol' '
|
||||||
grep "blob:limit=1024" trace
|
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
|
test_done
|
||||||
|
|
Loading…
Reference in New Issue