File tree Expand file tree Collapse file tree 4 files changed +26
-2
lines changed Expand file tree Collapse file tree 4 files changed +26
-2
lines changed Original file line number Diff line number Diff line change @@ -449,6 +449,9 @@ FS.staticInit();` +
449449 // object isn't directly passed in. not possible until
450450 // SOCKFS is completed.
451451 createStream ( stream , fd = - 1 ) {
452+ #if ASSERTIONS
453+ assert ( fd >= - 1 ) ;
454+ #endif
452455
453456 // clone it, so we can return an instance of FSStream
454457 stream = Object . assign ( new FS . FSStream ( ) , stream ) ;
Original file line number Diff line number Diff line change @@ -1009,6 +1009,8 @@ var SyscallsLibrary = {
10091009 assert ( ! flags ) ;
10101010#endif
10111011 if ( old . fd === newfd ) return - { { { cDefs . EINVAL } } } ;
1012+ // Check newfd is within range of valid open file descriptors.
1013+ if ( newfd < 0 || newfd >= FS . MAX_OPEN_FDS ) return - { { { cDefs. EBADF } } } ;
10121014 var existing = FS . getStream ( newfd ) ;
10131015 if ( existing ) FS . close ( existing ) ;
10141016 return FS . dupStream ( old , newfd ) . fd ;
Original file line number Diff line number Diff line change @@ -43,14 +43,26 @@ int main() {
4343 printf ("\n" );
4444 errno = 0 ;
4545
46- printf ("DUP2 err \n" );
46+ printf ("DUP2 bad fds \n" );
4747 f = dup2 (-2 , -2 );
4848 printf ("f: %d\n" , f == -1 );
4949 printf ("errno: %d\n" , errno );
5050 printf ("close(f): %d\n" , close (f ));
5151 printf ("\n" );
5252 errno = 0 ;
5353
54+ printf ("DUP2 bad newfd\n" );
55+ f = open ("/" , O_RDONLY );
56+ f3 = dup2 (f , -1 );
57+ printf ("f3: %d\n" , f3 );
58+ printf ("errno: %d\n" , errno );
59+ f3 = dup2 (f , 256000 );
60+ printf ("f3: %d\n" , f3 );
61+ printf ("errno: %d\n" , errno );
62+ printf ("close(f1): %d\n" , close (f ));
63+ printf ("\n" );
64+ errno = 0 ;
65+
5466 printf ("DUP2 pipe\n" );
5567 int p [2 ];
5668 pipe (p );
Original file line number Diff line number Diff line change @@ -14,11 +14,18 @@ close(f1): 0
1414close(f2): 0
1515close(f3): -1
1616
17- DUP2 err
17+ DUP2 bad fds
1818f: 1
1919errno: 8
2020close(f): -1
2121
22+ DUP2 bad newfd
23+ f3: -1
24+ errno: 8
25+ f3: -1
26+ errno: 8
27+ close(f1): 0
28+
2229DUP2 pipe
2330buf: abc
2431
You can’t perform that action at this time.
0 commit comments