-
-
Notifications
You must be signed in to change notification settings - Fork 106
/
Copy pathdetect-child-process.js
139 lines (136 loc) · 4.35 KB
/
detect-child-process.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
'use strict';
const RuleTester = require('eslint').RuleTester;
const tester = new RuleTester();
const ruleName = 'detect-child-process';
const rule = require(`../../rules/${ruleName}`);
tester.run(ruleName, rule, {
valid: [
"child_process.exec('ls')",
`
var {} = require('child_process');
var result = /hello/.exec(str);`,
`
var {} = require('node:child_process');
var result = /hello/.exec(str);`,
`
import {} from 'child_process';
var result = /hello/.exec(str);`,
`
import {} from 'node:child_process';
var result = /hello/.exec(str);`,
"var { spawn } = require('child_process'); spawn(str);",
"var { spawn } = require('node:child_process'); spawn(str);",
"import { spawn } from 'child_process'; spawn(str);",
"import { spawn } from 'node:child_process'; spawn(str);",
`
var foo = require('child_process');
function fn () {
var foo = /hello/;
var result = foo.exec(str);
}`,
"var child = require('child_process'); child.spawn(str)",
"var child = require('node:child_process'); child.spawn(str)",
"import child from 'child_process'; child.spawn(str)",
"import child from 'node:child_process'; child.spawn(str)",
`
var foo = require('child_process');
function fn () {
var result = foo.spawn(str);
}`,
"require('child_process').spawn(str)",
`
function fn () {
require('child_process').spawn(str)
}`,
`
var child_process = require('child_process');
var FOO = 'ls';
child_process.exec(FOO);`,
`
import child_process from 'child_process';
const FOO = 'ls';
child_process.exec(FOO);`,
],
invalid: [
{
code: "require('child_process')",
errors: [{ message: 'Found require("child_process")' }],
},
{
code: "require('node:child_process')",
errors: [{ message: 'Found require("node:child_process")' }],
},
{
code: "var child = require('child_process'); child.exec(com)",
errors: [{ message: 'Found child_process.exec() with non Literal first argument' }],
},
{
code: "var child = require('node:child_process'); child.exec(com)",
errors: [{ message: 'Found child_process.exec() with non Literal first argument' }],
},
{
code: "import child from 'child_process'; child.exec(com)",
errors: [{ message: 'Found child_process.exec() with non Literal first argument' }],
},
{
code: "import child from 'node:child_process'; child.exec(com)",
errors: [{ message: 'Found child_process.exec() with non Literal first argument' }],
},
{
code: "var child = sinon.stub(require('child_process')); child.exec.returns({});",
errors: [{ message: 'Found require("child_process")' }],
},
{
code: "var child = sinon.stub(require('node:child_process')); child.exec.returns({});",
errors: [{ message: 'Found require("node:child_process")' }],
},
{
code: `
var foo = require('child_process');
function fn () {
var result = foo.exec(str);
}`,
errors: [{ message: 'Found child_process.exec() with non Literal first argument', line: 4 }],
},
{
code: `
import foo from 'child_process';
function fn () {
var result = foo.exec(str);
}`,
errors: [{ message: 'Found child_process.exec() with non Literal first argument', line: 4 }],
},
{
code: `
import foo from 'node:child_process';
function fn () {
var result = foo.exec(str);
}`,
errors: [{ message: 'Found child_process.exec() with non Literal first argument', line: 4 }],
},
{
code: `
require('child_process').exec(str)`,
errors: [{ message: 'Found child_process.exec() with non Literal first argument', line: 2 }],
},
{
code: `
function fn () {
require('child_process').exec(str)
}`,
errors: [{ message: 'Found child_process.exec() with non Literal first argument', line: 3 }],
},
{
code: `
const {exec} = require('child_process');
exec(str)`,
errors: [{ message: 'Found child_process.exec() with non Literal first argument', line: 3 }],
},
{
code: `
const {exec} = require('node:child_process');
exec(str)`,
errors: [{ message: 'Found child_process.exec() with non Literal first argument', line: 3 }],
},
],
});