Show More
@@ -8,11 +8,55 b' ap = argparse.ArgumentParser()' | |||
|
8 | 8 | ap.add_argument("out", metavar="some.zip", type=str, nargs=1) |
|
9 | 9 | args = ap.parse_args() |
|
10 | 10 | |
|
11 | class deltafrag(object): | |
|
12 | def __init__(self, start, end, data): | |
|
13 | self.start = start | |
|
14 | self.end = end | |
|
15 | self.data = data | |
|
16 | ||
|
17 | def __str__(self): | |
|
18 | return struct.pack( | |
|
19 | ">lll", self.start, self.end, len(self.data)) + self.data | |
|
20 | ||
|
21 | class delta(object): | |
|
22 | def __init__(self, frags): | |
|
23 | self.frags = frags | |
|
24 | ||
|
25 | def __str__(self): | |
|
26 | return ''.join(str(f) for f in self.frags) | |
|
27 | ||
|
28 | class corpus(object): | |
|
29 | ||
|
30 | def __init__(self, base, deltas): | |
|
31 | self.base = base | |
|
32 | self.deltas = deltas | |
|
33 | ||
|
34 | def __str__(self): | |
|
35 | deltas = [str(d) for d in self.deltas] | |
|
36 | parts = ( | |
|
37 | [ | |
|
38 | struct.pack(">B", len(deltas) + 1), | |
|
39 | struct.pack(">H", len(self.base)), | |
|
40 | ] | |
|
41 | + [struct.pack(">H", len(d)) for d in deltas] | |
|
42 | + [self.base] | |
|
43 | + deltas | |
|
44 | ) | |
|
45 | return "".join(parts) | |
|
46 | ||
|
11 | 47 | with zipfile.ZipFile(args.out[0], "w", zipfile.ZIP_STORED) as zf: |
|
12 | 48 | # Manually constructed entries |
|
13 | 49 | zf.writestr( |
|
14 | 50 | "one_delta_applies", |
|
15 | "\x02\x00\x01\x00\ra\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01b", | |
|
51 | str(corpus('a', [delta([deltafrag(0, 1, 'b')])])) | |
|
52 | ) | |
|
53 | zf.writestr( | |
|
54 | "one_delta_starts_late", | |
|
55 | str(corpus('a', [delta([deltafrag(3, 1, 'b')])])) | |
|
56 | ) | |
|
57 | zf.writestr( | |
|
58 | "one_delta_ends_late", | |
|
59 | str(corpus('a', [delta([deltafrag(0, 20, 'b')])])) | |
|
16 | 60 | ) |
|
17 | 61 | |
|
18 | 62 | # Automatically discovered by running the fuzzer |
General Comments 0
You need to be logged in to leave comments.
Login now