diff --git a/.cspell.yml b/.cspell.yml index f275e0a24..2efcc1d4d 100644 --- a/.cspell.yml +++ b/.cspell.yml @@ -4,5 +4,6 @@ words: - addrs - httparse - msrv + - realip - rustup - zstd diff --git a/actix-web/CHANGES.md b/actix-web/CHANGES.md index 8f5c3c77b..ff3f999ac 100644 --- a/actix-web/CHANGES.md +++ b/actix-web/CHANGES.md @@ -3,6 +3,7 @@ ## Unreleased - Add `Logger::log_level()` method. +- Improve handling of non-UTF-8 header values in `Logger` middleware. - Add `HttpServer::shutdown_signal()` method. - Mark `HttpServer` as `#[must_use]`. - Re-export `mime` dependency. diff --git a/actix-web/src/middleware/logger.rs b/actix-web/src/middleware/logger.rs index 6394b90dc..e258775c8 100644 --- a/actix-web/src/middleware/logger.rs +++ b/actix-web/src/middleware/logger.rs @@ -649,9 +649,9 @@ impl FormatText { FormatText::ResponseHeader(ref name) => { let s = if let Some(val) = res.headers().get(name) { - val.to_str().unwrap_or("-") + String::from_utf8_lossy(val.as_bytes()).into_owned() } else { - "-" + "-".to_owned() }; *self = FormatText::Str(s.to_string()) } @@ -693,11 +693,11 @@ impl FormatText { FormatText::RequestTime => *self = FormatText::Str(now.format(&Rfc3339).unwrap()), FormatText::RequestHeader(ref name) => { let s = if let Some(val) = req.headers().get(name) { - val.to_str().unwrap_or("-") + String::from_utf8_lossy(val.as_bytes()).into_owned() } else { - "-" + "-".to_owned() }; - *self = FormatText::Str(s.to_string()); + *self = FormatText::Str(s); } FormatText::RemoteAddr => { let s = if let Some(peer) = req.connection_info().peer_addr() {