summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>2011-10-11 14:25:32 -0500
committerJunio C Hamano <gitster@pobox.com>2011-10-11 13:46:20 -0700
commit3ac64370164fb80e92c3c9136210d3a49f1e01fa (patch)
tree41cc88a799c920e51cdeced8a5d07ce79a3dda60
parent0c80fdb34200648f18cf19af1514c693d2f141b8 (diff)
downloadgit-ph/transport-with-gitfile.tar.gz
Fix is_gitfile() for files too small or larger than PATH_MAX to be a gitfileph/transport-with-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.c4
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)