Coverage Report

Created: 2025-12-08 06:56

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/behaviortreecpp/fuzzing/script_fuzzer.cpp
Line
Count
Source
1
#include <fuzzer/FuzzedDataProvider.h>
2
#include "behaviortree_cpp/scripting/script_parser.hpp"
3
#include "behaviortree_cpp/blackboard.h"
4
#include "behaviortree_cpp/basic_types.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
20.9k
{
12
20.9k
  if(size < 4)
13
2
  {
14
2
    return 0;
15
2
  }
16
17
20.9k
  FuzzedDataProvider fuzz_data(data, size);
18
19
20.9k
  try
20
20.9k
  {
21
20.9k
    BT::Ast::Environment env;
22
20.9k
    env.vars = BT::Blackboard::create();
23
20.9k
    env.enums = std::make_shared<BT::EnumsTable>();
24
25
    // Add some test variables to the blackboard
26
20.9k
    env.vars->set("test_int", 42);
27
20.9k
    env.vars->set("test_double", 3.14);
28
20.9k
    env.vars->set("test_bool", true);
29
20.9k
    env.vars->set("test_string", std::string("test"));
30
31
    // Add some test enums
32
20.9k
    (*env.enums)["RUNNING"] = 0;
33
20.9k
    (*env.enums)["SUCCESS"] = 1;
34
20.9k
    (*env.enums)["FAILURE"] = 2;
35
36
20.9k
    std::string script = fuzz_data.ConsumeRandomLengthString();
37
38
20.9k
    auto validation_result = BT::ValidateScript(script);
39
40
20.9k
    if(!validation_result)
41
13.0k
    {
42
13.0k
      auto parsed_script = BT::ParseScript(script);
43
13.0k
      if(parsed_script)
44
0
      {
45
0
        try
46
0
        {
47
0
          auto result = parsed_script.value()(env);
48
49
0
          if(result.isNumber())
50
0
          {
51
0
            volatile auto num = result.cast<double>();
52
0
          }
53
54
0
          env.vars->set("result", result);
55
56
0
          BT::Any read_back;
57
0
          env.vars->get("result", read_back);
58
0
        }
59
0
        catch(const BT::RuntimeError&)
60
0
        {}
61
0
      }
62
13.0k
    }
63
64
20.9k
    BT::ParseScriptAndExecute(env, script);
65
20.9k
  }
66
20.9k
  catch(const std::exception&)
67
20.9k
  {}
68
69
20.9k
  return 0;
70
20.9k
}