From bd91a66deaf3becd60c0a09a805902134b2ec9b2 Mon Sep 17 00:00:00 2001 From: kokke Date: Tue, 14 Sep 2021 13:33:48 +0200 Subject: [PATCH 1/2] src: fix time-of-use vs time-of-check "bugs" Refs: https://github.com/nodejs/node/pull/40128 --- src/crypto/crypto_context.cc | 2 +- src/udp_wrap.cc | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/crypto/crypto_context.cc b/src/crypto/crypto_context.cc index c4f759c31d18cc..d389c4bf77bc33 100644 --- a/src/crypto/crypto_context.cc +++ b/src/crypto/crypto_context.cc @@ -1114,7 +1114,7 @@ int SecureContext::TicketKeyCallback(SSL* ssl, return -1; } - argv[2] = env != 0 ? v8::True(env->isolate()) : v8::False(env->isolate()); + argv[2] = v8::True(env->isolate()); Local ret; if (!node::MakeCallback( diff --git a/src/udp_wrap.cc b/src/udp_wrap.cc index 10a5fd929f6037..325e9335906f98 100644 --- a/src/udp_wrap.cc +++ b/src/udp_wrap.cc @@ -367,13 +367,17 @@ void UDPWrap::Disconnect(const FunctionCallbackInfo& args) { #define X(name, fn) \ void UDPWrap::name(const FunctionCallbackInfo& args) { \ UDPWrap* wrap = Unwrap(args.Holder()); \ + if (wrap == nullptr) { \ + args.GetReturnValue().Set(UV_EBADF); \ + return; \ + } \ Environment* env = wrap->env(); \ CHECK_EQ(args.Length(), 1); \ int flag; \ if (!args[0]->Int32Value(env->context()).To(&flag)) { \ return; \ } \ - int err = wrap == nullptr ? UV_EBADF : fn(&wrap->handle_, flag); \ + int err = fn(&wrap->handle_, flag); \ args.GetReturnValue().Set(err); \ } From 21f39713a83de4454b2c2522e98b1c112c18f0fb Mon Sep 17 00:00:00 2001 From: kokke Date: Mon, 27 Sep 2021 15:37:28 +0200 Subject: [PATCH 2/2] src: implement changes suggested by @addaleax Refs: #40128 --- src/crypto/crypto_context.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/crypto/crypto_context.cc b/src/crypto/crypto_context.cc index d389c4bf77bc33..2264f8f8f89d90 100644 --- a/src/crypto/crypto_context.cc +++ b/src/crypto/crypto_context.cc @@ -1114,7 +1114,7 @@ int SecureContext::TicketKeyCallback(SSL* ssl, return -1; } - argv[2] = v8::True(env->isolate()); + argv[2] = enc != 0 ? v8::True(env->isolate()) : v8::False(env->isolate()); Local ret; if (!node::MakeCallback(