summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJames M Snell <jasnell@gmail.com>2017-11-26 12:44:20 -0800
committerJames M Snell <jasnell@gmail.com>2017-12-13 13:26:21 -0800
commit8974df15a973e97a74cf9fb0ccb45c11baa7b54a (patch)
treecf2f1e2cd246d8b555d6ea172f42d51b7f465592 /lib
parent04ae4862e670a8849454e6d8db4d8f73d0492190 (diff)
downloadandroid-node-v8-8974df15a973e97a74cf9fb0ccb45c11baa7b54a.tar.gz
android-node-v8-8974df15a973e97a74cf9fb0ccb45c11baa7b54a.tar.bz2
android-node-v8-8974df15a973e97a74cf9fb0ccb45c11baa7b54a.zip
fs: move type checking for fs.close to js
PR-URL: https://github.com/nodejs/node/pull/17334 Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Timothy Gu <timothygu99@gmail.com> Reviewed-By: Jon Moss <me@jonathanmoss.me> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/fs.js83
1 files changed, 75 insertions, 8 deletions
diff --git a/lib/fs.js b/lib/fs.js
index ee19e96f3b..67c96a7524 100644
--- a/lib/fs.js
+++ b/lib/fs.js
@@ -636,12 +636,22 @@ fs.readFileSync = function(path, options) {
};
fs.close = function(fd, callback) {
- var req = new FSReqWrap();
+ if (!Number.isInteger(fd))
+ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'fd', 'number');
+ if (fd < 0 || fd > 0xFFFFFFFF)
+ throw new errors.RangeError('ERR_OUT_OF_RANGE', 'fd');
+
+ const req = new FSReqWrap();
req.oncomplete = makeCallback(callback);
binding.close(fd, req);
};
fs.closeSync = function(fd) {
+ if (!Number.isInteger(fd))
+ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'fd', 'number');
+ if (fd < 0 || fd > 0xFFFFFFFF)
+ throw new errors.RangeError('ERR_OUT_OF_RANGE', 'fd');
+
return binding.close(fd);
};
@@ -854,7 +864,14 @@ fs.ftruncate = function(fd, len, callback) {
} else if (len === undefined) {
len = 0;
}
- var req = new FSReqWrap();
+ if (typeof fd !== 'number')
+ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'fd', 'number');
+ if (fd < 0 || fd > 0xFFFFFFFF)
+ throw new errors.RangeError('ERR_OUT_OF_RANGE', 'fd');
+ if (typeof len !== 'number')
+ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'len', 'number');
+ len = Math.max(0, len);
+ const req = new FSReqWrap();
req.oncomplete = makeCallback(callback);
binding.ftruncate(fd, len, req);
};
@@ -863,6 +880,13 @@ fs.ftruncateSync = function(fd, len) {
if (len === undefined) {
len = 0;
}
+ if (typeof fd !== 'number')
+ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'fd', 'number');
+ if (fd < 0 || fd > 0xFFFFFFFF)
+ throw new errors.RangeError('ERR_OUT_OF_RANGE', 'fd');
+ if (typeof len !== 'number')
+ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'len', 'number');
+ len = Math.max(0, len);
return binding.ftruncate(fd, len);
};
@@ -883,22 +907,38 @@ fs.rmdirSync = function(path) {
};
fs.fdatasync = function(fd, callback) {
- var req = new FSReqWrap();
+ if (typeof fd !== 'number')
+ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'fd', 'number');
+ if (fd < 0 || fd > 0xFFFFFFFF)
+ throw new errors.RangeError('ERR_OUT_OF_RANGE', 'fd');
+ const req = new FSReqWrap();
req.oncomplete = makeCallback(callback);
binding.fdatasync(fd, req);
};
fs.fdatasyncSync = function(fd) {
+ if (typeof fd !== 'number')
+ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'fd', 'number');
+ if (fd < 0 || fd > 0xFFFFFFFF)
+ throw new errors.RangeError('ERR_OUT_OF_RANGE', 'fd');
return binding.fdatasync(fd);
};
fs.fsync = function(fd, callback) {
- var req = new FSReqWrap();
+ if (typeof fd !== 'number')
+ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'fd', 'number');
+ if (fd < 0 || fd > 0xFFFFFFFF)
+ throw new errors.RangeError('ERR_OUT_OF_RANGE', 'fd');
+ const req = new FSReqWrap();
req.oncomplete = makeCallback(callback);
binding.fsync(fd, req);
};
fs.fsyncSync = function(fd) {
+ if (typeof fd !== 'number')
+ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'fd', 'number');
+ if (fd < 0 || fd > 0xFFFFFFFF)
+ throw new errors.RangeError('ERR_OUT_OF_RANGE', 'fd');
return binding.fsync(fd);
};
@@ -941,7 +981,11 @@ fs.readdirSync = function(path, options) {
};
fs.fstat = function(fd, callback) {
- var req = new FSReqWrap();
+ if (typeof fd !== 'number')
+ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'fd', 'number');
+ if (fd < 0 || fd > 0xFFFFFFFF)
+ throw new errors.RangeError('ERR_OUT_OF_RANGE', 'fd');
+ const req = new FSReqWrap();
req.oncomplete = makeStatsCallback(callback);
binding.fstat(fd, req);
};
@@ -967,6 +1011,10 @@ fs.stat = function(path, callback) {
};
fs.fstatSync = function(fd) {
+ if (typeof fd !== 'number')
+ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'fd', 'number');
+ if (fd < 0 || fd > 0xFFFFFFFF)
+ throw new errors.RangeError('ERR_OUT_OF_RANGE', 'fd');
binding.fstat(fd);
return statsFromValues();
};
@@ -1098,13 +1146,32 @@ fs.unlinkSync = function(path) {
};
fs.fchmod = function(fd, mode, callback) {
- var req = new FSReqWrap();
+ mode = modeNum(mode);
+ if (typeof fd !== 'number')
+ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'fd', 'number');
+ if (fd < 0 || fd > 0xFFFFFFFF)
+ throw new errors.RangeError('ERR_OUT_OF_RANGE', 'fd');
+ if (typeof mode !== 'number')
+ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'mode', 'number');
+ if (mode < 0 || mode > 0o777)
+ throw new errors.RangeError('ERR_OUT_OF_RANGE', 'mode');
+
+ const req = new FSReqWrap();
req.oncomplete = makeCallback(callback);
- binding.fchmod(fd, modeNum(mode), req);
+ binding.fchmod(fd, mode, req);
};
fs.fchmodSync = function(fd, mode) {
- return binding.fchmod(fd, modeNum(mode));
+ mode = modeNum(mode);
+ if (typeof fd !== 'number')
+ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'fd', 'number');
+ if (fd < 0 || fd > 0xFFFFFFFF)
+ throw new errors.RangeError('ERR_OUT_OF_RANGE', 'fd');
+ if (typeof mode !== 'number')
+ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'mode', 'number');
+ if (mode < 0 || mode > 0o777)
+ throw new errors.RangeError('ERR_OUT_OF_RANGE', 'mode');
+ return binding.fchmod(fd, mode);
};
if (constants.O_SYMLINK !== undefined) {