diff options
author | Ruben Bridgewater <ruben@bridgewater.de> | 2019-03-20 13:15:48 +0100 |
---|---|---|
committer | Ruben Bridgewater <ruben@bridgewater.de> | 2019-03-27 17:05:19 +0100 |
commit | 7bddfcc61a5a7d04583a8c4fec462ca5ce45b677 (patch) | |
tree | 0ed6a369fdb71c84281ae830b24ab78da6bce3f7 /lib/internal | |
parent | 751c92d9728da6f6f86e443783a61253791cfc2f (diff) | |
download | android-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.js | 11 | ||||
-rw-r--r-- | lib/internal/fs/promises.js | 2 | ||||
-rw-r--r-- | lib/internal/fs/utils.js | 10 | ||||
-rw-r--r-- | lib/internal/validators.js | 15 |
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, |