summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2019-05-14 17:45:52 -0400
committerGitHub <noreply@github.com>2019-05-14 17:45:52 -0400
commit9f877cd34b3e0f4a398b3f0cde8cc677bc7a14a6 (patch)
tree2f2e4259c155cb8aa5561ad5f0f69f7153e72c3e
parent2cf289dfc33b4e9886e77d1bdae7eeb908370957 (diff)
ws: make acceptable() more robust (denoland/deno_std#404)
Original: https://github.com/denoland/deno_std/commit/9e8e6f9356f75a68a20cf04d9620621485f5d1a0
-rw-r--r--ws/mod.ts5
-rw-r--r--ws/test.ts16
2 files changed, 20 insertions, 1 deletions
diff --git a/ws/mod.ts b/ws/mod.ts
index 3e20e2d3b..44743a2ce 100644
--- a/ws/mod.ts
+++ b/ws/mod.ts
@@ -341,9 +341,12 @@ class WebSocketImpl implements WebSocket {
/** Return whether given headers is acceptable for websocket */
export function acceptable(req: { headers: Headers }): boolean {
+ const upgrade = req.headers.get("upgrade");
+ if (!upgrade || upgrade.toLowerCase() !== "websocket") {
+ return false;
+ }
const secKey = req.headers.get("sec-websocket-key");
return (
- req.headers.get("upgrade") === "websocket" &&
req.headers.has("sec-websocket-key") &&
typeof secKey === "string" &&
secKey.length > 0
diff --git a/ws/test.ts b/ws/test.ts
index 7b0bd6949..482d6926d 100644
--- a/ws/test.ts
+++ b/ws/test.ts
@@ -146,6 +146,22 @@ test(function wsAcceptable(): void {
})
});
assertEquals(ret, true);
+
+ assert(
+ acceptable({
+ headers: new Headers([
+ ["connection", "Upgrade"],
+ ["host", "127.0.0.1:9229"],
+ [
+ "sec-websocket-extensions",
+ "permessage-deflate; client_max_window_bits"
+ ],
+ ["sec-websocket-key", "dGhlIHNhbXBsZSBub25jZQ=="],
+ ["sec-websocket-version", "13"],
+ ["upgrade", "WebSocket"]
+ ])
+ })
+ );
});
const invalidHeaders = [