From 4e5d50f95e0ea6205373bd2bf44df64dc7d94d1c Mon Sep 17 00:00:00 2001 From: Ruslan Bekenev Date: Tue, 2 May 2017 20:36:50 +0300 Subject: [PATCH] tls: do not wrap net.Socket with StreamWrap Fixes: https://github.com/nodejs/node/issues/3655 --- lib/_tls_wrap.js | 9 +++------ test/parallel/test-tls-wrap-event-emmiter.js | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 test/parallel/test-tls-wrap-event-emmiter.js diff --git a/lib/_tls_wrap.js b/lib/_tls_wrap.js index 511ff3557a6e23..b8a962e734ca30 100644 --- a/lib/_tls_wrap.js +++ b/lib/_tls_wrap.js @@ -31,7 +31,6 @@ const util = require('util'); const common = require('_tls_common'); const StreamWrap = require('_stream_wrap').StreamWrap; const Buffer = require('buffer').Buffer; -const Duplex = require('stream').Duplex; const debug = util.debuglog('tls'); const Timer = process.binding('timer_wrap').Timer; const tls_wrap = process.binding('tls_wrap'); @@ -275,12 +274,10 @@ function TLSSocket(socket, options) { // Wrap plain JS Stream into StreamWrap var wrap; - if (!(socket instanceof net.Socket) && socket instanceof Duplex) - wrap = new StreamWrap(socket); - else if ((socket instanceof net.Socket) && !socket._handle) - wrap = new StreamWrap(socket); - else + if ((socket instanceof net.Socket && socket._handle) || !socket) wrap = socket; + else + wrap = new StreamWrap(socket); // Just a documented property to make secure sockets // distinguishable from regular ones. diff --git a/test/parallel/test-tls-wrap-event-emmiter.js b/test/parallel/test-tls-wrap-event-emmiter.js new file mode 100644 index 00000000000000..b468304249e1f3 --- /dev/null +++ b/test/parallel/test-tls-wrap-event-emmiter.js @@ -0,0 +1,16 @@ +'use strict'; + +/* + * Issue: https://github.com/nodejs/node/issues/3655 + * Test checks if we get exception instead of runtime error + */ + +require('../common'); +const assert = require('assert'); + +const TlsSocket = require('tls').TLSSocket; +const EventEmitter = require('events').EventEmitter; +assert.throws( + () => { new TlsSocket(new EventEmitter()); }, + /^TypeError: this\.stream\.pause is not a function/ +);