script_fuzzer.cpp
Go to the documentation of this file.
1 #include <fuzzer/FuzzedDataProvider.h>
5 #include <cstdint>
6 #include <string>
7 #include <iostream>
8 #include <iomanip>
9 
10 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
11 {
12  if(size < 4)
13  {
14  return 0;
15  }
16 
17  FuzzedDataProvider fuzz_data(data, size);
18 
19  try
20  {
23  env.enums = std::make_shared<BT::EnumsTable>();
24 
25  // Add some test variables to the blackboard
26  env.vars->set("test_int", 42);
27  env.vars->set("test_double", 3.14);
28  env.vars->set("test_bool", true);
29  env.vars->set("test_string", std::string("test"));
30 
31  // Add some test enums
32  (*env.enums)["RUNNING"] = 0;
33  (*env.enums)["SUCCESS"] = 1;
34  (*env.enums)["FAILURE"] = 2;
35 
36  std::string script = fuzz_data.ConsumeRandomLengthString();
37 
38  auto validation_result = BT::ValidateScript(script);
39 
40  if(!validation_result)
41  {
42  auto parsed_script = BT::ParseScript(script);
43  if(parsed_script)
44  {
45  try
46  {
47  auto result = parsed_script.value()(env);
48 
49  if(result.isNumber())
50  {
51  volatile auto num = result.cast<double>();
52  }
53 
54  env.vars->set("result", result);
55 
56  BT::Any read_back;
57  env.vars->get("result", read_back);
58  }
59  catch(const BT::RuntimeError&)
60  {}
61  }
62  }
63 
64  BT::ParseScriptAndExecute(env, script);
65  }
66  catch(const std::exception&)
67  {}
68 
69  return 0;
70 }
cx::size
constexpr auto size(const C &c) -> decltype(c.size())
Definition: wildcards.hpp:636
BT::ParseScript
Expected< ScriptFunction > ParseScript(const std::string &script)
Definition: script_parser.cpp:14
BT::Any
Definition: safe_any.hpp:36
LLVMFuzzerTestOneInput
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
Definition: script_fuzzer.cpp:10
BT::Ast::Environment::enums
EnumsTablePtr enums
Definition: script_parser.hpp:34
basic_types.h
BT::Ast::Environment::vars
BT::Blackboard::Ptr vars
Definition: script_parser.hpp:33
BT::ParseScriptAndExecute
Expected< Any > ParseScriptAndExecute(Ast::Environment &env, const std::string &script)
Definition: script_parser.cpp:57
BT::RuntimeError
Definition: exceptions.h:58
BT::Blackboard::create
static Blackboard::Ptr create(Blackboard::Ptr parent={})
Definition: blackboard.h:63
BT::ValidateScript
Result ValidateScript(const std::string &script)
ValidateScript will check if a certain string is valid.
Definition: script_parser.cpp:70
blackboard.h
script_parser.hpp
BT::Ast::Environment
The Environment class is used to encapsulate the information and states needed by the scripting langu...
Definition: script_parser.hpp:31


behaviortree_cpp_v4
Author(s): Davide Faconti
autogenerated on Wed Apr 16 2025 02:20:57