[PATCH 1 of 3] pathencode: fix hashmangle short dir limit (issue3958)
Siddharth Agarwal
sid0 at fb.com
Thu Jun 20 12:47:01 CDT 2013
# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1371706474 25200
# Wed Jun 19 22:34:34 2013 -0700
# Node ID 149f9a739bbecea91c11fff3612909ceb3c614e0
# Parent 2c79f951df4421a628ac0a39e71aa62dccc348fe
pathencode: fix hashmangle short dir limit (issue3958)
The Python version of this (see mercurial/store.py:_hashencode) copies path
components up to a limit of maxshortdirslen bytes. The Python version does not
consider the initial "dh/" to be part of the this, though, while the C version
currently does. Adding len("dh/") == 3 to the limit for the C version brings it
in line with the Python version.
This was not caught by the randomized testing scheme in test-pathencode.py
because of a couple of flaws with the test. Upcoming patches will fix those
problems.
diff --git a/mercurial/pathencode.c b/mercurial/pathencode.c
--- a/mercurial/pathencode.c
+++ b/mercurial/pathencode.c
@@ -585,7 +585,8 @@
in a space or dot, which are unportable. */
if (d == '.' || d == ' ')
dest[destlen - 1] = '_';
- if (destlen > maxshortdirslen)
+ /* The + 3 is to account for "dh/" in the beginning */
+ if (destlen > maxshortdirslen + 3)
break;
charcopy(dest, &destlen, destsize, src[i]);
p = -1;
More information about the Mercurial-devel
mailing list