From b4bebab9af6fb495e1c5611803b0124cfc997d0c Mon Sep 17 00:00:00 2001 From: Szymon Marczak Date: Sun, 2 Sep 2018 12:07:20 +0200 Subject: [PATCH] http2: don't expose the original socket through the socket proxy Refs: https://github.com/nodejs/node/pull/22486 --- lib/internal/http2/core.js | 14 +++++++++-- test/parallel/test-http2-socket-proxy.js | 11 ++++++++ .../test-http2-unbound-socket-proxy.js | 25 ------------------- 3 files changed, 23 insertions(+), 27 deletions(-) diff --git a/lib/internal/http2/core.js b/lib/internal/http2/core.js index 61dd06b5edec76..1d4217a3ed3bd7 100644 --- a/lib/internal/http2/core.js +++ b/lib/internal/http2/core.js @@ -675,7 +675,9 @@ const proxySocketHandler = { get(session, prop) { switch (prop) { case 'setTimeout': - return session.setTimeout.bind(session); + case 'ref': + case 'unref': + return session[prop].bind(session); case 'destroy': case 'emit': case 'end': @@ -683,6 +685,9 @@ const proxySocketHandler = { case 'read': case 'resume': case 'write': + case 'setEncoding': + case 'setKeepAlive': + case 'setNoDelay': throw new ERR_HTTP2_NO_SOCKET_MANIPULATION(); default: const socket = session[kSocket]; @@ -701,7 +706,9 @@ const proxySocketHandler = { set(session, prop, value) { switch (prop) { case 'setTimeout': - session.setTimeout = value; + case 'ref': + case 'unref': + session[prop] = value; return true; case 'destroy': case 'emit': @@ -710,6 +717,9 @@ const proxySocketHandler = { case 'read': case 'resume': case 'write': + case 'setEncoding': + case 'setKeepAlive': + case 'setNoDelay': throw new ERR_HTTP2_NO_SOCKET_MANIPULATION(); default: const socket = session[kSocket]; diff --git a/test/parallel/test-http2-socket-proxy.js b/test/parallel/test-http2-socket-proxy.js index f7d97a3bb11e8a..64daeb62baebf2 100644 --- a/test/parallel/test-http2-socket-proxy.js +++ b/test/parallel/test-http2-socket-proxy.js @@ -42,6 +42,9 @@ server.on('stream', common.mustCall(function(stream, headers) { common.expectsError(() => socket.read, errMsg); common.expectsError(() => socket.resume, errMsg); common.expectsError(() => socket.write, errMsg); + common.expectsError(() => socket.setEncoding, errMsg); + common.expectsError(() => socket.setKeepAlive, errMsg); + common.expectsError(() => socket.setNoDelay, errMsg); common.expectsError(() => (socket.destroy = undefined), errMsg); common.expectsError(() => (socket.emit = undefined), errMsg); @@ -50,11 +53,19 @@ server.on('stream', common.mustCall(function(stream, headers) { common.expectsError(() => (socket.read = undefined), errMsg); common.expectsError(() => (socket.resume = undefined), errMsg); common.expectsError(() => (socket.write = undefined), errMsg); + common.expectsError(() => (socket.setEncoding = undefined), errMsg); + common.expectsError(() => (socket.setKeepAlive = undefined), errMsg); + common.expectsError(() => (socket.setNoDelay = undefined), errMsg); // Resetting the socket listeners to their own value should not throw. socket.on = socket.on; // eslint-disable-line no-self-assign socket.once = socket.once; // eslint-disable-line no-self-assign + socket.unref(); + assert.strictEqual(socket._handle.hasRef(), false); + socket.ref(); + assert.strictEqual(socket._handle.hasRef(), true); + stream.respond(); socket.writable = 0; diff --git a/test/parallel/test-http2-unbound-socket-proxy.js b/test/parallel/test-http2-unbound-socket-proxy.js index 44f113bac962f7..18881574f2c09b 100644 --- a/test/parallel/test-http2-unbound-socket-proxy.js +++ b/test/parallel/test-http2-unbound-socket-proxy.js @@ -39,31 +39,6 @@ server.listen(0, common.mustCall(() => { }, { code: 'ERR_HTTP2_SOCKET_UNBOUND' }); - common.expectsError(() => { - socket.ref(); - }, { - code: 'ERR_HTTP2_SOCKET_UNBOUND' - }); - common.expectsError(() => { - socket.unref(); - }, { - code: 'ERR_HTTP2_SOCKET_UNBOUND' - }); - common.expectsError(() => { - socket.setEncoding(); - }, { - code: 'ERR_HTTP2_SOCKET_UNBOUND' - }); - common.expectsError(() => { - socket.setKeepAlive(); - }, { - code: 'ERR_HTTP2_SOCKET_UNBOUND' - }); - common.expectsError(() => { - socket.setNoDelay(); - }, { - code: 'ERR_HTTP2_SOCKET_UNBOUND' - }); })); })); }));