Coverage Report

Created: 2025-08-28 09:57

/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
122k
  Argv() : Argv({"node", "-p", "process.version"}) {}
6
7
122k
  Argv(const std::initializer_list<const char*> &args) {
8
122k
    nr_args_ = args.size();
9
122k
    int total_len = 0;
10
488k
    for (auto it = args.begin(); it != args.end(); ++it) {
11
366k
      total_len += strlen(*it) + 1;
12
366k
    }
13
122k
    argv_ = static_cast<char**>(malloc(nr_args_ * sizeof(char*)));
14
122k
    argv_[0] = static_cast<char*>(malloc(total_len));
15
122k
    int i = 0;
16
122k
    int offset = 0;
17
488k
    for (auto it = args.begin(); it != args.end(); ++it, ++i) {
18
366k
      int len = strlen(*it) + 1;
19
366k
      snprintf(argv_[0] + offset, len, "%s", *it);
20
      // Skip argv_[0] as it points the correct location already
21
366k
      if (i > 0) {
22
244k
        argv_[i] = argv_[0] + offset;
23
244k
      }
24
366k
      offset += len;
25
366k
    }
26
122k
  }
27
28
122k
  ~Argv() {
29
122k
    free(argv_[0]);
30
122k
    free(argv_);
31
122k
  }
32
33
0
  int nr_args() const {
34
0
    return nr_args_;
35
0
  }
36
37
488k
  char** operator*() const {
38
488k
    return argv_;
39
488k
  }
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.3k
bool hasUnescapedDoubleQuotes(std::string s) {
48
608M
  for (int i=0; i<s.length(); i++) {
49
608M
    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
608M
  }
59
17.3k
  return false;
60
17.3k
}
61
// checks for unescaped single quotes which would break the script
62
122k
bool hasUnescapedSingleQuotes(std::string s) {
63
10.0G
  for (int i=0; i<s.length(); i++) {
64
10.0G
    if(s[i]=='\'') {
65
        // Found a double quote. Check if it is escaped
66
16.3k
        if (i == 0) {
67
87
                return true;
68
87
        }
69
16.2k
      if(s.at(i-1) != '\\') {
70
411
          return true;
71
411
      }
72
16.2k
    }
73
10.0G
  }
74
121k
  return false;
75
122k
}