diff options
author | Anna Henningsen <anna@addaleax.net> | 2019-11-19 20:07:00 +0100 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2019-11-30 01:14:46 +0100 |
commit | c5a31992b358aa90cffd7b2de8faba28dc2c31ae (patch) | |
tree | b49883eacbabf5389d9f4cb4e0cbdb0f2718d38c /src | |
parent | ef0b65f9b03ce29db2d9b8b5a5e5deb6d731d784 (diff) | |
download | android-node-v8-c5a31992b358aa90cffd7b2de8faba28dc2c31ae.tar.gz android-node-v8-c5a31992b358aa90cffd7b2de8faba28dc2c31ae.tar.bz2 android-node-v8-c5a31992b358aa90cffd7b2de8faba28dc2c31ae.zip |
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.
PR-URL: https://github.com/nodejs/node/pull/30548
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: David Carlier <devnexen@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Diffstat (limited to 'src')
-rw-r--r-- | src/node_crypto.cc | 12 | ||||
-rw-r--r-- | src/node_crypto.h | 2 | ||||
-rw-r--r-- | src/tls_wrap.cc | 3 |
3 files changed, 11 insertions, 6 deletions
diff --git a/src/node_crypto.cc b/src/node_crypto.cc index 8f80db5229..91704732d1 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -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; diff --git a/src/node_crypto.h b/src/node_crypto.h index d2bdd40ed2..96292b4278 100644 --- a/src/node_crypto.h +++ b/src/node_crypto.h @@ -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; }; diff --git a/src/tls_wrap.cc b/src/tls_wrap.cc index 626662c9a5..bacb1a0f27 100644 --- a/src/tls_wrap.cc +++ b/src/tls_wrap.cc @@ -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; } |