Переглянути джерело

fix: handle invalid UTF-8 in cookies

zu1k 2 роки тому
батько
коміт
794851878c
3 змінених файлів з 254 додано та 173 видалено
  1. 246 162
      Cargo.lock
  2. 6 9
      crates/rule/src/action/modify.rs
  3. 2 2
      rust-toolchain

Різницю між файлами не показано, бо вона завелика
+ 246 - 162
Cargo.lock


+ 6 - 9
crates/rule/src/action/modify.rs

@@ -180,20 +180,17 @@ impl Modify {
 
                 let mut cookies_jar = CookieJar::new();
                 if let Some(cookies) = res.headers().get(header::COOKIE) {
-                    let cookies = cookies.to_str().unwrap().to_string();
-                    let cookies: Vec<String> = cookies.split("; ").map(String::from).collect();
-                    for c in cookies {
-                        if let Ok(c) = Cookie::parse(c) {
-                            cookies_jar.add(c);
-                        }
-                    }
+                    let cookies = String::from_utf8_lossy(cookies.as_bytes()).to_string();
+                    Cookie::split_parse(cookies)
+                        .filter_map(Result::ok)
+                        .for_each(|cookie| cookies_jar.add(cookie));
                 }
 
                 let mut set_cookies_jar = CookieJar::new();
                 let set_cookies = res.headers().get_all(header::SET_COOKIE);
                 for sc in set_cookies {
-                    let sc = sc.to_str().unwrap().to_string();
-                    if let Ok(c) = Cookie::parse(sc) {
+                    if let Ok(c) = Cookie::parse(String::from_utf8_lossy(sc.as_bytes()).to_string())
+                    {
                         set_cookies_jar.add(c);
                     }
                 }

+ 2 - 2
rust-toolchain

@@ -1,3 +1,3 @@
 [toolchain]
-channel = "1.69"
-components = ["rustfmt", "clippy"]
+channel = "nightly"
+components = ["rustfmt", "clippy"]

Деякі файли не було показано, через те що забагато файлів було змінено