Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
src: use BaseObjectPtr to store SNI context
Rather than relying on a link to the JS object, store a pointer to
the C++ object directly.
  • Loading branch information
addaleax committed Nov 19, 2019
commit fe5784a9f0e9535e45b739eb1cbd35d5af105c97
12 changes: 9 additions & 3 deletions src/node_crypto.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2991,9 +2991,15 @@ void SSLWrap<Base>::CertCbDone(const FunctionCallbackInfo<Value>& args) {
goto fire_cb;

if (cons->HasInstance(ctx)) {
SecureContext* sc;
ASSIGN_OR_RETURN_UNWRAP(&sc, ctx.As<Object>());
w->sni_context_.Reset(env->isolate(), ctx);
SecureContext* sc = Unwrap<SecureContext>(ctx.As<Object>());
CHECK_NOT_NULL(sc);
// XXX: There is a method w->SetSNIContext(sc), and you might think that
// it makes sense to call that here and make setting w->sni_context_ part
// of it. In fact, that passes the test suite, although SetSNIContext()
// performs a lot more operations.
// If anybody is familiar enough with the TLS code to know whether it makes
// sense, please do so or document why it doesn't.
w->sni_context_ = BaseObjectPtr<SecureContext>(sc);

int rv;

Expand Down
2 changes: 1 addition & 1 deletion src/node_crypto.h
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ class SSLWrap {
ClientHelloParser hello_parser_;

v8::Global<v8::ArrayBufferView> ocsp_response_;
v8::Global<v8::Value> sni_context_;
BaseObjectPtr<SecureContext> sni_context_;

friend class SecureContext;
};
Expand Down
3 changes: 1 addition & 2 deletions src/tls_wrap.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1065,10 +1065,9 @@ int TLSWrap::SelectSNIContextCallback(SSL* s, int* ad, void* arg) {
return SSL_TLSEXT_ERR_NOACK;
}

p->sni_context_.Reset(env->isolate(), ctx);

SecureContext* sc = Unwrap<SecureContext>(ctx.As<Object>());
CHECK_NOT_NULL(sc);
p->sni_context_ = BaseObjectPtr<SecureContext>(sc);
p->SetSNIContext(sc);
return SSL_TLSEXT_ERR_OK;
}
Expand Down