/ src / test / fuzz / net_permissions.cpp
net_permissions.cpp
 1  // Copyright (c) 2020-present The Bitcoin Core developers
 2  // Distributed under the MIT software license, see the accompanying
 3  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
 4  
 5  #include <net_permissions.h>
 6  #include <netbase.h>
 7  #include <test/fuzz/FuzzedDataProvider.h>
 8  #include <test/fuzz/fuzz.h>
 9  #include <test/fuzz/util.h>
10  #include <test/fuzz/util/net.h>
11  #include <util/translation.h>
12  
13  #include <cassert>
14  #include <cstdint>
15  #include <string>
16  #include <vector>
17  
18  FUZZ_TARGET(net_permissions)
19  {
20      FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
21      const std::string s = fuzzed_data_provider.ConsumeRandomLengthString(1000);
22      const NetPermissionFlags net_permission_flags = ConsumeWeakEnum(fuzzed_data_provider, ALL_NET_PERMISSION_FLAGS);
23  
24      NetWhitebindPermissions net_whitebind_permissions;
25      bilingual_str error_net_whitebind_permissions;
26      if (NetWhitebindPermissions::TryParse(s, net_whitebind_permissions, error_net_whitebind_permissions)) {
27          (void)NetPermissions::ToStrings(net_whitebind_permissions.m_flags);
28          (void)NetPermissions::AddFlag(net_whitebind_permissions.m_flags, net_permission_flags);
29          assert(NetPermissions::HasFlag(net_whitebind_permissions.m_flags, net_permission_flags));
30          (void)NetPermissions::ClearFlag(net_whitebind_permissions.m_flags, NetPermissionFlags::Implicit);
31          (void)NetPermissions::ToStrings(net_whitebind_permissions.m_flags);
32      }
33  
34      NetWhitelistPermissions net_whitelist_permissions;
35      ConnectionDirection connection_direction;
36      bilingual_str error_net_whitelist_permissions;
37      if (NetWhitelistPermissions::TryParse(s, net_whitelist_permissions, connection_direction, error_net_whitelist_permissions)) {
38          (void)NetPermissions::ToStrings(net_whitelist_permissions.m_flags);
39          (void)NetPermissions::AddFlag(net_whitelist_permissions.m_flags, net_permission_flags);
40          assert(NetPermissions::HasFlag(net_whitelist_permissions.m_flags, net_permission_flags));
41          (void)NetPermissions::ClearFlag(net_whitelist_permissions.m_flags, NetPermissionFlags::Implicit);
42          (void)NetPermissions::ToStrings(net_whitelist_permissions.m_flags);
43      }
44  }