comparison contrib/fuzz/mpatch_corpus.py @ 43076:2372284d9457

formatting: blacken the codebase This is using my patch to black (https://github.com/psf/black/pull/826) so we don't un-wrap collection literals. Done with: hg files 'set:**.py - mercurial/thirdparty/** - "contrib/python-zstandard/**"' | xargs black -S # skip-blame mass-reformatting only # no-check-commit reformats foo_bar functions Differential Revision: https://phab.mercurial-scm.org/D6971
author Augie Fackler <augie@google.com>
date Sun, 06 Oct 2019 09:45:02 -0400
parents 1fb2510cf8c8
children ba84a1ae4ae5
comparison
equal deleted inserted replaced
43075:57875cf423c9 43076:2372284d9457
10 ) 10 )
11 11
12 ap = argparse.ArgumentParser() 12 ap = argparse.ArgumentParser()
13 ap.add_argument("out", metavar="some.zip", type=str, nargs=1) 13 ap.add_argument("out", metavar="some.zip", type=str, nargs=1)
14 args = ap.parse_args() 14 args = ap.parse_args()
15
15 16
16 class deltafrag(object): 17 class deltafrag(object):
17 def __init__(self, start, end, data): 18 def __init__(self, start, end, data):
18 self.start = start 19 self.start = start
19 self.end = end 20 self.end = end
20 self.data = data 21 self.data = data
21 22
22 def __str__(self): 23 def __str__(self):
23 return struct.pack( 24 return (
24 ">lll", self.start, self.end, len(self.data)) + self.data 25 struct.pack(">lll", self.start, self.end, len(self.data))
26 + self.data
27 )
28
25 29
26 class delta(object): 30 class delta(object):
27 def __init__(self, frags): 31 def __init__(self, frags):
28 self.frags = frags 32 self.frags = frags
29 33
30 def __str__(self): 34 def __str__(self):
31 return ''.join(str(f) for f in self.frags) 35 return ''.join(str(f) for f in self.frags)
32 36
37
33 class corpus(object): 38 class corpus(object):
34
35 def __init__(self, base, deltas): 39 def __init__(self, base, deltas):
36 self.base = base 40 self.base = base
37 self.deltas = deltas 41 self.deltas = deltas
38 42
39 def __str__(self): 43 def __str__(self):
47 + [self.base] 51 + [self.base]
48 + deltas 52 + deltas
49 ) 53 )
50 return "".join(parts) 54 return "".join(parts)
51 55
56
52 with zipfile.ZipFile(args.out[0], "w", zipfile.ZIP_STORED) as zf: 57 with zipfile.ZipFile(args.out[0], "w", zipfile.ZIP_STORED) as zf:
53 # Manually constructed entries 58 # Manually constructed entries
54 zf.writestr( 59 zf.writestr(
55 "one_delta_applies", 60 "one_delta_applies", str(corpus('a', [delta([deltafrag(0, 1, 'b')])]))
56 str(corpus('a', [delta([deltafrag(0, 1, 'b')])]))
57 ) 61 )
58 zf.writestr( 62 zf.writestr(
59 "one_delta_starts_late", 63 "one_delta_starts_late",
60 str(corpus('a', [delta([deltafrag(3, 1, 'b')])])) 64 str(corpus('a', [delta([deltafrag(3, 1, 'b')])])),
61 ) 65 )
62 zf.writestr( 66 zf.writestr(
63 "one_delta_ends_late", 67 "one_delta_ends_late",
64 str(corpus('a', [delta([deltafrag(0, 20, 'b')])])) 68 str(corpus('a', [delta([deltafrag(0, 20, 'b')])])),
65 ) 69 )
66 70
67 try: 71 try:
68 # Generated from repo data 72 # Generated from repo data
69 r = hg.repository(uimod.ui(), '../..') 73 r = hg.repository(uimod.ui(), '../..')
70 fl = r.file('mercurial/manifest.py') 74 fl = r.file('mercurial/manifest.py')
71 rl = getattr(fl, '_revlog', fl) 75 rl = getattr(fl, '_revlog', fl)
72 bins = rl._chunks(rl._deltachain(10)[0]) 76 bins = rl._chunks(rl._deltachain(10)[0])
73 zf.writestr('manifest_py_rev_10', 77 zf.writestr('manifest_py_rev_10', str(corpus(bins[0], bins[1:])))
74 str(corpus(bins[0], bins[1:]))) 78 except: # skip this, so no re-raises
75 except: # skip this, so no re-raises
76 print('skipping seed file from repo data') 79 print('skipping seed file from repo data')
77 # Automatically discovered by running the fuzzer 80 # Automatically discovered by running the fuzzer
78 zf.writestr( 81 zf.writestr(
79 "mpatch_decode_old_overread", "\x02\x00\x00\x00\x02\x00\x00\x00" 82 "mpatch_decode_old_overread", "\x02\x00\x00\x00\x02\x00\x00\x00"
80 ) 83 )
81 # https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=8876 84 # https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=8876
82 zf.writestr( 85 zf.writestr(
83 "mpatch_ossfuzz_getbe32_ubsan", 86 "mpatch_ossfuzz_getbe32_ubsan",
84 "\x02\x00\x00\x00\x0c \xff\xff\xff\xff ") 87 "\x02\x00\x00\x00\x0c \xff\xff\xff\xff ",
88 )
85 zf.writestr( 89 zf.writestr(
86 "mpatch_apply_over_memcpy", 90 "mpatch_apply_over_memcpy",
87 '\x13\x01\x00\x05\xd0\x00\x00\x00\x00\x00\x00\x00\x00\n \x00\x00\x00' 91 '\x13\x01\x00\x05\xd0\x00\x00\x00\x00\x00\x00\x00\x00\n \x00\x00\x00'
88 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 92 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
89 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00' 93 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00'
340 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 344 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
341 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 345 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
342 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 346 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
343 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00se\x00\x00' 347 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00se\x00\x00'
344 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 348 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
345 '\x00\x00\x00\x00') 349 '\x00\x00\x00\x00',
350 )