Skip to content

Commit b4bebab

Browse files
committed
http2: don't expose the original socket through the socket proxy
Refs: nodejs#22486
1 parent c8880ea commit b4bebab

File tree

3 files changed

+23
-27
lines changed

3 files changed

+23
-27
lines changed

lib/internal/http2/core.js

+12-2
Original file line numberDiff line numberDiff line change
@@ -675,14 +675,19 @@ const proxySocketHandler = {
675675
get(session, prop) {
676676
switch (prop) {
677677
case 'setTimeout':
678-
return session.setTimeout.bind(session);
678+
case 'ref':
679+
case 'unref':
680+
return session[prop].bind(session);
679681
case 'destroy':
680682
case 'emit':
681683
case 'end':
682684
case 'pause':
683685
case 'read':
684686
case 'resume':
685687
case 'write':
688+
case 'setEncoding':
689+
case 'setKeepAlive':
690+
case 'setNoDelay':
686691
throw new ERR_HTTP2_NO_SOCKET_MANIPULATION();
687692
default:
688693
const socket = session[kSocket];
@@ -701,7 +706,9 @@ const proxySocketHandler = {
701706
set(session, prop, value) {
702707
switch (prop) {
703708
case 'setTimeout':
704-
session.setTimeout = value;
709+
case 'ref':
710+
case 'unref':
711+
session[prop] = value;
705712
return true;
706713
case 'destroy':
707714
case 'emit':
@@ -710,6 +717,9 @@ const proxySocketHandler = {
710717
case 'read':
711718
case 'resume':
712719
case 'write':
720+
case 'setEncoding':
721+
case 'setKeepAlive':
722+
case 'setNoDelay':
713723
throw new ERR_HTTP2_NO_SOCKET_MANIPULATION();
714724
default:
715725
const socket = session[kSocket];

test/parallel/test-http2-socket-proxy.js

+11
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ server.on('stream', common.mustCall(function(stream, headers) {
4242
common.expectsError(() => socket.read, errMsg);
4343
common.expectsError(() => socket.resume, errMsg);
4444
common.expectsError(() => socket.write, errMsg);
45+
common.expectsError(() => socket.setEncoding, errMsg);
46+
common.expectsError(() => socket.setKeepAlive, errMsg);
47+
common.expectsError(() => socket.setNoDelay, errMsg);
4548

4649
common.expectsError(() => (socket.destroy = undefined), errMsg);
4750
common.expectsError(() => (socket.emit = undefined), errMsg);
@@ -50,11 +53,19 @@ server.on('stream', common.mustCall(function(stream, headers) {
5053
common.expectsError(() => (socket.read = undefined), errMsg);
5154
common.expectsError(() => (socket.resume = undefined), errMsg);
5255
common.expectsError(() => (socket.write = undefined), errMsg);
56+
common.expectsError(() => (socket.setEncoding = undefined), errMsg);
57+
common.expectsError(() => (socket.setKeepAlive = undefined), errMsg);
58+
common.expectsError(() => (socket.setNoDelay = undefined), errMsg);
5359

5460
// Resetting the socket listeners to their own value should not throw.
5561
socket.on = socket.on; // eslint-disable-line no-self-assign
5662
socket.once = socket.once; // eslint-disable-line no-self-assign
5763

64+
socket.unref();
65+
assert.strictEqual(socket._handle.hasRef(), false);
66+
socket.ref();
67+
assert.strictEqual(socket._handle.hasRef(), true);
68+
5869
stream.respond();
5970

6071
socket.writable = 0;

test/parallel/test-http2-unbound-socket-proxy.js

-25
Original file line numberDiff line numberDiff line change
@@ -39,31 +39,6 @@ server.listen(0, common.mustCall(() => {
3939
}, {
4040
code: 'ERR_HTTP2_SOCKET_UNBOUND'
4141
});
42-
common.expectsError(() => {
43-
socket.ref();
44-
}, {
45-
code: 'ERR_HTTP2_SOCKET_UNBOUND'
46-
});
47-
common.expectsError(() => {
48-
socket.unref();
49-
}, {
50-
code: 'ERR_HTTP2_SOCKET_UNBOUND'
51-
});
52-
common.expectsError(() => {
53-
socket.setEncoding();
54-
}, {
55-
code: 'ERR_HTTP2_SOCKET_UNBOUND'
56-
});
57-
common.expectsError(() => {
58-
socket.setKeepAlive();
59-
}, {
60-
code: 'ERR_HTTP2_SOCKET_UNBOUND'
61-
});
62-
common.expectsError(() => {
63-
socket.setNoDelay();
64-
}, {
65-
code: 'ERR_HTTP2_SOCKET_UNBOUND'
66-
});
6742
}));
6843
}));
6944
}));

0 commit comments

Comments
 (0)