http2: don't expose the original socket through the socket proxy
Refs: https://github.com/nodejs/node/pull/22486 PR-URL: https://github.com/nodejs/node/pull/22650 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Anatoli Papirovski <apapirovski@mac.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
441391b9eb
commit
d6a43438d6
@ -646,7 +646,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':
|
||||
@ -654,6 +656,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];
|
||||
@ -672,7 +677,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':
|
||||
@ -681,6 +688,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];
|
||||
|
@ -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;
|
||||
|
@ -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'
|
||||
});
|
||||
}));
|
||||
}));
|
||||
}));
|
||||
|
Loading…
x
Reference in New Issue
Block a user