diff options
author | Joyee Cheung <joyeec9h3@gmail.com> | 2018-04-16 22:58:19 +0800 |
---|---|---|
committer | Joyee Cheung <joyeec9h3@gmail.com> | 2018-04-19 12:09:26 +0800 |
commit | 2c23e31c317025f6064c194f8850a474f4b6bf53 (patch) | |
tree | 8f25f315719122321a912cf1bae35a6f76a51edf /src/node_errors.h | |
parent | 7e269f52667104c94dcf65e527b04c2632d701bb (diff) | |
download | node-new-2c23e31c317025f6064c194f8850a474f4b6bf53.tar.gz |
src: throw ERR_INVALID_ARG_TYPE in C++ argument checks
- Moves THROW_AND_RETURN_IF_NOT_BUFFER and
THROW_AND_RETURN_IF_NOT_STRING from node_crypto.cc to
node_errors.h so it can be reused.
- Move THROW_AND_RETURN_UNLESS_BUFFER in util.h to
node_buffer.cc and call THROW_AND_RETURN_IF_NOT_BUFFER
there. The only other reference to THROW_AND_RETURN_UNLESS_BUFFER in
node_i18n.cc can be safely replaced by an assertion since
the argument will be checked in JS land.
- Migrate ERR_INVALID_ARG_TYPE errors in C++. We can move the
checks to JS land if possible later without having to
go semver-major.
PR-URL: https://github.com/nodejs/node/pull/20121
Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Diffstat (limited to 'src/node_errors.h')
-rw-r--r-- | src/node_errors.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/node_errors.h b/src/node_errors.h index 584a62ece1..1ebedc2fcb 100644 --- a/src/node_errors.h +++ b/src/node_errors.h @@ -18,6 +18,7 @@ namespace node { #define ERRORS_WITH_CODE(V) \ V(ERR_INDEX_OUT_OF_RANGE, RangeError) \ + V(ERR_INVALID_ARG_TYPE, TypeError) \ V(ERR_MEMORY_ALLOCATION_FAILED, Error) \ V(ERR_STRING_TOO_LONG, Error) \ V(ERR_BUFFER_TOO_LARGE, Error) @@ -74,6 +75,20 @@ inline v8::Local<v8::Value> ERR_STRING_TOO_LONG(v8::Isolate *isolate) { return ERR_STRING_TOO_LONG(isolate, message); } +#define THROW_AND_RETURN_IF_NOT_BUFFER(env, val, prefix) \ + do { \ + if (!Buffer::HasInstance(val)) \ + return node::THROW_ERR_INVALID_ARG_TYPE(env, \ + prefix " must be a buffer"); \ + } while (0) + +#define THROW_AND_RETURN_IF_NOT_STRING(env, val, prefix) \ + do { \ + if (!val->IsString()) \ + return node::THROW_ERR_INVALID_ARG_TYPE(env, \ + prefix " must be a string"); \ + } while (0) + } // namespace node #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS |