Browse Source

tls_wrap: inherit from the `AsyncWrap` first

`WrapperInfo` casts pointer in JS object's internal field to
`AsyncWrap`. This approach fails miserably for `TLSWrap` because it was
inhereted from the `StreamBase` first, creating different kind of
`vtable` for the whole class.

Reorder parent classes to put `AsyncWrap` first.

Fix: https://github.com/nodejs/node/issues/4250
PR-URL: https://github.com/nodejs/node/pull/4268
Reviewed-By: James M Snell <jasnell@gmail.com>
process-exit-stdio-flushing
Fedor Indutny 9 years ago
parent
commit
e0bb118a1d
  1. 6
      src/tls_wrap.cc
  2. 6
      src/tls_wrap.h

6
src/tls_wrap.cc

@ -36,11 +36,11 @@ TLSWrap::TLSWrap(Environment* env,
Kind kind,
StreamBase* stream,
SecureContext* sc)
: SSLWrap<TLSWrap>(env, sc, kind),
StreamBase(env),
AsyncWrap(env,
: AsyncWrap(env,
env->tls_wrap_constructor_function()->NewInstance(),
AsyncWrap::PROVIDER_TLSWRAP),
SSLWrap<TLSWrap>(env, sc, kind),
StreamBase(env),
sc_(sc),
stream_(stream),
enc_in_(nullptr),

6
src/tls_wrap.h

@ -21,9 +21,9 @@ namespace crypto {
class SecureContext;
}
class TLSWrap : public crypto::SSLWrap<TLSWrap>,
public StreamBase,
public AsyncWrap {
class TLSWrap : public AsyncWrap,
public crypto::SSLWrap<TLSWrap>,
public StreamBase {
public:
~TLSWrap() override;

Loading…
Cancel
Save