Skip to content

Commit 0bd6527

Browse files
addaleaxBridgeAR
authored andcommitted
src: do not crash when accessing empty WeakRefs
Making `.incRef()` and `.decRef()` fail silently leads to better error messages when trying to access the underlying value (as opposed to crashing inside these methods). Refs: #25461 (comment) PR-URL: #29289 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: Gus Caplan <[email protected]>
1 parent fd7c2be commit 0bd6527

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

src/node_util.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,14 +191,16 @@ class WeakReference : public BaseObject {
191191

192192
static void IncRef(const FunctionCallbackInfo<Value>& args) {
193193
WeakReference* weak_ref = Unwrap<WeakReference>(args.Holder());
194-
if (weak_ref->reference_count_ == 0) weak_ref->target_.ClearWeak();
195194
weak_ref->reference_count_++;
195+
if (weak_ref->target_.IsEmpty()) return;
196+
if (weak_ref->reference_count_ == 1) weak_ref->target_.ClearWeak();
196197
}
197198

198199
static void DecRef(const FunctionCallbackInfo<Value>& args) {
199200
WeakReference* weak_ref = Unwrap<WeakReference>(args.Holder());
200201
CHECK_GE(weak_ref->reference_count_, 1);
201202
weak_ref->reference_count_--;
203+
if (weak_ref->target_.IsEmpty()) return;
202204
if (weak_ref->reference_count_ == 0) weak_ref->target_.SetWeak();
203205
}
204206

0 commit comments

Comments
 (0)