diff options
author | Yaniv Friedensohn <yaniv.friedensohn@gmail.com> | 2019-05-11 20:00:38 +0300 |
---|---|---|
committer | Rich Trott <rtrott@gmail.com> | 2019-08-09 15:58:58 -0700 |
commit | a0e2c6d2843ea6e37035a949827cdcc7949026d6 (patch) | |
tree | 8324272d3272db9c67a81d16c1dfd0e225069248 /lib/internal | |
parent | c065773cc56080b48ff4e29822152679f7db5573 (diff) | |
download | android-node-v8-a0e2c6d2843ea6e37035a949827cdcc7949026d6.tar.gz android-node-v8-a0e2c6d2843ea6e37035a949827cdcc7949026d6.tar.bz2 android-node-v8-a0e2c6d2843ea6e37035a949827cdcc7949026d6.zip |
src: add error codes to errors thrown in C++
PR-URL: https://github.com/nodejs/node/pull/27700
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'lib/internal')
-rw-r--r-- | lib/internal/crypto/cipher.js | 4 | ||||
-rw-r--r-- | lib/internal/crypto/hash.js | 9 | ||||
-rw-r--r-- | lib/internal/validators.js | 14 |
3 files changed, 24 insertions, 3 deletions
diff --git a/lib/internal/crypto/cipher.js b/lib/internal/crypto/cipher.js index 34507dd157..20ca1454c8 100644 --- a/lib/internal/crypto/cipher.js +++ b/lib/internal/crypto/cipher.js @@ -12,7 +12,7 @@ const { ERR_INVALID_ARG_TYPE, ERR_INVALID_OPT_VALUE } = require('internal/errors').codes; -const { validateString } = require('internal/validators'); +const { validateEncoding, validateString } = require('internal/validators'); const { preparePrivateKey, @@ -161,6 +161,8 @@ Cipher.prototype.update = function update(data, inputEncoding, outputEncoding) { throw invalidArrayBufferView('data', data); } + validateEncoding(data, inputEncoding); + const ret = this[kHandle].update(data, inputEncoding); if (outputEncoding && outputEncoding !== 'buffer') { diff --git a/lib/internal/crypto/hash.js b/lib/internal/crypto/hash.js index 38b125e5f2..7e4a83ca93 100644 --- a/lib/internal/crypto/hash.js +++ b/lib/internal/crypto/hash.js @@ -25,7 +25,8 @@ const { ERR_CRYPTO_HASH_UPDATE_FAILED, ERR_INVALID_ARG_TYPE } = require('internal/errors').codes; -const { validateString, validateUint32 } = require('internal/validators'); +const { validateEncoding, validateString, validateUint32 } = + require('internal/validators'); const { normalizeEncoding } = require('internal/util'); const { isArrayBufferView } = require('internal/util/types'); const LazyTransform = require('internal/streams/lazy_transform'); @@ -61,6 +62,8 @@ Hash.prototype._flush = function _flush(callback) { }; Hash.prototype.update = function update(data, encoding) { + encoding = encoding || getDefaultEncoding(); + const state = this[kState]; if (state[kFinalized]) throw new ERR_CRYPTO_HASH_FINALIZED(); @@ -74,7 +77,9 @@ Hash.prototype.update = function update(data, encoding) { data); } - if (!this[kHandle].update(data, encoding || getDefaultEncoding())) + validateEncoding(data, encoding); + + if (!this[kHandle].update(data, encoding)) throw new ERR_CRYPTO_HASH_UPDATE_FAILED(); return this; }; diff --git a/lib/internal/validators.js b/lib/internal/validators.js index 8f5605dad2..f74338ebcb 100644 --- a/lib/internal/validators.js +++ b/lib/internal/validators.js @@ -9,6 +9,7 @@ const { ERR_UNKNOWN_SIGNAL } } = require('internal/errors'); +const { normalizeEncoding } = require('internal/util'); const { isArrayBufferView } = require('internal/util/types'); @@ -142,11 +143,24 @@ const validateBuffer = hideStackFrames((buffer, name = 'buffer') => { } }); +function validateEncoding(data, encoding) { + const normalizedEncoding = normalizeEncoding(encoding); + const length = data.length; + + if (normalizedEncoding === 'hex' && length % 2 !== 0) { + throw new ERR_INVALID_ARG_VALUE('encoding', encoding, + `is invalid for data of length ${length}`); + } + + // TODO(bnoordhuis) Add BASE64 check? +} + module.exports = { isInt32, isUint32, parseMode, validateBuffer, + validateEncoding, validateInteger, validateInt32, validateUint32, |