Skip to content

Commit 805bf40

Browse files
szmarczakBethGriggs
authored andcommitted
http2: don't expose the original socket through the socket proxy
Refs: #22486 Backport-PR-URL: #22850 PR-URL: #22650 Reviewed-By: Matteo Collina <[email protected]> Reviewed-By: Luigi Pinca <[email protected]> Reviewed-By: Anatoli Papirovski <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent 60f7bfa commit 805bf40

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
@@ -630,14 +630,19 @@ const proxySocketHandler = {
630630
get(session, prop) {
631631
switch (prop) {
632632
case 'setTimeout':
633-
return session.setTimeout.bind(session);
633+
case 'ref':
634+
case 'unref':
635+
return session[prop].bind(session);
634636
case 'destroy':
635637
case 'emit':
636638
case 'end':
637639
case 'pause':
638640
case 'read':
639641
case 'resume':
640642
case 'write':
643+
case 'setEncoding':
644+
case 'setKeepAlive':
645+
case 'setNoDelay':
641646
throw new errors.Error('ERR_HTTP2_NO_SOCKET_MANIPULATION');
642647
default:
643648
const socket = session[kSocket];
@@ -656,7 +661,9 @@ const proxySocketHandler = {
656661
set(session, prop, value) {
657662
switch (prop) {
658663
case 'setTimeout':
659-
session.setTimeout = value;
664+
case 'ref':
665+
case 'unref':
666+
session[prop] = value;
660667
return true;
661668
case 'destroy':
662669
case 'emit':
@@ -665,6 +672,9 @@ const proxySocketHandler = {
665672
case 'read':
666673
case 'resume':
667674
case 'write':
675+
case 'setEncoding':
676+
case 'setKeepAlive':
677+
case 'setNoDelay':
668678
throw new errors.Error('ERR_HTTP2_NO_SOCKET_MANIPULATION');
669679
default:
670680
const socket = session[kSocket];

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

+11
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ server.on('stream', common.mustCall(function(stream, headers) {
3838
common.expectsError(() => socket.read, errMsg);
3939
common.expectsError(() => socket.resume, errMsg);
4040
common.expectsError(() => socket.write, errMsg);
41+
common.expectsError(() => socket.setEncoding, errMsg);
42+
common.expectsError(() => socket.setKeepAlive, errMsg);
43+
common.expectsError(() => socket.setNoDelay, errMsg);
4144

4245
common.expectsError(() => (socket.destroy = undefined), errMsg);
4346
common.expectsError(() => (socket.emit = undefined), errMsg);
@@ -46,10 +49,18 @@ server.on('stream', common.mustCall(function(stream, headers) {
4649
common.expectsError(() => (socket.read = undefined), errMsg);
4750
common.expectsError(() => (socket.resume = undefined), errMsg);
4851
common.expectsError(() => (socket.write = undefined), errMsg);
52+
common.expectsError(() => (socket.setEncoding = undefined), errMsg);
53+
common.expectsError(() => (socket.setKeepAlive = undefined), errMsg);
54+
common.expectsError(() => (socket.setNoDelay = undefined), errMsg);
4955

5056
assert.doesNotThrow(() => (socket.on = socket.on));
5157
assert.doesNotThrow(() => (socket.once = socket.once));
5258

59+
socket.unref();
60+
assert.strictEqual(socket._handle.hasRef(), false);
61+
socket.ref();
62+
assert.strictEqual(socket._handle.hasRef(), true);
63+
5364
stream.respond();
5465

5566
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)