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) {
|
get(session, prop) {
|
||||||
switch (prop) {
|
switch (prop) {
|
||||||
case 'setTimeout':
|
case 'setTimeout':
|
||||||
return session.setTimeout.bind(session);
|
case 'ref':
|
||||||
|
case 'unref':
|
||||||
|
return session[prop].bind(session);
|
||||||
case 'destroy':
|
case 'destroy':
|
||||||
case 'emit':
|
case 'emit':
|
||||||
case 'end':
|
case 'end':
|
||||||
@ -654,6 +656,9 @@ const proxySocketHandler = {
|
|||||||
case 'read':
|
case 'read':
|
||||||
case 'resume':
|
case 'resume':
|
||||||
case 'write':
|
case 'write':
|
||||||
|
case 'setEncoding':
|
||||||
|
case 'setKeepAlive':
|
||||||
|
case 'setNoDelay':
|
||||||
throw new ERR_HTTP2_NO_SOCKET_MANIPULATION();
|
throw new ERR_HTTP2_NO_SOCKET_MANIPULATION();
|
||||||
default:
|
default:
|
||||||
const socket = session[kSocket];
|
const socket = session[kSocket];
|
||||||
@ -672,7 +677,9 @@ const proxySocketHandler = {
|
|||||||
set(session, prop, value) {
|
set(session, prop, value) {
|
||||||
switch (prop) {
|
switch (prop) {
|
||||||
case 'setTimeout':
|
case 'setTimeout':
|
||||||
session.setTimeout = value;
|
case 'ref':
|
||||||
|
case 'unref':
|
||||||
|
session[prop] = value;
|
||||||
return true;
|
return true;
|
||||||
case 'destroy':
|
case 'destroy':
|
||||||
case 'emit':
|
case 'emit':
|
||||||
@ -681,6 +688,9 @@ const proxySocketHandler = {
|
|||||||
case 'read':
|
case 'read':
|
||||||
case 'resume':
|
case 'resume':
|
||||||
case 'write':
|
case 'write':
|
||||||
|
case 'setEncoding':
|
||||||
|
case 'setKeepAlive':
|
||||||
|
case 'setNoDelay':
|
||||||
throw new ERR_HTTP2_NO_SOCKET_MANIPULATION();
|
throw new ERR_HTTP2_NO_SOCKET_MANIPULATION();
|
||||||
default:
|
default:
|
||||||
const socket = session[kSocket];
|
const socket = session[kSocket];
|
||||||
|
@ -42,6 +42,9 @@ server.on('stream', common.mustCall(function(stream, headers) {
|
|||||||
common.expectsError(() => socket.read, errMsg);
|
common.expectsError(() => socket.read, errMsg);
|
||||||
common.expectsError(() => socket.resume, errMsg);
|
common.expectsError(() => socket.resume, errMsg);
|
||||||
common.expectsError(() => socket.write, 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.destroy = undefined), errMsg);
|
||||||
common.expectsError(() => (socket.emit = 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.read = undefined), errMsg);
|
||||||
common.expectsError(() => (socket.resume = undefined), errMsg);
|
common.expectsError(() => (socket.resume = undefined), errMsg);
|
||||||
common.expectsError(() => (socket.write = 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.
|
// Resetting the socket listeners to their own value should not throw.
|
||||||
socket.on = socket.on; // eslint-disable-line no-self-assign
|
socket.on = socket.on; // eslint-disable-line no-self-assign
|
||||||
socket.once = socket.once; // 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();
|
stream.respond();
|
||||||
|
|
||||||
socket.writable = 0;
|
socket.writable = 0;
|
||||||
|
@ -39,31 +39,6 @@ server.listen(0, common.mustCall(() => {
|
|||||||
}, {
|
}, {
|
||||||
code: 'ERR_HTTP2_SOCKET_UNBOUND'
|
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