-
Notifications
You must be signed in to change notification settings - Fork 163
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: percent decode path segments #129
Conversation
7f8c06d
to
b51e9ce
Compare
68067f1
to
bf1fa52
Compare
let path_decoded: Cow<str>; | ||
if let Ok(decoded_utf8) = percent_decode(path.as_ref()).decode_utf8() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this should work as well.
let path_decoded: Cow<str>; | |
if let Ok(decoded_utf8) = percent_decode(path.as_ref()).decode_utf8() { | |
let path_decoded = if let Ok(decoded_utf8) = percent_decode(path.as_ref()).decode_utf8() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wow, this could save a Cow
import
Nice! Wanna add a line to changelog? |
f38408e
to
30c4820
Compare
Changelog added, thank you for being so patient to a Rust newbie. today I learned a lot |
Thanks for fixing this! |
- New middleware: Add `Cors` for setting [CORS] headers ([#112]) - New middleware: Add `AsyncRequireAuthorization` ([#118]) - `Compression`: Don't recompress HTTP responses ([#140]) - `Compression` and `Decompression`: Pass configuration from layer into middleware ([#132]) - `ServeDir` and `ServeFile`: Improve performance ([#137]) - `Compression`: Remove needless `ResBody::Error: Into<BoxError>` bounds ([#117]) - `ServeDir`: Percent decode path segments ([#129]) - `ServeDir`: Use correct redirection status ([#130]) - `ServeDir`: Return `404 Not Found` on requests to directories if `append_index_html_on_directories` is set to `false` ([#122]) [#112]: #112 [#118]: #118 [#140]: #140 [#132]: #132 [#137]: #137 [#117]: #117 [#129]: #129 [#130]: #130 [#122]: #122
- New middleware: Add `Cors` for setting [CORS] headers ([#112]) - New middleware: Add `AsyncRequireAuthorization` ([#118]) - `Compression`: Don't recompress HTTP responses ([#140]) - `Compression` and `Decompression`: Pass configuration from layer into middleware ([#132]) - `ServeDir` and `ServeFile`: Improve performance ([#137]) - `Compression`: Remove needless `ResBody::Error: Into<BoxError>` bounds ([#117]) - `ServeDir`: Percent decode path segments ([#129]) - `ServeDir`: Use correct redirection status ([#130]) - `ServeDir`: Return `404 Not Found` on requests to directories if `append_index_html_on_directories` is set to `false` ([#122]) [#112]: #112 [#118]: #118 [#140]: #140 [#132]: #132 [#137]: #137 [#117]: #117 [#129]: #129 [#130]: #130 [#122]: #122
- New middleware: Add `Cors` for setting [CORS] headers ([#112]) - New middleware: Add `AsyncRequireAuthorization` ([#118]) - `Compression`: Don't recompress HTTP responses ([#140]) - `Compression` and `Decompression`: Pass configuration from layer into middleware ([#132]) - `ServeDir` and `ServeFile`: Improve performance ([#137]) - `Compression`: Remove needless `ResBody::Error: Into<BoxError>` bounds ([#117]) - `ServeDir`: Percent decode path segments ([#129]) - `ServeDir`: Use correct redirection status ([#130]) - `ServeDir`: Return `404 Not Found` on requests to directories if `append_index_html_on_directories` is set to `false` ([#122]) [#112]: #112 [#118]: #118 [#140]: #140 [#132]: #132 [#137]: #137 [#117]: #117 [#129]: #129 [#130]: #130 [#122]: #122
- New middleware: Add `Cors` for setting [CORS] headers ([#112]) - New middleware: Add `AsyncRequireAuthorization` ([#118]) - `Compression`: Don't recompress HTTP responses ([#140]) - `Compression` and `Decompression`: Pass configuration from layer into middleware ([#132]) - `ServeDir` and `ServeFile`: Improve performance ([#137]) - `Compression`: Remove needless `ResBody::Error: Into<BoxError>` bounds ([#117]) - `ServeDir`: Percent decode path segments ([#129]) - `ServeDir`: Use correct redirection status ([#130]) - `ServeDir`: Return `404 Not Found` on requests to directories if `append_index_html_on_directories` is set to `false` ([#122]) [#112]: #112 [#118]: #118 [#140]: #140 [#132]: #132 [#137]: #137 [#117]: #117 [#129]: #129 [#130]: #130 [#122]: #122
Motivation
ServerDir
does not do url decode.When I try to GET a uri like
/中文文件.txt
the user agent will send
/%E4%B8%AD%E6%96%87%E6%96%87%E4%BB%B6.txt
, andServerDir
just try to open a file named/%E4%B8%AD%E6%96%87%E6%96%87%E4%BB%B6.txt
, cause a404
file not found error.related issue #114
Solution
decode uri path before open it as an file path