0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-03 09:31:22 -05:00

fix(websocket): allow any close code for server (#11614)

This commit is contained in:
Leo K 2021-08-09 10:45:59 +02:00 committed by GitHub
parent 16ae4a0d57
commit f546f51698
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 9 deletions

View file

@ -646,7 +646,7 @@ unitTest({ perms: { net: true } }, async function httpServerWebSocket() {
socket.onerror = () => fail();
socket.onmessage = (m) => {
socket.send(m.data);
socket.close();
socket.close(1001);
};
await respondWith(response);
break;

View file

@ -17,7 +17,7 @@
const { BadResource, Interrupted } = core;
const { ReadableStream } = window.__bootstrap.streams;
const abortSignal = window.__bootstrap.abortSignal;
const { WebSocket, _rid, _readyState, _eventLoop, _protocol } =
const { WebSocket, _rid, _readyState, _eventLoop, _protocol, _server } =
window.__bootstrap.webSocket;
const {
ArrayPrototypeIncludes,
@ -370,6 +370,7 @@
const socket = webidl.createBranded(WebSocket);
setEventTargetData(socket);
socket[_server] = true;
response[_ws] = socket;
return { response, socket };

View file

@ -125,6 +125,7 @@
const _binaryType = Symbol("[[binaryType]]");
const _bufferedAmount = Symbol("[[bufferedAmount]]");
const _eventLoop = Symbol("[[eventLoop]]");
const _server = Symbol("[[server]]");
class WebSocket extends EventTarget {
[_rid];
@ -387,13 +388,16 @@
});
}
if (
code !== undefined && !(code === 1000 || (3000 <= code && code < 5000))
) {
throw new DOMException(
"The close code must be either 1000 or in the range of 3000 to 4999.",
"InvalidAccessError",
);
if (!this[_server]) {
if (
code !== undefined &&
!(code === 1000 || (3000 <= code && code < 5000))
) {
throw new DOMException(
"The close code must be either 1000 or in the range of 3000 to 4999.",
"InvalidAccessError",
);
}
}
if (reason !== undefined && core.encode(reason).byteLength > 123) {
@ -525,5 +529,6 @@
_readyState,
_eventLoop,
_protocol,
_server,
};
})(this);