| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 397235e commit a740145
4 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1033,6 +1033,12 @@ The `Http2Session` settings canceled. | |||
| 1033 | 1033 | An attempt was made to connect a `Http2Session` object to a `net.Socket` or | |
| 1034 | 1034 | `tls.TLSSocket` that had already been bound to another `Http2Session` object. | |
| 1035 | 1035 | ||
| 1036 | + <a id="ERR_HTTP2_SOCKET_UNBOUND"></a> | ||
| 1037 | + ### ERR_HTTP2_SOCKET_UNBOUND | ||
| 1038 | + | ||
| 1039 | + An attempt was made to use the `socket` property of an `Http2Session` that | ||
| 1040 | + has already been closed. | ||
| 1041 | + | ||
| 1036 | 1042 | <a id="ERR_HTTP2_STATUS_101"></a> | |
| 1037 | 1043 | ### ERR_HTTP2_STATUS_101 | |
| 1038 | 1044 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -590,6 +590,8 @@ E('ERR_HTTP2_SESSION_ERROR', 'Session closed with error code %s', Error); | |||
| 590 | 590 | E('ERR_HTTP2_SETTINGS_CANCEL', 'HTTP2 session settings canceled', Error); | |
| 591 | 591 | E('ERR_HTTP2_SOCKET_BOUND', | |
| 592 | 592 | 'The socket is already bound to an Http2Session', Error); | |
| 593 | + E('ERR_HTTP2_SOCKET_UNBOUND', | ||
| 594 | + 'The socket has been disconnected from the Http2Session', Error); | ||
| 593 | 595 | E('ERR_HTTP2_STATUS_101', | |
| 594 | 596 | 'HTTP status code 101 (Switching Protocols) is forbidden in HTTP/2', Error); | |
| 595 | 597 | E('ERR_HTTP2_STATUS_INVALID', 'Invalid status code: %s', RangeError); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -59,6 +59,7 @@ const { | |||
| 59 | 59 | ERR_HTTP2_SESSION_ERROR, | |
| 60 | 60 | ERR_HTTP2_SETTINGS_CANCEL, | |
| 61 | 61 | ERR_HTTP2_SOCKET_BOUND, | |
| 62 | + ERR_HTTP2_SOCKET_UNBOUND, | ||
| 62 | 63 | ERR_HTTP2_STATUS_101, | |
| 63 | 64 | ERR_HTTP2_STATUS_INVALID, | |
| 64 | 65 | ERR_HTTP2_STREAM_CANCEL, | |
@@ -684,12 +685,17 @@ const proxySocketHandler = { | |||
| 684 | 685 | throw new ERR_HTTP2_NO_SOCKET_MANIPULATION(); | |
| 685 | 686 | default: | |
| 686 | 687 | const socket = session[kSocket]; | |
| 688 | + if (socket === undefined) | ||
| 689 | + throw new ERR_HTTP2_SOCKET_UNBOUND(); | ||
| 687 | 690 | const value = socket[prop]; | |
| 688 | 691 | return typeof value === 'function' ? value.bind(socket) : value; | |
| 689 | 692 | } | |
| 690 | 693 | }, | |
| 691 | 694 | getPrototypeOf(session) { | |
| 692 | - return Reflect.getPrototypeOf(session[kSocket]); | ||
| 695 | + const socket = session[kSocket]; | ||
| 696 | + if (socket === undefined) | ||
| 697 | + throw new ERR_HTTP2_SOCKET_UNBOUND(); | ||
| 698 | + return Reflect.getPrototypeOf(socket); | ||
| 693 | 699 | }, | |
| 694 | 700 | set(session, prop, value) { | |
| 695 | 701 | switch (prop) { | |
@@ -705,7 +711,10 @@ const proxySocketHandler = { | |||
| 705 | 711 | case 'write': | |
| 706 | 712 | throw new ERR_HTTP2_NO_SOCKET_MANIPULATION(); | |
| 707 | 713 | default: | |
| 708 | - session[kSocket][prop] = value; | ||
| 714 | + const socket = session[kSocket]; | ||
| 715 | + if (socket === undefined) | ||
| 716 | + throw new ERR_HTTP2_SOCKET_UNBOUND(); | ||
| 717 | + socket[prop] = value; | ||
| 709 | 718 | return true; | |
| 710 | 719 | } | |
| 711 | 720 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,69 @@ | |||
| 1 | + 'use strict'; | ||
| 2 | + | ||
| 3 | + const common = require('../common'); | ||
| 4 | + if (!common.hasCrypto) | ||
| 5 | + common.skip('missing crypto'); | ||
| 6 | + const http2 = require('http2'); | ||
| 7 | + const net = require('net'); | ||
| 8 | + | ||
| 9 | + const server = http2.createServer(); | ||
| 10 | + server.on('stream', common.mustCall((stream) => { | ||
| 11 | + stream.respond(); | ||
| 12 | + stream.end('ok'); | ||
| 13 | + })); | ||
| 14 | + | ||
| 15 | + server.listen(0, common.mustCall(() => { | ||
| 16 | + const client = http2.connect(`http://localhost:${server.address().port}`); | ||
| 17 | + const socket = client.socket; | ||
| 18 | + const req = client.request(); | ||
| 19 | + req.resume(); | ||
| 20 | + req.on('close', common.mustCall(() => { | ||
| 21 | + client.close(); | ||
| 22 | + server.close(); | ||
| 23 | + | ||
| 24 | + // Tests to make sure accessing the socket proxy fails with an | ||
| 25 | + // informative error. | ||
| 26 | + setImmediate(common.mustCall(() => { | ||
| 27 | + common.expectsError(() => { | ||
| 28 | + socket.example; | ||
| 29 | + }, { | ||
| 30 | + code: 'ERR_HTTP2_SOCKET_UNBOUND' | ||
| 31 | + }); | ||
| 32 | + common.expectsError(() => { | ||
| 33 | + socket.example = 1; | ||
| 34 | + }, { | ||
| 35 | + code: 'ERR_HTTP2_SOCKET_UNBOUND' | ||
| 36 | + }); | ||
| 37 | + common.expectsError(() => { | ||
| 38 | + socket instanceof net.Socket; | ||
| 39 | + }, { | ||
| 40 | + code: 'ERR_HTTP2_SOCKET_UNBOUND' | ||
| 41 | + }); | ||
| 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 | + }); | ||
| 67 | + })); | ||
| 68 | + })); | ||
| 69 | + })); | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments