From cf33db77f0bea4e458107e134b23798594e0127a Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sat, 15 Mar 2025 16:54:24 +0800 Subject: Handle invalid URIs by reporting back to the user --- req.ha | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/req.ha b/req.ha index 2efa842..3d2e2e1 100644 --- a/req.ha +++ b/req.ha @@ -9,8 +9,19 @@ use net::uri; use strconv; use strings; -fn handlereq(conn: io::handle, request: *http::request) (void | io::error | nomem | uri::invalid) = { - let segments = segments_from_path(request.target.raw_path)?; +fn handlereq(conn: io::handle, request: *http::request) (void | io::error | nomem) = { + let segments = match(segments_from_path(request.target.raw_path)) { + case let s: []str => + yield s; + case uri::invalid => + start_response(conn, 400, "text/plain")?; + fmt::fprintln(conn, "Invalid URI")?; + return void; + case nomem => + return nomem; + case => + abort("unreachable"); + }; defer strings::freeall(segments); let trailing_slash: bool = false; -- cgit v1.2.3