Show More
@@ -0,0 +1,23 b'' | |||||
|
1 | #!/bin/bash | |||
|
2 | # | |||
|
3 | # Make sure to patch mercurial to create the delta against nullrev | |||
|
4 | # if deltainfo is None: | |||
|
5 | #- deltainfo = self._fullsnapshotinfo(fh, revinfo, target_rev) | |||
|
6 | #+ deltainfo = self._builddeltainfo(revinfo, nullrev, fh) | |||
|
7 | ||||
|
8 | cd "`dirname \"$0\"`" | |||
|
9 | export HGRCPATH= | |||
|
10 | export HGMODULEPOLICY=py | |||
|
11 | ||||
|
12 | rm -rf nullrev-diff | |||
|
13 | ../../hg init nullrev-diff --config format.revlog-compression=zlib | |||
|
14 | cd nullrev-diff | |||
|
15 | echo hi > a | |||
|
16 | ../../../hg commit -Am root-B | |||
|
17 | ../../../hg debugdeltachain a | |||
|
18 | rm -rf .hg/cache/ .hg/wcache/ | |||
|
19 | cd .. | |||
|
20 | ||||
|
21 | tar cf test-revlog-diff-relative-to-nullrev.tar nullrev-diff | |||
|
22 | ||||
|
23 | rm -rf nullrev-diff |
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
@@ -1,54 +1,89 b'' | |||||
1 | $ hg init empty-repo |
|
1 | $ hg init empty-repo | |
2 | $ cd empty-repo |
|
2 | $ cd empty-repo | |
3 |
|
3 | |||
4 | Flags on revlog version 0 are rejected |
|
4 | Flags on revlog version 0 are rejected | |
5 |
|
5 | |||
6 | >>> with open('.hg/store/00changelog.i', 'wb') as fh: |
|
6 | >>> with open('.hg/store/00changelog.i', 'wb') as fh: | |
7 | ... fh.write(b'\x00\x01\x00\x00') and None |
|
7 | ... fh.write(b'\x00\x01\x00\x00') and None | |
8 |
|
8 | |||
9 | $ hg log |
|
9 | $ hg log | |
10 | abort: unknown flags (0x01) in version 0 revlog 00changelog |
|
10 | abort: unknown flags (0x01) in version 0 revlog 00changelog | |
11 | [50] |
|
11 | [50] | |
12 |
|
12 | |||
13 | Unknown flags on revlog version 1 are rejected |
|
13 | Unknown flags on revlog version 1 are rejected | |
14 |
|
14 | |||
15 | >>> with open('.hg/store/00changelog.i', 'wb') as fh: |
|
15 | >>> with open('.hg/store/00changelog.i', 'wb') as fh: | |
16 | ... fh.write(b'\x00\x04\x00\x01') and None |
|
16 | ... fh.write(b'\x00\x04\x00\x01') and None | |
17 |
|
17 | |||
18 | $ hg log |
|
18 | $ hg log | |
19 | abort: unknown flags (0x04) in version 1 revlog 00changelog |
|
19 | abort: unknown flags (0x04) in version 1 revlog 00changelog | |
20 | [50] |
|
20 | [50] | |
21 |
|
21 | |||
22 | Unknown version is rejected |
|
22 | Unknown version is rejected | |
23 |
|
23 | |||
24 | >>> with open('.hg/store/00changelog.i', 'wb') as fh: |
|
24 | >>> with open('.hg/store/00changelog.i', 'wb') as fh: | |
25 | ... fh.write(b'\x00\x00\xbe\xef') and None |
|
25 | ... fh.write(b'\x00\x00\xbe\xef') and None | |
26 |
|
26 | |||
27 | $ hg log |
|
27 | $ hg log | |
28 | abort: unknown version (48879) in revlog 00changelog |
|
28 | abort: unknown version (48879) in revlog 00changelog | |
29 | [50] |
|
29 | [50] | |
30 |
|
30 | |||
31 | $ cd .. |
|
31 | $ cd .. | |
32 |
|
32 | |||
33 | Test for CVE-2016-3630 |
|
33 | Test for CVE-2016-3630 | |
34 |
|
34 | |||
|
35 | $ mkdir test2; cd test2 | |||
35 | $ hg init |
|
36 | $ hg init | |
36 |
|
37 | |||
37 | >>> import codecs |
|
38 | >>> import codecs | |
38 | >>> open("a.i", "wb").write(codecs.decode(codecs.decode( |
|
39 | >>> open("a.i", "wb").write(codecs.decode(codecs.decode( | |
39 | ... b"""eJxjYGZgZIAAYQYGxhgom+k/FMx8YKx9ZUaKSOyqo4cnuKb8mbqHV5cBCVTMWb1Cwqkhe4Gsg9AD |
|
40 | ... b"""eJxjYGZgZIAAYQYGxhgom+k/FMx8YKx9ZUaKSOyqo4cnuKb8mbqHV5cBCVTMWb1Cwqkhe4Gsg9AD | |
40 | ... Joa3dYtcYYYBAQ8Qr4OqZAYRICPTSr5WKd/42rV36d+8/VmrNpv7NP1jQAXrQE4BqQUARngwVA==""", |
|
41 | ... Joa3dYtcYYYBAQ8Qr4OqZAYRICPTSr5WKd/42rV36d+8/VmrNpv7NP1jQAXrQE4BqQUARngwVA==""", | |
41 | ... "base64"), "zlib")) and None |
|
42 | ... "base64"), "zlib")) and None | |
42 |
|
43 | |||
43 | $ hg debugrevlogindex a.i |
|
44 | $ hg debugrevlogindex a.i | |
44 | rev linkrev nodeid p1 p2 |
|
45 | rev linkrev nodeid p1 p2 | |
45 | 0 2 99e0332bd498 000000000000 000000000000 |
|
46 | 0 2 99e0332bd498 000000000000 000000000000 | |
46 | 1 3 6674f57a23d8 99e0332bd498 000000000000 |
|
47 | 1 3 6674f57a23d8 99e0332bd498 000000000000 | |
47 |
|
48 | |||
48 | >>> from mercurial.revlogutils.constants import KIND_OTHER |
|
49 | >>> from mercurial.revlogutils.constants import KIND_OTHER | |
49 | >>> from mercurial import revlog, vfs |
|
50 | >>> from mercurial import revlog, vfs | |
50 | >>> tvfs = vfs.vfs(b'.') |
|
51 | >>> tvfs = vfs.vfs(b'.') | |
51 | >>> tvfs.options = {b'revlogv1': True} |
|
52 | >>> tvfs.options = {b'revlogv1': True} | |
52 | >>> rl = revlog.revlog(tvfs, target=(KIND_OTHER, b'test'), radix=b'a') |
|
53 | >>> rl = revlog.revlog(tvfs, target=(KIND_OTHER, b'test'), radix=b'a') | |
53 | >>> rl.revision(1) |
|
54 | >>> rl.revision(1) | |
54 | mpatchError(*'patch cannot be decoded'*) (glob) |
|
55 | mpatchError(*'patch cannot be decoded'*) (glob) | |
|
56 | ||||
|
57 | $ cd .. | |||
|
58 | ||||
|
59 | ||||
|
60 | Regression test for support for the old repos with strange diff encoding. | |||
|
61 | Apparently it used to be possible (maybe it's still possible, but we don't know how) | |||
|
62 | to create commits whose diffs are encoded relative to a nullrev. | |||
|
63 | This test checks that a repo with that encoding can still be read. | |||
|
64 | ||||
|
65 | This is what we did to produce the repo in test-revlog-diff-relative-to-nullrev.tar: | |||
|
66 | ||||
|
67 | - tweak the code in mercurial/revlogutils/deltas.py to produce such "trivial" deltas: | |||
|
68 | > if deltainfo is None: | |||
|
69 | > - deltainfo = self._fullsnapshotinfo(fh, revinfo, target_rev) | |||
|
70 | > + deltainfo = self._builddeltainfo(revinfo, nullrev, fh) | |||
|
71 | - hg init | |||
|
72 | - echo hi > a | |||
|
73 | - hg commit -Am_ | |||
|
74 | - remove some cache files | |||
|
75 | ||||
|
76 | $ tar --force-local -xf "$TESTDIR"/bundles/test-revlog-diff-relative-to-nullrev.tar | |||
|
77 | $ cd nullrev-diff | |||
|
78 | $ hg debugdeltachain a | |||
|
79 | rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio readsize largestblk rddensity srchunks | |||
|
80 | 0 1 2 -1 p1 15 3 15 5.00000 15 0 0.00000 15 15 1.00000 1 | |||
|
81 | #if rhg | |||
|
82 | $ hg cat --config rhg.cat=true -r 0 a | |||
|
83 | abort: corrupted revlog | |||
|
84 | [255] | |||
|
85 | #else | |||
|
86 | $ hg cat --config rhg.cat=true -r 0 a | |||
|
87 | hi | |||
|
88 | #endif | |||
|
89 | $ cd .. |
General Comments 0
You need to be logged in to leave comments.
Login now