File tree Expand file tree Collapse file tree 3 files changed +40
-2
lines changed Expand file tree Collapse file tree 3 files changed +40
-2
lines changed Original file line number Diff line number Diff line change @@ -182,7 +182,7 @@ FS.staticInit();
182
182
// limit max consecutive symlinks to 40 (SYMLOOP_MAX).
183
183
linkloop : for ( var nlinks = 0 ; nlinks < 40 ; nlinks ++ ) {
184
184
// split the absolute path
185
- var parts = path . split ( '/' ) . filter ( ( p ) => ! ! p && ( p !== '.' ) ) ;
185
+ var parts = path . split ( '/' ) . filter ( ( p ) => ! ! p ) ;
186
186
187
187
// start at the root
188
188
var current = FS . root ;
@@ -195,6 +195,10 @@ FS.staticInit();
195
195
break;
196
196
}
197
197
198
+ if ( parts [ i ] === '.' ) {
199
+ continue;
200
+ }
201
+
198
202
if ( parts [ i ] === '..' ) {
199
203
current_path = PATH . dirname ( current_path ) ;
200
204
current = current . parent ;
@@ -665,9 +669,12 @@ FS.staticInit();
665
669
var lookup = FS . lookupPath ( path , { parent : true } ) ;
666
670
var parent = lookup . node ;
667
671
var name = PATH . basename ( path ) ;
668
- if ( ! name || name === '.' || name === '..' ) {
672
+ if ( ! name ) {
669
673
throw new FS . ErrnoError ( { { { cDefs . EINVAL } } } ) ;
670
674
}
675
+ if ( name === '.' || name === '..' ) {
676
+ throw new FS . ErrnoError ( { { { cDefs . EEXIST } } } ) ;
677
+ }
671
678
var errCode = FS . mayCreate ( parent , name ) ;
672
679
if ( errCode ) {
673
680
throw new FS . ErrnoError ( errCode ) ;
Original file line number Diff line number Diff line change
1
+ #include <sys/stat.h>
2
+ #include <sys/types.h>
3
+ #include <unistd.h>
4
+ #include <sys/stat.h>
5
+ #include <stdio.h>
6
+ #include <fcntl.h>
7
+ #include <errno.h>
8
+ #include <string.h>
9
+ #include <assert.h>
10
+
11
+ int main () {
12
+ assert (mkdir ("test" , 0777 ) == 0 );
13
+ assert (mkdir ("test/a" , 0777 ) == 0 );
14
+ assert (mkdir ("test/a/.." , 0777 ) == -1 );
15
+ printf ("error: %s\n" , strerror (errno ));
16
+ assert (errno == EEXIST );
17
+ assert (mkdir ("test/a/." , 0777 ) == -1 );
18
+ printf ("error: %s\n" , strerror (errno ));
19
+ assert (errno == EEXIST );
20
+ assert (mkdir ("test/a/b/.." , 0777 ) == -1 );
21
+ printf ("error: %s\n" , strerror (errno ));
22
+ assert (errno == ENOENT );
23
+ assert (mkdir ("test/a/b/." , 0777 ) == -1 );
24
+ printf ("error: %s\n" , strerror (errno ));
25
+ assert (errno == ENOENT );
26
+ printf ("success\n" );
27
+ }
Original file line number Diff line number Diff line change @@ -5858,6 +5858,10 @@ def test_fs_rename_on_existing(self):
5858
5858
self .set_setting ('FORCE_FILESYSTEM' )
5859
5859
self .do_runf ('fs/test_fs_rename_on_existing.c' , 'success' )
5860
5860
5861
+ @also_with_nodefs_both
5862
+ def test_fs_mkdir_dotdot (self ):
5863
+ self .do_runf ('fs/test_fs_mkdir_dotdot.c' , 'success' )
5864
+
5861
5865
def test_sigalrm (self ):
5862
5866
self .do_runf ('test_sigalrm.c' , 'Received alarm!' )
5863
5867
self .do_runf ('test_sigalrm.c' , 'Received alarm!' , emcc_args = ['-sEXIT_RUNTIME' ])
You can’t perform that action at this time.
0 commit comments