summaryrefslogtreecommitdiff
path: root/src/node_errors.h
diff options
context:
space:
mode:
authorJoyee Cheung <joyeec9h3@gmail.com>2018-04-16 22:58:19 +0800
committerJoyee Cheung <joyeec9h3@gmail.com>2018-04-19 12:09:26 +0800
commit2c23e31c317025f6064c194f8850a474f4b6bf53 (patch)
tree8f25f315719122321a912cf1bae35a6f76a51edf /src/node_errors.h
parent7e269f52667104c94dcf65e527b04c2632d701bb (diff)
downloadnode-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.h15
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