Coverage Report

Created: 2025-09-05 10:05

/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
127k
  Argv() : Argv({"node", "-p", "process.version"}) {}
6
7
127k
  Argv(const std::initializer_list<const char*> &args) {
8
127k
    nr_args_ = args.size();
9
127k
    int total_len = 0;
10
509k
    for (auto it = args.begin(); it != args.end(); ++it) {
11
381k
      total_len += strlen(*it) + 1;
12
381k
    }
13
127k
    argv_ = static_cast<char**>(malloc(nr_args_ * sizeof(char*)));
14
127k
    argv_[0] = static_cast<char*>(malloc(total_len));
15
127k
    int i = 0;
16
127k
    int offset = 0;
17
509k
    for (auto it = args.begin(); it != args.end(); ++it, ++i) {
18
381k
      int len = strlen(*it) + 1;
19
381k
      snprintf(argv_[0] + offset, len, "%s", *it);
20
      // Skip argv_[0] as it points the correct location already
21
381k
      if (i > 0) {
22
254k
        argv_[i] = argv_[0] + offset;
23
254k
      }
24
381k
      offset += len;
25
381k
    }
26
127k
  }
27
28
127k
  ~Argv() {
29
127k
    free(argv_[0]);
30
127k
    free(argv_);
31
127k
  }
32
33
0
  int nr_args() const {
34
0
    return nr_args_;
35
0
  }
36
37
509k
  char** operator*() const {
38
509k
    return argv_;
39
509k
  }
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.9k
bool hasUnescapedDoubleQuotes(std::string s) {
48
701M
  for (int i=0; i<s.length(); i++) {
49
701M
    if(s[i]=='"') {
50
      // Found a double quote. Check if it is escaped
51
528
      if (i == 0) {
52
18
        return true;
53
18
      }
54
510
      if(s.at(i-1) != '\\') {
55
78
          return true;
56
78
      }
57
510
    }
58
701M
  }
59
17.8k
  return false;
60
17.9k
}
61
// checks for unescaped single quotes which would break the script
62
128k
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
24.3k
        if (i == 0) {
67
87
                return true;
68
87
        }
69
24.2k
      if(s.at(i-1) != '\\') {
70
407
          return true;
71
407
      }
72
24.2k
    }
73
10.2G
  }
74
127k
  return false;
75
128k
}