summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorcjihrig <cjihrig@gmail.com>2021-04-09 21:39:43 -0400
committercjihrig <cjihrig@gmail.com>2021-04-11 23:57:29 -0400
commit8e76397fab69f79dfd77147360e20e004b65beed (patch)
tree0ab6b6b44b86480167d198241aadc94a3de0c259 /lib
parent28bca33f284f5f76a7f934fa6b60c586e5cfc948 (diff)
downloadnode-new-8e76397fab69f79dfd77147360e20e004b65beed.tar.gz
fs: validate encoding to binding.writeString()
The binding layer performs some validation of the encoding and data passed to WriteString(). This commit adds similar validation to the JS layer for better error handling. PR-URL: https://github.com/nodejs/node/pull/38183 Fixes: https://github.com/nodejs/node/issues/38168 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Darshan Sen <raisinten@gmail.com> Reviewed-By: Anto Aravinth <anto.aravinth.cse@gmail.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/fs.js7
-rw-r--r--lib/internal/fs/promises.js2
2 files changed, 8 insertions, 1 deletions
diff --git a/lib/fs.js b/lib/fs.js
index 6bf068416f..937b45cdb5 100644
--- a/lib/fs.js
+++ b/lib/fs.js
@@ -133,6 +133,7 @@ const {
validateBoolean,
validateBuffer,
validateCallback,
+ validateEncoding,
validateFunction,
validateInteger,
} = require('internal/validators');
@@ -702,11 +703,14 @@ function write(fd, buffer, offset, length, position, callback) {
}
length = 'utf8';
}
+
+ const str = String(buffer);
+ validateEncoding(str, length);
callback = maybeCallback(position);
const req = new FSReqCallback();
req.oncomplete = wrapper;
- return binding.writeString(fd, String(buffer), offset, length, req);
+ return binding.writeString(fd, str, offset, length, req);
}
ObjectDefineProperty(write, internalUtil.customPromisifyArgs,
@@ -735,6 +739,7 @@ function writeSync(fd, buffer, offset, length, position) {
undefined, ctx);
} else {
validateStringAfterArrayBufferView(buffer, 'buffer');
+ validateEncoding(buffer, length);
if (offset === undefined)
offset = null;
diff --git a/lib/internal/fs/promises.js b/lib/internal/fs/promises.js
index 791bf57a7d..683969e2ec 100644
--- a/lib/internal/fs/promises.js
+++ b/lib/internal/fs/promises.js
@@ -70,6 +70,7 @@ const {
validateAbortSignal,
validateBoolean,
validateBuffer,
+ validateEncoding,
validateInteger,
} = require('internal/validators');
const pathModule = require('path');
@@ -467,6 +468,7 @@ async function write(handle, buffer, offset, length, position) {
}
validateStringAfterArrayBufferView(buffer, 'buffer');
+ validateEncoding(buffer, length);
const bytesWritten = (await binding.writeString(handle.fd, buffer, offset,
length, kUsePromises)) || 0;
return { bytesWritten, buffer };