From 567d321a409fb35fbac605ffeec56473d6ddeb79 Mon Sep 17 00:00:00 2001 From: James M Snell Date: Tue, 25 Feb 2025 16:11:31 -0800 Subject: [PATCH] src: improve error handling in `tcp_wrap.cc` PR-URL: https://github.com/nodejs/node/pull/57211 Reviewed-By: Yagiz Nizipli Reviewed-By: Matthew Aitken Reviewed-By: Antoine du Hamel --- src/tcp_wrap.cc | 50 +++++++++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/src/tcp_wrap.cc b/src/tcp_wrap.cc index d80de135c26..5201371dc29 100644 --- a/src/tcp_wrap.cc +++ b/src/tcp_wrap.cc @@ -390,8 +390,9 @@ MaybeLocal AddressToJS(Environment* env, int port; - if (info.IsEmpty()) + if (info.IsEmpty()) { info = Object::New(env->isolate()); + } switch (addr->sa_family) { case AF_INET6: @@ -413,32 +414,45 @@ MaybeLocal AddressToJS(Environment* env, } } port = ntohs(a6->sin6_port); - info->Set(env->context(), - env->address_string(), - OneByteString(env->isolate(), ip)).Check(); - info->Set(env->context(), env->family_string(), env->ipv6_string()).Check(); - info->Set(env->context(), - env->port_string(), - Integer::New(env->isolate(), port)).Check(); + if (info->Set(env->context(), + env->address_string(), + OneByteString(env->isolate(), ip)) + .IsNothing() || + info->Set(env->context(), env->family_string(), env->ipv6_string()) + .IsNothing() || + info->Set(env->context(), + env->port_string(), + Integer::New(env->isolate(), port)) + .IsNothing()) { + return {}; + } break; case AF_INET: a4 = reinterpret_cast(addr); uv_inet_ntop(AF_INET, &a4->sin_addr, ip, sizeof ip); port = ntohs(a4->sin_port); - info->Set(env->context(), - env->address_string(), - OneByteString(env->isolate(), ip)).Check(); - info->Set(env->context(), env->family_string(), env->ipv4_string()).Check(); - info->Set(env->context(), - env->port_string(), - Integer::New(env->isolate(), port)).Check(); + if (info->Set(env->context(), + env->address_string(), + OneByteString(env->isolate(), ip)) + .IsNothing() || + info->Set(env->context(), env->family_string(), env->ipv4_string()) + .IsNothing() || + info->Set(env->context(), + env->port_string(), + Integer::New(env->isolate(), port)) + .IsNothing()) { + return {}; + } break; default: - info->Set(env->context(), - env->address_string(), - String::Empty(env->isolate())).Check(); + if (info->Set(env->context(), + env->address_string(), + String::Empty(env->isolate())) + .IsNothing()) { + return {}; + } } return scope.Escape(info);