summaryrefslogtreecommitdiff
path: root/lib/internal
diff options
context:
space:
mode:
authorYaniv Friedensohn <yaniv.friedensohn@gmail.com>2019-05-11 20:00:38 +0300
committerRich Trott <rtrott@gmail.com>2019-08-09 15:58:58 -0700
commita0e2c6d2843ea6e37035a949827cdcc7949026d6 (patch)
tree8324272d3272db9c67a81d16c1dfd0e225069248 /lib/internal
parentc065773cc56080b48ff4e29822152679f7db5573 (diff)
downloadandroid-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.js4
-rw-r--r--lib/internal/crypto/hash.js9
-rw-r--r--lib/internal/validators.js14
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,