MCPcopy Create free account
hub / github.com/ElementsProject/elements / FUZZ_TARGET_INIT

Function FUZZ_TARGET_INIT

src/test/fuzz/system.cpp:30–121  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

28}
29
30FUZZ_TARGET_INIT(system, initialize_system)
31{
32 FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
33 ArgsManager args_manager{};
34
35 if (fuzzed_data_provider.ConsumeBool()) {
36 SetupHelpOptions(args_manager);
37 }
38
39 LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 3000)
40 {
41 CallOneOf(
42 fuzzed_data_provider,
43 [&] {
44 args_manager.SelectConfigNetwork(fuzzed_data_provider.ConsumeRandomLengthString(16));
45 },
46 [&] {
47 args_manager.SoftSetArg(fuzzed_data_provider.ConsumeRandomLengthString(16), fuzzed_data_provider.ConsumeRandomLengthString(16));
48 },
49 [&] {
50 args_manager.ForceSetArg(fuzzed_data_provider.ConsumeRandomLengthString(16), fuzzed_data_provider.ConsumeRandomLengthString(16));
51 },
52 [&] {
53 args_manager.SoftSetBoolArg(fuzzed_data_provider.ConsumeRandomLengthString(16), fuzzed_data_provider.ConsumeBool());
54 },
55 [&] {
56 const OptionsCategory options_category = fuzzed_data_provider.PickValueInArray<OptionsCategory>({OptionsCategory::OPTIONS, OptionsCategory::CONNECTION, OptionsCategory::WALLET, OptionsCategory::WALLET_DEBUG_TEST, OptionsCategory::ZMQ, OptionsCategory::DEBUG_TEST, OptionsCategory::CHAINPARAMS, OptionsCategory::NODE_RELAY, OptionsCategory::BLOCK_CREATION, OptionsCategory::RPC, OptionsCategory::GUI, OptionsCategory::COMMANDS, OptionsCategory::REGISTER_COMMANDS, OptionsCategory::HIDDEN});
57 // Avoid hitting:
58 // util/system.cpp:425: void ArgsManager::AddArg(const std::string &, const std::string &, unsigned int, const OptionsCategory &): Assertion `ret.second' failed.
59 const std::string argument_name = GetArgumentName(fuzzed_data_provider.ConsumeRandomLengthString(16));
60 if (args_manager.GetArgFlags(argument_name) != std::nullopt) {
61 return;
62 }
63 args_manager.AddArg(argument_name, fuzzed_data_provider.ConsumeRandomLengthString(16), fuzzed_data_provider.ConsumeIntegral<unsigned int>() & ~ArgsManager::COMMAND, options_category);
64 },
65 [&] {
66 // Avoid hitting:
67 // util/system.cpp:425: void ArgsManager::AddArg(const std::string &, const std::string &, unsigned int, const OptionsCategory &): Assertion `ret.second' failed.
68 const std::vector<std::string> names = ConsumeRandomLengthStringVector(fuzzed_data_provider);
69 std::vector<std::string> hidden_arguments;
70 for (const std::string& name : names) {
71 const std::string hidden_argument = GetArgumentName(name);
72 if (args_manager.GetArgFlags(hidden_argument) != std::nullopt) {
73 continue;
74 }
75 if (std::find(hidden_arguments.begin(), hidden_arguments.end(), hidden_argument) != hidden_arguments.end()) {
76 continue;
77 }
78 hidden_arguments.push_back(hidden_argument);
79 }
80 args_manager.AddHiddenArgs(hidden_arguments);
81 },
82 [&] {
83 args_manager.ClearArgs();
84 },
85 [&] {
86 const std::vector<std::string> random_arguments = ConsumeRandomLengthStringVector(fuzzed_data_provider);
87 std::vector<const char*> argv;

Callers

nothing calls this directly

Calls 15

SetupHelpOptionsFunction · 0.85
CallOneOfFunction · 0.85
GetArgumentNameFunction · 0.85
HelpRequestedFunction · 0.85
ConsumeBoolMethod · 0.80
SelectConfigNetworkMethod · 0.80
SoftSetArgMethod · 0.80
ForceSetArgMethod · 0.80
SoftSetBoolArgMethod · 0.80
GetArgFlagsMethod · 0.80

Tested by

no test coverage detected