11
11
#include < vector>
12
12
13
13
// ! asmap code that consumes nothing
14
- static const std::vector<bool > IPV6_PREFIX_ASMAP = {};
14
+ static const std::vector<std::byte > IPV6_PREFIX_ASMAP = {};
15
15
16
16
// ! asmap code that consumes the 96 prefix bits of ::ffff:0/96 (IPv4-in-IPv6 map)
17
- static const std::vector<bool > IPV4_PREFIX_ASMAP = {
18
- true , true , false , true , true , true , true , true , true , true , false , false , false , false , false , false , false , false , // Match 0x00
19
- true , true , false , true , true , true , true , true , true , true , false , false , false , false , false , false , false , false , // Match 0x00
20
- true , true , false , true , true , true , true , true , true , true , false , false , false , false , false , false , false , false , // Match 0x00
21
- true , true , false , true , true , true , true , true , true , true , false , false , false , false , false , false , false , false , // Match 0x00
22
- true , true , false , true , true , true , true , true , true , true , false , false , false , false , false , false , false , false , // Match 0x00
23
- true , true , false , true , true , true , true , true , true , true , false , false , false , false , false , false , false , false , // Match 0x00
24
- true , true , false , true , true , true , true , true , true , true , false , false , false , false , false , false , false , false , // Match 0x00
25
- true , true , false , true , true , true , true , true , true , true , false , false , false , false , false , false , false , false , // Match 0x00
26
- true , true , false , true , true , true , true , true , true , true , false , false , false , false , false , false , false , false , // Match 0x00
27
- true , true , false , true , true , true , true , true , true , true , false , false , false , false , false , false , false , false , // Match 0x00
28
- true , true , false , true , true , true , true , true , true , true , true , true , true , true , true , true , true , true , // Match 0xFF
29
- true , true , false , true , true , true , true , true , true , true , true , true , true , true , true , true , true , true // Match 0xFF
17
+ static const std::vector<std::byte> IPV4_PREFIX_ASMAP = {
18
+ std::byte{0x00 }, std::byte{0x00 }, std::byte{0x00 }, std::byte{0x00 },
19
+ std::byte{0x00 }, std::byte{0x00 }, std::byte{0x00 }, std::byte{0x00 },
20
+ std::byte{0x00 }, std::byte{0x00 }, std::byte{0xFF }, std::byte{0xFF }
30
21
};
31
22
32
23
FUZZ_TARGET (asmap)
@@ -37,13 +28,16 @@ FUZZ_TARGET(asmap)
37
28
bool ipv6 = buffer[0 ] & 128 ;
38
29
const size_t addr_size = ipv6 ? ADDR_IPV6_SIZE : ADDR_IPV4_SIZE;
39
30
if (buffer.size () < size_t (1 + asmap_size + addr_size)) return ;
40
- std::vector< bool > asmap = ipv6 ? IPV6_PREFIX_ASMAP : IPV4_PREFIX_ASMAP;
41
- asmap. reserve (asmap. size () + 8 * asmap_size) ;
31
+
32
+ std::vector<std::byte> asmap_vec = ipv6 ? IPV6_PREFIX_ASMAP : IPV4_PREFIX_ASMAP ;
42
33
for (int i = 0 ; i < asmap_size; ++i) {
34
+ uint8_t byte = buffer[1 + i];
43
35
for (int j = 0 ; j < 8 ; ++j) {
44
- asmap .push_back ((buffer[ 1 + i] >> j) & 1 );
36
+ asmap_vec .push_back (static_cast <std::byte>((byte >> j) & 1 ) );
45
37
}
46
38
}
39
+ std::span<const std::byte> asmap (asmap_vec);
40
+
47
41
if (!SanityCheckASMap (asmap, 128 )) return ;
48
42
49
43
const uint8_t * addr_data = buffer.data () + 1 + asmap_size;
@@ -57,6 +51,6 @@ FUZZ_TARGET(asmap)
57
51
memcpy (&ipv4, addr_data, addr_size);
58
52
net_addr.SetIP (CNetAddr{ipv4});
59
53
}
60
- NetGroupManager netgroupman{asmap};
54
+ NetGroupManager netgroupman{NetGroupManager::WithEmbeddedAsmap ( asmap) };
61
55
(void )netgroupman.GetMappedAS (net_addr);
62
56
}
0 commit comments