File tree 4 files changed +26
-2
lines changed 4 files changed +26
-2
lines changed Original file line number Diff line number Diff line change @@ -449,6 +449,9 @@ FS.staticInit();` +
449
449
// object isn't directly passed in. not possible until
450
450
// SOCKFS is completed.
451
451
createStream ( stream , fd = - 1 ) {
452
+ #if ASSERTIONS
453
+ assert ( fd >= - 1 ) ;
454
+ #endif
452
455
453
456
// clone it, so we can return an instance of FSStream
454
457
stream = Object . assign ( new FS . FSStream ( ) , stream ) ;
Original file line number Diff line number Diff line change @@ -1009,6 +1009,8 @@ var SyscallsLibrary = {
1009
1009
assert ( ! flags ) ;
1010
1010
#endif
1011
1011
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 } } } ;
1012
1014
var existing = FS . getStream ( newfd ) ;
1013
1015
if ( existing ) FS . close ( existing ) ;
1014
1016
return FS . dupStream ( old , newfd ) . fd ;
Original file line number Diff line number Diff line change @@ -43,14 +43,26 @@ int main() {
43
43
printf ("\n" );
44
44
errno = 0 ;
45
45
46
- printf ("DUP2 err \n" );
46
+ printf ("DUP2 bad fds \n" );
47
47
f = dup2 (-2 , -2 );
48
48
printf ("f: %d\n" , f == -1 );
49
49
printf ("errno: %d\n" , errno );
50
50
printf ("close(f): %d\n" , close (f ));
51
51
printf ("\n" );
52
52
errno = 0 ;
53
53
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
+
54
66
printf ("DUP2 pipe\n" );
55
67
int p [2 ];
56
68
pipe (p );
Original file line number Diff line number Diff line change @@ -14,11 +14,18 @@ close(f1): 0
14
14
close(f2): 0
15
15
close(f3): -1
16
16
17
- DUP2 err
17
+ DUP2 bad fds
18
18
f: 1
19
19
errno: 8
20
20
close(f): -1
21
21
22
+ DUP2 bad newfd
23
+ f3: -1
24
+ errno: 8
25
+ f3: -1
26
+ errno: 8
27
+ close(f1): 0
28
+
22
29
DUP2 pipe
23
30
buf: abc
24
31
You can’t perform that action at this time.
0 commit comments