Skip to content

Commit 4da3e1e

Browse files
trevnorrisrvagg
authored andcommitted
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: #6184 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Anna Henningsen <anna@addaleax.net>
1 parent 7e57757 commit 4da3e1e

File tree

4 files changed

+6
-1
lines changed

4 files changed

+6
-1
lines changed

src/cares_wrap.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "req-wrap-inl.h"
1010
#include "tree.h"
1111
#include "util.h"
12+
#include "util-inl.h"
1213
#include "uv.h"
1314

1415
#include <errno.h>
@@ -258,6 +259,7 @@ class QueryWrap : public AsyncWrap {
258259

259260
virtual ~QueryWrap() override {
260261
CHECK_EQ(false, persistent().IsEmpty());
262+
ClearWrap(object());
261263
persistent().Reset();
262264
}
263265

src/handle_wrap.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ void HandleWrap::OnClose(uv_handle_t* handle) {
9898
if (have_close_callback)
9999
wrap->MakeCallback(env->onclose_string(), 0, nullptr);
100100

101-
wrap->object()->SetAlignedPointerInInternalField(0, nullptr);
101+
ClearWrap(wrap->object());
102102
wrap->persistent().Reset();
103103
delete wrap;
104104
}

src/node_crypto.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5023,6 +5023,7 @@ class PBKDF2Request : public AsyncWrap {
50235023

50245024
~PBKDF2Request() override {
50255025
release();
5026+
ClearWrap(object());
50265027
persistent().Reset();
50275028
}
50285029

@@ -5288,6 +5289,7 @@ class RandomBytesRequest : public AsyncWrap {
52885289
}
52895290

52905291
~RandomBytesRequest() override {
5292+
ClearWrap(object());
52915293
persistent().Reset();
52925294
}
52935295

src/req-wrap-inl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ template <typename T>
2828
ReqWrap<T>::~ReqWrap() {
2929
CHECK_EQ(req_.data, this); // Assert that someone has called Dispatched().
3030
CHECK_EQ(false, persistent().IsEmpty());
31+
ClearWrap(object());
3132
persistent().Reset();
3233
}
3334

0 commit comments

Comments
 (0)