From a3a54bc747abe8ca4cd7b0bdbb3e5276a062e914 Mon Sep 17 00:00:00 2001 From: seb Date: Tue, 20 Aug 2024 14:25:41 -0700 Subject: fix(ext/net): validate port in Deno.{connect,serve,listen} (#24399) Co-authored-by: Will Leach <4619280+melbourne2991@users.noreply.github.com> Co-authored-by: Luca Casonato Co-authored-by: David Sherret --- tests/unit/serve_test.ts | 82 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) (limited to 'tests') diff --git a/tests/unit/serve_test.ts b/tests/unit/serve_test.ts index 827a094dc..ea5a7d3ef 100644 --- a/tests/unit/serve_test.ts +++ b/tests/unit/serve_test.ts @@ -861,6 +861,88 @@ Deno.test( }, ); +Deno.test({ permissions: { net: true } }, async function validPortString() { + const server = Deno.serve({ + handler: (_request) => new Response(), + port: "4501" as unknown as number, + }); + assertEquals(server.addr.transport, "tcp"); + assertEquals(server.addr.port, 4501); + await server.shutdown(); +}); + +Deno.test({ permissions: { net: true } }, function invalidPortFloat() { + assertThrows( + () => + Deno.serve({ + handler: (_request) => new Response(), + port: 45.1, + }), + TypeError, + `Invalid port: 45.1`, + ); +}); + +Deno.test({ permissions: { net: true } }, function invalidPortNaN() { + assertThrows( + () => + Deno.serve({ + handler: (_request) => new Response(), + port: NaN, + }), + TypeError, + `Invalid port: NaN`, + ); +}); + +Deno.test({ permissions: { net: true } }, function invalidPortString() { + assertThrows( + () => + Deno.serve({ + handler: (_request) => new Response(), + port: "some-non-number-string" as unknown as number, + }), + TypeError, + `Invalid port: 'some-non-number-string'`, + ); +}); + +Deno.test({ permissions: { net: true } }, function invalidPortTooSmall() { + assertThrows( + () => + Deno.serve({ + handler: (_request) => new Response(), + port: -111, + }), + RangeError, + `Invalid port (out of range): -111`, + ); +}); + +Deno.test({ permissions: { net: true } }, function invalidPortTooLarge() { + assertThrows( + () => + Deno.serve({ + handler: (_request) => new Response(), + port: 100000, + }), + RangeError, + `Invalid port (out of range): 100000`, + ); +}); + +Deno.test({ permissions: { net: true } }, function invalidPortType() { + assertThrows( + () => + Deno.serve({ + handler: (_request) => new Response(), + port: true as unknown as number, + }), + TypeError, + `Invalid port (expected number): true`, + ); +}); + function createUrlTest( name: string, methodAndPath: string, -- cgit v1.2.3