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 }