mirror of
https://github.com/facebook/sapling.git
synced 2024-10-12 17:58:27 +03:00
f3d5b0e27e
Summary: A user hit cryptic error message: File "revset.py", line 423, in ancestor ancestors = repo.changelog.index.ancestors AttributeError: 'list' object has no attribute 'ancestors' That was because they have run `rm -rf` and the `.hg` directory was mostly removed. `hg` falls back to revlog v0, and the code in question obviously dislikes revlog v0. Change the error message to just say repo corruption. Since there are code depending on revlog v1, and we don't use v0 or v2. Remove both of them. Reviewed By: singhsrb Differential Revision: D14610769 fbshipit-source-id: 9015b74989d8fa4ad50bc36ec48bca26a1faa361
48 lines
1.3 KiB
Perl
48 lines
1.3 KiB
Perl
$ hg init empty-repo
|
|
$ cd empty-repo
|
|
|
|
Flags on revlog version 0 are rejected
|
|
|
|
>>> with open('.hg/store/00changelog.i', 'wb') as fh:
|
|
... fh.write('\x00\x01\x00\x00')
|
|
|
|
$ hg log
|
|
abort: repo is corrupted
|
|
[255]
|
|
|
|
Unknown flags on revlog version 1 are rejected
|
|
|
|
>>> with open('.hg/store/00changelog.i', 'wb') as fh:
|
|
... fh.write('\x00\x04\x00\x01')
|
|
|
|
$ hg log
|
|
abort: unknown flags (0x04) in version 1 revlog 00changelog.i!
|
|
[255]
|
|
|
|
Unknown version is rejected
|
|
|
|
>>> with open('.hg/store/00changelog.i', 'wb') as fh:
|
|
... fh.write('\x00\x00\x00\x02')
|
|
|
|
$ hg log
|
|
abort: unknown version (2) in revlog 00changelog.i!
|
|
[255]
|
|
|
|
$ cd ..
|
|
|
|
Test for CVE-2016-3630
|
|
|
|
$ hg init
|
|
|
|
>>> open("a.i", "w").write(
|
|
... """eJxjYGZgZIAAYQYGxhgom+k/FMx8YKx9ZUaKSOyqo4cnuKb8mbqHV5cBCVTMWb1Cwqkhe4Gsg9AD
|
|
... Joa3dYtcYYYBAQ8Qr4OqZAYRICPTSr5WKd/42rV36d+8/VmrNpv7NP1jQAXrQE4BqQUARngwVA=="""
|
|
... .decode("base64").decode("zlib"))
|
|
|
|
$ hg debugindex a.i
|
|
rev offset length delta linkrev nodeid p1 p2
|
|
0 0 19 -1 2 99e0332bd498 000000000000 000000000000
|
|
1 19 12 0 3 6674f57a23d8 99e0332bd498 000000000000
|
|
$ hg debugdata a.i 1 2>&1 | egrep 'Error:.*decoded'
|
|
(mercurial\.\w+\.mpatch\.)?mpatchError: patch cannot be decoded (re)
|