1
0
mirror of https://github.com/fafhrd91/actix-net synced 2024-11-24 04:52:58 +01:00

Path: fix unsafe malformed string (#359)

This commit is contained in:
Ali MJ Al-Nasrawy 2021-06-05 20:29:00 +03:00 committed by GitHub
parent a1bf8662c9
commit cf21df14f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 5 deletions

View File

@ -2,8 +2,10 @@
## Unreleased - 2021-xx-xx ## Unreleased - 2021-xx-xx
* When matching URL parameters, `%25` is kept in the percent-encoded form - no longer decoded to `%`. [#357] * When matching URL parameters, `%25` is kept in the percent-encoded form - no longer decoded to `%`. [#357]
* Fixed a bug where the `Path` extractor returns unsafe malformed string due to malformed URL. [#359]
[#357]: https://github.com/actix/actix-net/pull/357 [#357]: https://github.com/actix/actix-net/pull/357
[#359]: https://github.com/actix/actix-net/pull/359
## 0.2.7 - 2021-02-06 ## 0.2.7 - 2021-02-06

View File

@ -170,11 +170,7 @@ impl Quoter {
idx += 1; idx += 1;
} }
cloned.map(|data| { cloned.map(|data| String::from_utf8_lossy(&data).into_owned())
// SAFETY: we get data from http::Uri, which does UTF-8 checks already
// this code only decodes valid pct encoded values
unsafe { String::from_utf8_unchecked(data) }
})
} }
} }
@ -259,6 +255,16 @@ mod tests {
assert_eq!(path.get("id").unwrap(), &test); assert_eq!(path.get("id").unwrap(), &test);
} }
#[test]
fn test_invalid_utf8() {
let invalid_utf8 = percent_encode((0x80..=0xff).collect::<Vec<_>>().as_slice());
let uri = Uri::try_from(format!("/{}", invalid_utf8)).unwrap();
let path = Path::new(Url::new(uri));
// We should always get a valid utf8 string
assert!(String::from_utf8(path.path().as_bytes().to_owned()).is_ok());
}
#[test] #[test]
fn test_from_hex() { fn test_from_hex() {
let hex = b"0123456789abcdefABCDEF"; let hex = b"0123456789abcdefABCDEF";