From 301f6c46ba4491e9aec76037ae9d01365693b0e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Sun, 21 Aug 2022 21:15:52 +0200 Subject: [PATCH] fix(unstable): better error for invalid hostname in Deno.serve() (#15529) --- cli/tests/unit/flash_test.ts | 12 ++++++++++++ ext/flash/lib.rs | 6 +++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/cli/tests/unit/flash_test.ts b/cli/tests/unit/flash_test.ts index 4df225cbd4..fdad1e3ae7 100644 --- a/cli/tests/unit/flash_test.ts +++ b/cli/tests/unit/flash_test.ts @@ -36,6 +36,18 @@ function onListen( }; } +Deno.test(async function httpServerInvalidHostname() { + assertThrows( + () => + Deno.serve({ + fetch: (_req) => new Response("ok"), + hostname: "localhost", + }), + TypeError, + "hostname could not be parsed as an IP address", + ); +}); + Deno.test({ permissions: { net: true } }, async function httpServerBasic() { const ac = new AbortController(); const promise = deferred(); diff --git a/ext/flash/lib.rs b/ext/flash/lib.rs index de0a2231ca..5d6275155f 100644 --- a/ext/flash/lib.rs +++ b/ext/flash/lib.rs @@ -1244,7 +1244,11 @@ where state .borrow_mut::

() .check_net(&(&opts.hostname, Some(opts.port)))?; - let addr = SocketAddr::new(opts.hostname.parse()?, opts.port); + let parsed_hostname = opts + .hostname + .parse() + .map_err(|_| type_error("hostname could not be parsed as an IP address"))?; + let addr = SocketAddr::new(parsed_hostname, opts.port); let (tx, rx) = mpsc::channel(100); let (close_tx, close_rx) = mpsc::channel(1); let (listening_tx, listening_rx) = mpsc::channel(1);