File tree 2 files changed +34
-20
lines changed
2 files changed +34
-20
lines changed Original file line number Diff line number Diff line change @@ -30,19 +30,14 @@ function normalizeStringWin32(path, allowAboveRoot) {
30
30
res . charCodeAt ( res . length - 1 ) !== 46 /*.*/ ||
31
31
res . charCodeAt ( res . length - 2 ) !== 46 /*.*/ ) {
32
32
if ( res . length > 2 ) {
33
- const start = res . length - 1 ;
34
- var j = start ;
35
- for ( ; j >= 0 ; -- j ) {
36
- if ( res . charCodeAt ( j ) === 92 /*\*/ )
37
- break ;
38
- }
39
- if ( j !== start ) {
40
- if ( j === - 1 ) {
33
+ const lastSlashIndex = res . lastIndexOf ( '\\' ) ;
34
+ if ( lastSlashIndex !== res . length - 1 ) {
35
+ if ( lastSlashIndex === - 1 ) {
41
36
res = '' ;
42
37
lastSegmentLength = 0 ;
43
38
} else {
44
- res = res . slice ( 0 , j ) ;
45
- lastSegmentLength = j ;
39
+ res = res . slice ( 0 , lastSlashIndex ) ;
40
+ lastSegmentLength = res . length - 1 - res . lastIndexOf ( '\\' ) ;
46
41
}
47
42
lastSlash = i ;
48
43
dots = 0 ;
@@ -103,19 +98,14 @@ function normalizeStringPosix(path, allowAboveRoot) {
103
98
res . charCodeAt ( res . length - 1 ) !== 46 /*.*/ ||
104
99
res . charCodeAt ( res . length - 2 ) !== 46 /*.*/ ) {
105
100
if ( res . length > 2 ) {
106
- const start = res . length - 1 ;
107
- var j = start ;
108
- for ( ; j >= 0 ; -- j ) {
109
- if ( res . charCodeAt ( j ) === 47 /*/*/ )
110
- break ;
111
- }
112
- if ( j !== start ) {
113
- if ( j === - 1 ) {
101
+ const lastSlashIndex = res . lastIndexOf ( '/' ) ;
102
+ if ( lastSlashIndex !== res . length - 1 ) {
103
+ if ( lastSlashIndex === - 1 ) {
114
104
res = '' ;
115
105
lastSegmentLength = 0 ;
116
106
} else {
117
- res = res . slice ( 0 , j ) ;
118
- lastSegmentLength = j ;
107
+ res = res . slice ( 0 , lastSlashIndex ) ;
108
+ lastSegmentLength = res . length - 1 - res . lastIndexOf ( '/' ) ;
119
109
}
120
110
lastSlash = i ;
121
111
dots = 0 ;
Original file line number Diff line number Diff line change @@ -27,6 +27,18 @@ assert.strictEqual(path.win32.normalize('..\\foo..\\..\\..\\bar'),
27
27
'..\\..\\bar' ) ;
28
28
assert . strictEqual ( path . win32 . normalize ( '..\\...\\..\\.\\...\\..\\..\\bar' ) ,
29
29
'..\\..\\bar' ) ;
30
+ assert . strictEqual ( path . win32 . normalize ( '../../../foo/../../../bar' ) ,
31
+ '..\\..\\..\\..\\..\\bar' ) ;
32
+ assert . strictEqual ( path . win32 . normalize ( '../../../foo/../../../bar/../../' ) ,
33
+ '..\\..\\..\\..\\..\\..\\' ) ;
34
+ assert . strictEqual (
35
+ path . win32 . normalize ( '../foobar/barfoo/foo/../../../bar/../../' ) ,
36
+ '..\\..\\'
37
+ ) ;
38
+ assert . strictEqual (
39
+ path . win32 . normalize ( '../.../../foobar/../../../bar/../../baz' ) ,
40
+ '..\\..\\..\\..\\baz'
41
+ ) ;
30
42
31
43
assert . strictEqual ( path . posix . normalize ( './fixtures///b/../b/c.js' ) ,
32
44
'fixtures/b/c.js' ) ;
@@ -44,3 +56,15 @@ assert.strictEqual(path.posix.normalize('bar/foo..'), 'bar/foo..');
44
56
assert . strictEqual ( path . posix . normalize ( '../foo../../../bar' ) , '../../bar' ) ;
45
57
assert . strictEqual ( path . posix . normalize ( '../.../.././.../../../bar' ) ,
46
58
'../../bar' ) ;
59
+ assert . strictEqual ( path . posix . normalize ( '../../../foo/../../../bar' ) ,
60
+ '../../../../../bar' ) ;
61
+ assert . strictEqual ( path . posix . normalize ( '../../../foo/../../../bar/../../' ) ,
62
+ '../../../../../../' ) ;
63
+ assert . strictEqual (
64
+ path . posix . normalize ( '../foobar/barfoo/foo/../../../bar/../../' ) ,
65
+ '../../'
66
+ ) ;
67
+ assert . strictEqual (
68
+ path . posix . normalize ( '../.../../foobar/../../../bar/../../baz' ) ,
69
+ '../../../../baz'
70
+ ) ;
You can’t perform that action at this time.
0 commit comments