summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTrevor Norris <trev.norris@gmail.com>2016-04-29 12:26:35 -0600
committerTrevor Norris <trev.norris@gmail.com>2016-05-24 14:38:34 -0600
commit9dd5b93c42a2e693a6660a580cf67723d7b287c8 (patch)
tree46b3931cb82645cef802e8857dd84bd697a036c7 /src
parentddc19be6de1ba263d9c175b2760696e7b9918b25 (diff)
downloadandroid-node-v8-9dd5b93c42a2e693a6660a580cf67723d7b287c8.tar.gz
android-node-v8-9dd5b93c42a2e693a6660a580cf67723d7b287c8.tar.bz2
android-node-v8-9dd5b93c42a2e693a6660a580cf67723d7b287c8.zip
src: always clear wrap before persistent Reset()
In case the handle is stored and accessed after the associated C++ class was destructed, set the internal pointer to nullptr so any getters/setters can return accordingly without aborting the application. PR-URL: https://github.com/nodejs/node/pull/6184 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'src')
-rw-r--r--src/cares_wrap.cc2
-rw-r--r--src/handle_wrap.cc2
-rw-r--r--src/node_crypto.cc2
-rw-r--r--src/req-wrap-inl.h1
4 files changed, 6 insertions, 1 deletions
diff --git a/src/cares_wrap.cc b/src/cares_wrap.cc
index 6bd73ae3ba..91d139ac9c 100644
--- a/src/cares_wrap.cc
+++ b/src/cares_wrap.cc
@@ -9,6 +9,7 @@
#include "req-wrap-inl.h"
#include "tree.h"
#include "util.h"
+#include "util-inl.h"
#include "uv.h"
#include <errno.h>
@@ -258,6 +259,7 @@ class QueryWrap : public AsyncWrap {
virtual ~QueryWrap() override {
CHECK_EQ(false, persistent().IsEmpty());
+ ClearWrap(object());
persistent().Reset();
}
diff --git a/src/handle_wrap.cc b/src/handle_wrap.cc
index b3ef152a2e..c5792338af 100644
--- a/src/handle_wrap.cc
+++ b/src/handle_wrap.cc
@@ -98,7 +98,7 @@ void HandleWrap::OnClose(uv_handle_t* handle) {
if (have_close_callback)
wrap->MakeCallback(env->onclose_string(), 0, nullptr);
- wrap->object()->SetAlignedPointerInInternalField(0, nullptr);
+ ClearWrap(wrap->object());
wrap->persistent().Reset();
delete wrap;
}
diff --git a/src/node_crypto.cc b/src/node_crypto.cc
index 71799d0bfa..71e1272e9d 100644
--- a/src/node_crypto.cc
+++ b/src/node_crypto.cc
@@ -5023,6 +5023,7 @@ class PBKDF2Request : public AsyncWrap {
~PBKDF2Request() override {
release();
+ ClearWrap(object());
persistent().Reset();
}
@@ -5288,6 +5289,7 @@ class RandomBytesRequest : public AsyncWrap {
}
~RandomBytesRequest() override {
+ ClearWrap(object());
persistent().Reset();
}
diff --git a/src/req-wrap-inl.h b/src/req-wrap-inl.h
index 63229260ec..653babd2a7 100644
--- a/src/req-wrap-inl.h
+++ b/src/req-wrap-inl.h
@@ -28,6 +28,7 @@ template <typename T>
ReqWrap<T>::~ReqWrap() {
CHECK_EQ(req_.data, this); // Assert that someone has called Dispatched().
CHECK_EQ(false, persistent().IsEmpty());
+ ClearWrap(object());
persistent().Reset();
}