aboutsummaryrefslogtreecommitdiff
path: root/lib/internal
diff options
context:
space:
mode:
authorRuben Bridgewater <ruben@bridgewater.de>2019-03-20 13:15:48 +0100
committerRuben Bridgewater <ruben@bridgewater.de>2019-03-27 17:05:19 +0100
commit7bddfcc61a5a7d04583a8c4fec462ca5ce45b677 (patch)
tree0ed6a369fdb71c84281ae830b24ab78da6bce3f7 /lib/internal
parent751c92d9728da6f6f86e443783a61253791cfc2f (diff)
downloadandroid-node-v8-7bddfcc61a5a7d04583a8c4fec462ca5ce45b677.tar.gz
android-node-v8-7bddfcc61a5a7d04583a8c4fec462ca5ce45b677.tar.bz2
android-node-v8-7bddfcc61a5a7d04583a8c4fec462ca5ce45b677.zip
lib: consolidate arrayBufferView validation
There are lots of places that validate for arrayBufferView and we have multiple functions that do the same thing. Instead, move the validation into `internal/validators` so all files can use that instead. There are more functions throughout the code that do the same but it takes some more work to fully consolidate all of those. PR-URL: https://github.com/nodejs/node/pull/26809 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'lib/internal')
-rw-r--r--lib/internal/crypto/certificate.js11
-rw-r--r--lib/internal/fs/promises.js2
-rw-r--r--lib/internal/fs/utils.js10
-rw-r--r--lib/internal/validators.js15
4 files changed, 20 insertions, 18 deletions
diff --git a/lib/internal/crypto/certificate.js b/lib/internal/crypto/certificate.js
index 29372ca497..d828bef0f6 100644
--- a/lib/internal/crypto/certificate.js
+++ b/lib/internal/crypto/certificate.js
@@ -5,6 +5,9 @@ const {
certExportPublicKey,
certVerifySpkac
} = internalBinding('crypto');
+const {
+ validateBuffer
+} = require('internal/validators');
const { ERR_INVALID_ARG_TYPE } = require('internal/errors').codes;
const { isArrayBufferView } = require('internal/util/types');
@@ -14,13 +17,7 @@ const {
} = require('internal/crypto/util');
function verifySpkac(spkac) {
- if (!isArrayBufferView(spkac)) {
- throw new ERR_INVALID_ARG_TYPE(
- 'spkac',
- ['Buffer', 'TypedArray', 'DataView'],
- spkac
- );
- }
+ validateBuffer(spkac, 'spkac');
return certVerifySpkac(spkac);
}
diff --git a/lib/internal/fs/promises.js b/lib/internal/fs/promises.js
index 4a0c43a393..93c8fc0f88 100644
--- a/lib/internal/fs/promises.js
+++ b/lib/internal/fs/promises.js
@@ -27,13 +27,13 @@ const {
stringToFlags,
stringToSymlinkType,
toUnixTimestamp,
- validateBuffer,
validateOffsetLengthRead,
validateOffsetLengthWrite,
validatePath
} = require('internal/fs/utils');
const {
parseMode,
+ validateBuffer,
validateInteger,
validateUint32
} = require('internal/validators');
diff --git a/lib/internal/fs/utils.js b/lib/internal/fs/utils.js
index eacc460661..99e820d294 100644
--- a/lib/internal/fs/utils.js
+++ b/lib/internal/fs/utils.js
@@ -14,7 +14,6 @@ const {
} = require('internal/errors');
const {
isUint8Array,
- isArrayBufferView,
isDate
} = require('internal/util/types');
const { once } = require('internal/util');
@@ -393,14 +392,6 @@ function toUnixTimestamp(time, name = 'time') {
throw new ERR_INVALID_ARG_TYPE(name, ['Date', 'Time in seconds'], time);
}
-const validateBuffer = hideStackFrames((buffer) => {
- if (!isArrayBufferView(buffer)) {
- throw new ERR_INVALID_ARG_TYPE('buffer',
- ['Buffer', 'TypedArray', 'DataView'],
- buffer);
- }
-});
-
const validateOffsetLengthRead = hideStackFrames(
(offset, length, bufferLength) => {
if (offset < 0 || offset >= bufferLength) {
@@ -453,7 +444,6 @@ module.exports = {
stringToSymlinkType,
Stats,
toUnixTimestamp,
- validateBuffer,
validateOffsetLengthRead,
validateOffsetLengthWrite,
validatePath
diff --git a/lib/internal/validators.js b/lib/internal/validators.js
index e4d937bf19..3cc9c2820a 100644
--- a/lib/internal/validators.js
+++ b/lib/internal/validators.js
@@ -8,6 +8,9 @@ const {
ERR_OUT_OF_RANGE
}
} = require('internal/errors');
+const {
+ isArrayBufferView
+} = require('internal/util/types');
function isInt32(value) {
return value === (value | 0);
@@ -107,10 +110,22 @@ function validateNumber(value, name) {
throw new ERR_INVALID_ARG_TYPE(name, 'number', value);
}
+// TODO(BridgeAR): We have multiple validation functions that call
+// `require('internal/utils').toBuf()` before validating for array buffer views.
+// Those should likely also be consolidated in here.
+const validateBuffer = hideStackFrames((buffer, name = 'buffer') => {
+ if (!isArrayBufferView(buffer)) {
+ throw new ERR_INVALID_ARG_TYPE(name,
+ ['Buffer', 'TypedArray', 'DataView'],
+ buffer);
+ }
+});
+
module.exports = {
isInt32,
isUint32,
parseMode,
+ validateBuffer,
validateInteger,
validateInt32,
validateUint32,