Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
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
http2: don't expose the original socket through the socket proxy
Refs: #22486
  • Loading branch information
szmarczak committed Sep 2, 2018
commit b4bebab9af6fb495e1c5611803b0124cfc997d0c
14 changes: 12 additions & 2 deletions lib/internal/http2/core.js
Original file line number Diff line number Diff line change
Expand Up @@ -675,14 +675,19 @@ 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':
case 'pause':
case 'read':
case 'resume':
case 'write':
case 'setEncoding':
case 'setKeepAlive':
case 'setNoDelay':
throw new ERR_HTTP2_NO_SOCKET_MANIPULATION();
default:
const socket = session[kSocket];
Expand All @@ -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':
Expand All @@ -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];
Expand Down
11 changes: 11 additions & 0 deletions test/parallel/test-http2-socket-proxy.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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;
Expand Down
25 changes: 0 additions & 25 deletions test/parallel/test-http2-unbound-socket-proxy.js
Original file line number Diff line number Diff line change
Expand Up @@ -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'
});
}));
}));
}));