| 28 | } |
| 29 | |
| 30 | FUZZ_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; |
nothing calls this directly
no test coverage detected