diff options
author | Johannes Schindelin <Johannes.Schindelin@gmx.de> | 2011-10-11 14:25:32 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-10-11 13:46:20 -0700 |
commit | 3ac64370164fb80e92c3c9136210d3a49f1e01fa (patch) | |
tree | 41cc88a799c920e51cdeced8a5d07ce79a3dda60 | |
parent | Add test showing git-fetch groks gitfiles (diff) | |
download | tgif-3ac64370164fb80e92c3c9136210d3a49f1e01fa.tar.xz |
Fix is_gitfile() for files too small or larger than PATH_MAX to be a gitfile
The logic to check whether a file is a gitfile used the heuristics that
a gitfile cannot be larger than PATH_MAX or smaller than 10 bytes (as
its contents is "gitdir: " followed by a path) and returned early.
But it returned with a wrong value. It should have said "this cannot
possibly be a gitfile" by returning 0, but it returned 1 instead. Our
test cases do not cover this, as the bundle files produced are smaller
than PATH_MAX, except on Windows.
While at it, fix the faulty logic that the path stored in a gitfile cannot
be larger than PATH_MAX-sizeof("gitdir: ").
Problem identified by running the test suite in msysGit, offending commit
identified by Jörg Rosenkranz.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | transport.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/transport.c b/transport.c index 1707c52446..a2b1a258dc 100644 --- a/transport.c +++ b/transport.c @@ -875,8 +875,8 @@ static int is_gitfile(const char *url) return 0; if (!S_ISREG(st.st_mode)) return 0; - if (st.st_size < 10 || st.st_size > PATH_MAX) - return 1; + if (st.st_size < 10 || st.st_size > 9 + PATH_MAX) + return 0; fd = open(url, O_RDONLY); if (fd < 0) |