# HG changeset patch # User Matt Mackall # Date 1465498062 18000 # Node ID 60621cecc8c53d3a27e9984fb06fefc1f99797b3 # Parent baab9ea4426ca658d191119bfa8715eb40a39d82# Parent d29cb5e735e952956f3820b0b303d06df5d90529 merge with stable diff -r baab9ea4426c -r 60621cecc8c5 .hgsigs --- a/.hgsigs Tue Jun 07 11:57:11 2016 +0200 +++ b/.hgsigs Thu Jun 09 13:47:42 2016 -0500 @@ -127,3 +127,4 @@ f85de28eae32e7d3064b1a1321309071bbaaa069 0 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 diff -r baab9ea4426c -r 60621cecc8c5 .hgtags --- a/.hgtags Tue Jun 07 11:57:11 2016 +0200 +++ b/.hgtags Thu Jun 09 13:47:42 2016 -0500 @@ -140,3 +140,4 @@ f85de28eae32e7d3064b1a1321309071bbaaa069 3.8 a56296f55a5e1038ea5016dace2076b693c28a56 3.8.1 aaabed77791a75968a12b8c43ad263631a23ee81 3.8.2 +a9764ab80e11bcf6a37255db7dd079011f767c6c 3.8.3 diff -r baab9ea4426c -r 60621cecc8c5 mercurial/bdiff.c --- a/mercurial/bdiff.c Tue Jun 07 11:57:11 2016 +0200 +++ b/mercurial/bdiff.c Thu Jun 09 13:47:42 2016 -0500 @@ -148,7 +148,7 @@ static int longest_match(struct line *a, struct line *b, struct pos *pos, int a1, int a2, int b1, int b2, int *omi, int *omj) { - int mi = a1, mj = b1, mk = 0, mb = 0, i, j, k, half; + int mi = a1, mj = b1, mk = 0, i, j, k, half; /* window our search on large regions to better bound worst-case performance. by choosing a window at the end, we @@ -166,10 +166,17 @@ /* loop through all lines match a[i] in b */ for (; j >= b1; j = b[j].n) { /* does this extend an earlier match? */ - if (i > a1 && j > b1 && pos[j - 1].pos == i - 1) - k = pos[j - 1].len + 1; - else - k = 1; + for (k = 1; j - k >= b1 && i - k >= a1; k++) { + /* reached an earlier match? */ + if (pos[j - k].pos == i - k) { + k += pos[j - k].len; + break; + } + /* previous line mismatch? */ + if (a[i - k].e != b[j - k].e) + break; + } + pos[j].pos = i; pos[j].len = k; @@ -188,18 +195,15 @@ mj = mj - mk + 1; } - /* expand match to include neighboring popular lines */ - while (mi - mb > a1 && mj - mb > b1 && - a[mi - mb - 1].e == b[mj - mb - 1].e) - mb++; + /* expand match to include subsequent popular lines */ while (mi + mk < a2 && mj + mk < b2 && a[mi + mk].e == b[mj + mk].e) mk++; - *omi = mi - mb; - *omj = mj - mb; + *omi = mi; + *omj = mj; - return mk + mb; + return mk; } static struct hunk *recurse(struct line *a, struct line *b, struct pos *pos, diff -r baab9ea4426c -r 60621cecc8c5 mercurial/bundle2.py --- a/mercurial/bundle2.py Tue Jun 07 11:57:11 2016 +0200 +++ b/mercurial/bundle2.py Thu Jun 09 13:47:42 2016 -0500 @@ -1453,7 +1453,7 @@ # Trigger a transaction so that we are guaranteed to have the lock now. if op.ui.configbool('experimental', 'bundle2lazylocking'): op.gettransaction() - if heads != op.repo.heads(): + if sorted(heads) != sorted(op.repo.heads()): raise error.PushRaced('repository changed while pushing - ' 'please try again') diff -r baab9ea4426c -r 60621cecc8c5 mercurial/manifest.c --- a/mercurial/manifest.c Tue Jun 07 11:57:11 2016 +0200 +++ b/mercurial/manifest.c Thu Jun 09 13:47:42 2016 -0500 @@ -861,7 +861,7 @@ {"iterkeys", (PyCFunction)lazymanifest_getkeysiter, METH_NOARGS, "Iterate over file names in this lazymanifest."}, {"iterentries", (PyCFunction)lazymanifest_getentriesiter, METH_NOARGS, - "Iterate over (path, nodeid, flags) typles in this lazymanifest."}, + "Iterate over (path, nodeid, flags) tuples in this lazymanifest."}, {"copy", (PyCFunction)lazymanifest_copy, METH_NOARGS, "Make a copy of this lazymanifest."}, {"filtercopy", (PyCFunction)lazymanifest_filtercopy, METH_O, diff -r baab9ea4426c -r 60621cecc8c5 tests/test-cache-abuse.t --- a/tests/test-cache-abuse.t Tue Jun 07 11:57:11 2016 +0200 +++ b/tests/test-cache-abuse.t Thu Jun 09 13:47:42 2016 -0500 @@ -88,7 +88,7 @@ $ damage "log -qr branch(b2)" rbc-names-v1 --- before * (glob) +++ after * (glob) - @@ -1,8 +0,0 @@ + @@ -1,8 +?,0 @@ (glob) -2:5fb7d38b9dc4 -3:60b597ffdafa -4:b1174d11b69e diff -r baab9ea4426c -r 60621cecc8c5 tests/test-subrepo-git.t --- a/tests/test-subrepo-git.t Tue Jun 07 11:57:11 2016 +0200 +++ b/tests/test-subrepo-git.t Thu Jun 09 13:47:42 2016 -0500 @@ -1135,7 +1135,7 @@ test for Git CVE-2016-3068 $ hg init malicious-subrepository $ cd malicious-subrepository - $ echo "s = [git]ext::sh -c echo% pwned% >&2" > .hgsub + $ echo "s = [git]ext::sh -c echo% pwned:% \$PWNED_MSG% >pwned.txt" > .hgsub $ git init s Initialized empty Git repository in $TESTTMP/tc/malicious-subrepository/s/.git/ $ cd s @@ -1145,24 +1145,31 @@ $ hg add .hgsub $ hg commit -m "add subrepo" $ cd .. + $ rm -f pwned.txt $ unset GIT_ALLOW_PROTOCOL - $ hg clone malicious-subrepository malicious-subrepository-protected + $ PWNED_MSG="your git is too old or mercurial has regressed" hg clone \ + > malicious-subrepository malicious-subrepository-protected Cloning into '$TESTTMP/tc/malicious-subrepository-protected/s'... (glob) fatal: transport 'ext' not allowed updating to branch default - cloning subrepo s from ext::sh -c echo% pwned% >&2 + cloning subrepo s from ext::sh -c echo% pwned:% $PWNED_MSG% >pwned.txt abort: git clone error 128 in s (in subrepo s) [255] + $ f -Dq pwned.txt + pwned.txt: file not found whitelisting of ext should be respected (that's the git submodule behaviour) - $ env GIT_ALLOW_PROTOCOL=ext hg clone malicious-subrepository malicious-subrepository-clone-allowed + $ rm -f pwned.txt + $ env GIT_ALLOW_PROTOCOL=ext PWNED_MSG="you asked for it" hg clone \ + > malicious-subrepository malicious-subrepository-clone-allowed Cloning into '$TESTTMP/tc/malicious-subrepository-clone-allowed/s'... (glob) - pwned fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. updating to branch default - cloning subrepo s from ext::sh -c echo% pwned% >&2 + cloning subrepo s from ext::sh -c echo% pwned:% $PWNED_MSG% >pwned.txt abort: git clone error 128 in s (in subrepo s) [255] + $ f -Dq pwned.txt + pwned: you asked for it