From 6fe4a2d026508b0307272b966685cec757766fe0 Mon Sep 17 00:00:00 2001 From: Alexey Yerin Date: Thu, 26 Nov 2020 23:58:22 +0300 Subject: [PATCH] Cancel request on invalid Unicode character It's pointless to continue as file names mostly don't contain invalid Unicode. Signed-off-by: Alexey Yerin --- src/error.rs | 3 +++ src/main.rs | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/error.rs b/src/error.rs index f2910be..2e2fc71 100644 --- a/src/error.rs +++ b/src/error.rs @@ -17,6 +17,9 @@ pub enum TaurusError { #[error("invalid request: {0}")] InvalidRequest(String), + #[error("invalid Unicode character in the input")] + InvalidUnicode(#[from] std::string::FromUtf8Error), + #[error("failed to bind: {0}")] BindFailed(io::Error), diff --git a/src/main.rs b/src/main.rs index 4a48340..9524434 100644 --- a/src/main.rs +++ b/src/main.rs @@ -99,7 +99,7 @@ fn handle_client(mut stream: TlsStream, static_root: &str) -> TaurusR .read(&mut buffer) .map_err(TaurusError::StreamReadFailed)?; - let raw_request = String::from_utf8_lossy(&buffer[..]).into_owned(); + let raw_request = String::from_utf8(buffer.to_vec())?; let request = GeminiRequest::parse(&raw_request)?; let url_path = request.file_path(); -- 2.38.5