Coverage Report

Created: 2025-08-03 10:06

/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
126k
  Argv() : Argv({"node", "-p", "process.version"}) {}
6
7
126k
  Argv(const std::initializer_list<const char*> &args) {
8
126k
    nr_args_ = args.size();
9
126k
    int total_len = 0;
10
507k
    for (auto it = args.begin(); it != args.end(); ++it) {
11
380k
      total_len += strlen(*it) + 1;
12
380k
    }
13
126k
    argv_ = static_cast<char**>(malloc(nr_args_ * sizeof(char*)));
14
126k
    argv_[0] = static_cast<char*>(malloc(total_len));
15
126k
    int i = 0;
16
126k
    int offset = 0;
17
507k
    for (auto it = args.begin(); it != args.end(); ++it, ++i) {
18
380k
      int len = strlen(*it) + 1;
19
380k
      snprintf(argv_[0] + offset, len, "%s", *it);
20
      // Skip argv_[0] as it points the correct location already
21
380k
      if (i > 0) {
22
253k
        argv_[i] = argv_[0] + offset;
23
253k
      }
24
380k
      offset += len;
25
380k
    }
26
126k
  }
27
28
126k
  ~Argv() {
29
126k
    free(argv_[0]);
30
126k
    free(argv_);
31
126k
  }
32
33
0
  int nr_args() const {
34
0
    return nr_args_;
35
0
  }
36
37
507k
  char** operator*() const {
38
507k
    return argv_;
39
507k
  }
40
41
 private:
42
  char** argv_;
43
  int nr_args_;
44
};
45
46
// checks for unescaped double quotes which would break the script
47
17.5k
bool hasUnescapedDoubleQuotes(std::string s) {
48
618M
  for (int i=0; i<s.length(); i++) {
49
618M
    if(s[i]=='"') {
50
      // Found a double quote. Check if it is escaped
51
538
      if (i == 0) {
52
18
        return true;
53
18
      }
54
520
      if(s.at(i-1) != '\\') {
55
80
          return true;
56
80
      }
57
520
    }
58
618M
  }
59
17.4k
  return false;
60
17.5k
}
61
// checks for unescaped single quotes which would break the script
62
127k
bool hasUnescapedSingleQuotes(std::string s) {
63
10.2G
  for (int i=0; i<s.length(); i++) {
64
10.2G
    if(s[i]=='\'') {
65
        // Found a double quote. Check if it is escaped
66
21.0k
        if (i == 0) {
67
85
                return true;
68
85
        }
69
20.9k
      if(s.at(i-1) != '\\') {
70
425
          return true;
71
425
      }
72
20.9k
    }
73
10.2G
  }
74
126k
  return false;
75
127k
}