Coverage Report

Created: 2025-07-04 09:33

/src/node/test/fuzzers/fuzz_helper.h
Line
Count
Source (jump to first uncovered line)
1
#include <stdlib.h>
2
3
struct Argv {
4
 public:
5
134k
  Argv() : Argv({"node", "-p", "process.version"}) {}
6
7
134k
  Argv(const std::initializer_list<const char*> &args) {
8
134k
    nr_args_ = args.size();
9
134k
    int total_len = 0;
10
538k
    for (auto it = args.begin(); it != args.end(); ++it) {
11
403k
      total_len += strlen(*it) + 1;
12
403k
    }
13
134k
    argv_ = static_cast<char**>(malloc(nr_args_ * sizeof(char*)));
14
134k
    argv_[0] = static_cast<char*>(malloc(total_len));
15
134k
    int i = 0;
16
134k
    int offset = 0;
17
538k
    for (auto it = args.begin(); it != args.end(); ++it, ++i) {
18
403k
      int len = strlen(*it) + 1;
19
403k
      snprintf(argv_[0] + offset, len, "%s", *it);
20
      // Skip argv_[0] as it points the correct location already
21
403k
      if (i > 0) {
22
269k
        argv_[i] = argv_[0] + offset;
23
269k
      }
24
403k
      offset += len;
25
403k
    }
26
134k
  }
27
28
134k
  ~Argv() {
29
134k
    free(argv_[0]);
30
134k
    free(argv_);
31
134k
  }
32
33
0
  int nr_args() const {
34
0
    return nr_args_;
35
0
  }
36
37
538k
  char** operator*() const {
38
538k
    return argv_;
39
538k
  }
40
41
 private:
42
  char** argv_;
43
  int nr_args_;
44
};
45
46
// checks for unescaped double quotes which would break the script
47
18.7k
bool hasUnescapedDoubleQuotes(std::string s) {
48
735M
  for (int i=0; i<s.length(); i++) {
49
735M
    if(s[i]=='"') {
50
      // Found a double quote. Check if it is escaped
51
533
      if (i == 0) {
52
19
        return true;
53
19
      }
54
514
      if(s.at(i-1) != '\\') {
55
82
          return true;
56
82
      }
57
514
    }
58
735M
  }
59
18.6k
  return false;
60
18.7k
}
61
// checks for unescaped single quotes which would break the script
62
134k
bool hasUnescapedSingleQuotes(std::string s) {
63
10.6G
  for (int i=0; i<s.length(); i++) {
64
10.6G
    if(s[i]=='\'') {
65
        // Found a double quote. Check if it is escaped
66
22.3k
        if (i == 0) {
67
87
                return true;
68
87
        }
69
22.2k
      if(s.at(i-1) != '\\') {
70
457
          return true;
71
457
      }
72
22.2k
    }
73
10.6G
  }
74
133k
  return false;
75
134k
}