@@ -32,17 +32,17 @@ app.get('/normalize-notAbsolute', (req, res) => {
32
32
33
33
if ( pathModule . isAbsolute ( path ) )
34
34
return ;
35
-
35
+
36
36
fs . readFileSync ( path ) ; // NOT OK
37
37
38
38
if ( ! path . startsWith ( "." ) )
39
39
fs . readFileSync ( path ) ; // OK
40
40
else
41
41
fs . readFileSync ( path ) ; // NOT OK - wrong polarity
42
-
42
+
43
43
if ( ! path . startsWith ( ".." ) )
44
44
fs . readFileSync ( path ) ; // OK
45
-
45
+
46
46
if ( ! path . startsWith ( "../" ) )
47
47
fs . readFileSync ( path ) ; // OK
48
48
@@ -52,7 +52,7 @@ app.get('/normalize-notAbsolute', (req, res) => {
52
52
53
53
app . get ( '/normalize-noInitialDotDot' , ( req , res ) => {
54
54
let path = pathModule . normalize ( req . query . path ) ;
55
-
55
+
56
56
if ( path . startsWith ( ".." ) )
57
57
return ;
58
58
@@ -80,7 +80,7 @@ app.get('/prepend-normalize', (req, res) => {
80
80
81
81
app . get ( '/absolute' , ( req , res ) => {
82
82
let path = req . query . path ;
83
-
83
+
84
84
if ( ! pathModule . isAbsolute ( path ) )
85
85
return ;
86
86
@@ -92,10 +92,10 @@ app.get('/absolute', (req, res) => {
92
92
93
93
app . get ( '/normalized-absolute' , ( req , res ) => {
94
94
let path = pathModule . normalize ( req . query . path ) ;
95
-
95
+
96
96
if ( ! pathModule . isAbsolute ( path ) )
97
97
return ;
98
-
98
+
99
99
res . write ( fs . readFileSync ( path ) ) ; // NOT OK
100
100
101
101
if ( path . startsWith ( '/home/user/www' ) )
@@ -104,7 +104,7 @@ app.get('/normalized-absolute', (req, res) => {
104
104
105
105
app . get ( '/combined-check' , ( req , res ) => {
106
106
let path = pathModule . normalize ( req . query . path ) ;
107
-
107
+
108
108
// Combined absoluteness and folder check in one startsWith call
109
109
if ( path . startsWith ( "/home/user/www" ) )
110
110
fs . readFileSync ( path ) ; // OK
@@ -121,7 +121,7 @@ app.get('/realpath', (req, res) => {
121
121
122
122
if ( path . startsWith ( "/home/user/www" ) )
123
123
fs . readFileSync ( path ) ; // OK - both absolute and normalized before check
124
-
124
+
125
125
fs . readFileSync ( pathModule . join ( '.' , path ) ) ; // OK - normalized and coerced to relative
126
126
fs . readFileSync ( pathModule . join ( '/home/user/www' , path ) ) ; // OK
127
127
} ) ;
@@ -212,7 +212,7 @@ app.get('/join-regression', (req, res) => {
212
212
213
213
app . get ( '/decode-after-normalization' , ( req , res ) => {
214
214
let path = pathModule . normalize ( req . query . path ) ;
215
-
215
+
216
216
if ( ! pathModule . isAbsolute ( path ) && ! path . startsWith ( '..' ) )
217
217
fs . readFileSync ( path ) ; // OK
218
218
@@ -238,7 +238,7 @@ app.get('/resolve-path', (req, res) => {
238
238
fs . readFileSync ( path ) ; // NOT OK
239
239
240
240
var self = something ( ) ;
241
-
241
+
242
242
if ( path . substring ( 0 , self . dir . length ) === self . dir )
243
243
fs . readFileSync ( path ) ; // OK
244
244
else
@@ -256,12 +256,12 @@ app.get('/relative-startswith', (req, res) => {
256
256
fs . readFileSync ( path ) ; // NOT OK
257
257
258
258
var self = something ( ) ;
259
-
259
+
260
260
var relative = pathModule . relative ( self . webroot , path ) ;
261
261
if ( relative . startsWith ( ".." + pathModule . sep ) || relative == ".." ) {
262
- fs . readFileSync ( path ) ; // NOT OK!
262
+ fs . readFileSync ( path ) ; // NOT OK!
263
263
} else {
264
- fs . readFileSync ( path ) ; // OK!
264
+ fs . readFileSync ( path ) ; // OK!
265
265
}
266
266
267
267
let newpath = pathModule . normalize ( path ) ;
@@ -277,23 +277,23 @@ app.get('/relative-startswith', (req, res) => {
277
277
if ( relativePath . indexOf ( '../' ) === 0 ) {
278
278
fs . readFileSync ( newpath ) ; // NOT OK!
279
279
} else {
280
- fs . readFileSync ( newpath ) ; // OK!
280
+ fs . readFileSync ( newpath ) ; // OK!
281
281
}
282
282
283
283
let newpath = pathModule . normalize ( path ) ;
284
284
var relativePath = pathModule . relative ( pathModule . normalize ( workspaceDir ) , newpath ) ;
285
285
if ( pathModule . normalize ( relativePath ) . indexOf ( '../' ) === 0 ) {
286
286
fs . readFileSync ( newpath ) ; // NOT OK!
287
287
} else {
288
- fs . readFileSync ( newpath ) ; // OK!
288
+ fs . readFileSync ( newpath ) ; // OK!
289
289
}
290
290
291
291
let newpath = pathModule . normalize ( path ) ;
292
292
var relativePath = pathModule . relative ( pathModule . normalize ( workspaceDir ) , newpath ) ;
293
293
if ( pathModule . normalize ( relativePath ) . indexOf ( '../' ) ) {
294
294
fs . readFileSync ( newpath ) ; // OK!
295
295
} else {
296
- fs . readFileSync ( newpath ) ; // NOT OK!
296
+ fs . readFileSync ( newpath ) ; // NOT OK!
297
297
}
298
298
} ) ;
299
299
@@ -340,7 +340,7 @@ app.get('/yet-another-prefix', (req, res) => {
340
340
341
341
fs . readFileSync ( path ) ; // NOT OK
342
342
343
- var abs = pathModule . resolve ( path ) ;
343
+ var abs = pathModule . resolve ( path ) ;
344
344
345
345
if ( abs . indexOf ( root ) !== 0 ) {
346
346
fs . readFileSync ( path ) ; // NOT OK
@@ -402,3 +402,8 @@ app.get('/dotdot-regexp', (req, res) => {
402
402
fs . readFileSync ( path ) ; // OK
403
403
}
404
404
} ) ;
405
+
406
+ app . get ( '/join-spread' , ( req , res ) => {
407
+ fs . readFileSync ( pathModule . join ( 'foo' , ...req . query . x . split ( '/' ) ) ) ; // NOT OK
408
+ fs . readFileSync ( pathModule . join ( ...req . query . x . split ( '/' ) ) ) ; // NOT OK
409
+ } ) ;
0 commit comments