@@ -636,12 +636,22 @@ fs.readFileSync = function(path, options) {
636636} ;
637637
638638fs . close = function ( fd , callback ) {
639- var req = new FSReqWrap ( ) ;
639+ if ( ! Number . isInteger ( fd ) )
640+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'fd' , 'number' ) ;
641+ if ( fd < 0 || fd > 0xFFFFFFFF )
642+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'fd' ) ;
643+
644+ const req = new FSReqWrap ( ) ;
640645 req . oncomplete = makeCallback ( callback ) ;
641646 binding . close ( fd , req ) ;
642647} ;
643648
644649fs . closeSync = function ( fd ) {
650+ if ( ! Number . isInteger ( fd ) )
651+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'fd' , 'number' ) ;
652+ if ( fd < 0 || fd > 0xFFFFFFFF )
653+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'fd' ) ;
654+
645655 return binding . close ( fd ) ;
646656} ;
647657
@@ -854,7 +864,14 @@ fs.ftruncate = function(fd, len, callback) {
854864 } else if ( len === undefined ) {
855865 len = 0 ;
856866 }
857- var req = new FSReqWrap ( ) ;
867+ if ( typeof fd !== 'number' )
868+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'fd' , 'number' ) ;
869+ if ( fd < 0 || fd > 0xFFFFFFFF )
870+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'fd' ) ;
871+ if ( typeof len !== 'number' )
872+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'len' , 'number' ) ;
873+ len = Math . max ( 0 , len ) ;
874+ const req = new FSReqWrap ( ) ;
858875 req . oncomplete = makeCallback ( callback ) ;
859876 binding . ftruncate ( fd , len , req ) ;
860877} ;
@@ -863,6 +880,13 @@ fs.ftruncateSync = function(fd, len) {
863880 if ( len === undefined ) {
864881 len = 0 ;
865882 }
883+ if ( typeof fd !== 'number' )
884+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'fd' , 'number' ) ;
885+ if ( fd < 0 || fd > 0xFFFFFFFF )
886+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'fd' ) ;
887+ if ( typeof len !== 'number' )
888+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'len' , 'number' ) ;
889+ len = Math . max ( 0 , len ) ;
866890 return binding . ftruncate ( fd , len ) ;
867891} ;
868892
@@ -883,22 +907,38 @@ fs.rmdirSync = function(path) {
883907} ;
884908
885909fs . fdatasync = function ( fd , callback ) {
886- var req = new FSReqWrap ( ) ;
910+ if ( typeof fd !== 'number' )
911+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'fd' , 'number' ) ;
912+ if ( fd < 0 || fd > 0xFFFFFFFF )
913+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'fd' ) ;
914+ const req = new FSReqWrap ( ) ;
887915 req . oncomplete = makeCallback ( callback ) ;
888916 binding . fdatasync ( fd , req ) ;
889917} ;
890918
891919fs . fdatasyncSync = function ( fd ) {
920+ if ( typeof fd !== 'number' )
921+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'fd' , 'number' ) ;
922+ if ( fd < 0 || fd > 0xFFFFFFFF )
923+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'fd' ) ;
892924 return binding . fdatasync ( fd ) ;
893925} ;
894926
895927fs . fsync = function ( fd , callback ) {
896- var req = new FSReqWrap ( ) ;
928+ if ( typeof fd !== 'number' )
929+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'fd' , 'number' ) ;
930+ if ( fd < 0 || fd > 0xFFFFFFFF )
931+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'fd' ) ;
932+ const req = new FSReqWrap ( ) ;
897933 req . oncomplete = makeCallback ( callback ) ;
898934 binding . fsync ( fd , req ) ;
899935} ;
900936
901937fs . fsyncSync = function ( fd ) {
938+ if ( typeof fd !== 'number' )
939+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'fd' , 'number' ) ;
940+ if ( fd < 0 || fd > 0xFFFFFFFF )
941+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'fd' ) ;
902942 return binding . fsync ( fd ) ;
903943} ;
904944
@@ -941,7 +981,11 @@ fs.readdirSync = function(path, options) {
941981} ;
942982
943983fs . fstat = function ( fd , callback ) {
944- var req = new FSReqWrap ( ) ;
984+ if ( typeof fd !== 'number' )
985+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'fd' , 'number' ) ;
986+ if ( fd < 0 || fd > 0xFFFFFFFF )
987+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'fd' ) ;
988+ const req = new FSReqWrap ( ) ;
945989 req . oncomplete = makeStatsCallback ( callback ) ;
946990 binding . fstat ( fd , req ) ;
947991} ;
@@ -967,6 +1011,10 @@ fs.stat = function(path, callback) {
9671011} ;
9681012
9691013fs . fstatSync = function ( fd ) {
1014+ if ( typeof fd !== 'number' )
1015+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'fd' , 'number' ) ;
1016+ if ( fd < 0 || fd > 0xFFFFFFFF )
1017+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'fd' ) ;
9701018 binding . fstat ( fd ) ;
9711019 return statsFromValues ( ) ;
9721020} ;
@@ -1098,13 +1146,32 @@ fs.unlinkSync = function(path) {
10981146} ;
10991147
11001148fs . fchmod = function ( fd , mode , callback ) {
1101- var req = new FSReqWrap ( ) ;
1149+ mode = modeNum ( mode ) ;
1150+ if ( typeof fd !== 'number' )
1151+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'fd' , 'number' ) ;
1152+ if ( fd < 0 || fd > 0xFFFFFFFF )
1153+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'fd' ) ;
1154+ if ( typeof mode !== 'number' )
1155+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'mode' , 'number' ) ;
1156+ if ( mode < 0 || mode > 0o777 )
1157+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'mode' ) ;
1158+
1159+ const req = new FSReqWrap ( ) ;
11021160 req . oncomplete = makeCallback ( callback ) ;
1103- binding . fchmod ( fd , modeNum ( mode ) , req ) ;
1161+ binding . fchmod ( fd , mode , req ) ;
11041162} ;
11051163
11061164fs . fchmodSync = function ( fd , mode ) {
1107- return binding . fchmod ( fd , modeNum ( mode ) ) ;
1165+ mode = modeNum ( mode ) ;
1166+ if ( typeof fd !== 'number' )
1167+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'fd' , 'number' ) ;
1168+ if ( fd < 0 || fd > 0xFFFFFFFF )
1169+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'fd' ) ;
1170+ if ( typeof mode !== 'number' )
1171+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'mode' , 'number' ) ;
1172+ if ( mode < 0 || mode > 0o777 )
1173+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'mode' ) ;
1174+ return binding . fchmod ( fd , mode ) ;
11081175} ;
11091176
11101177if ( constants . O_SYMLINK !== undefined ) {
0 commit comments