From 25ed6155c91aef41f7465119380e22bf8e7748d8 Mon Sep 17 00:00:00 2001 From: 0x676e67 Date: Thu, 21 May 2026 09:45:07 +0800 Subject: [PATCH] fix(cookie): fix automatic URL encoding for request cookies --- Cargo.lock | 1 - Cargo.toml | 1 - src/extractor.rs | 7 ++----- test/cookie_test.rb | 2 +- 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 86b30a4..540ab06 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1545,7 +1545,6 @@ dependencies = [ "http-body-util", "indexmap", "magnus", - "percent-encoding", "rb-sys", "rb-sys-env", "serde", diff --git a/Cargo.toml b/Cargo.toml index 28d3b61..1d00a8c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,7 +41,6 @@ arc-swap = "1.9.1" http = "1.4.0" http-body-util = "0.1.3" futures-util = { version = "0.3.32", default-features = false } -percent-encoding = "2.3.2" [build-dependencies] rb-sys-env = "0.2.2" diff --git a/src/extractor.rs b/src/extractor.rs index ae7703b..0ccfa8e 100644 --- a/src/extractor.rs +++ b/src/extractor.rs @@ -146,8 +146,6 @@ impl ExtractorName for Vec { impl TryConvert for Extractor> { fn try_convert(value: magnus::Value) -> Result { - use percent_encoding::{NON_ALPHANUMERIC, percent_encode}; - let ruby = Ruby::get_with(value); let keyword = RHash::try_convert(value)?; @@ -157,9 +155,8 @@ impl TryConvert for Extractor> { { let mut cookies = Vec::new(); hash.foreach(|name: RString, value: RString| { - let value = value.to_bytes(); - let encoded_value = percent_encode(&value, NON_ALPHANUMERIC); - let cookie = format!("{name}={encoded_value}"); + let value = value.to_string()?; + let cookie = format!("{name}={value}"); let header_value = HeaderValue::from_maybe_shared(Bytes::from(cookie)) .map_err(header_value_error_to_magnus)?; cookies.push(header_value); diff --git a/test/cookie_test.rb b/test/cookie_test.rb index 347a634..1631a9d 100644 --- a/test/cookie_test.rb +++ b/test/cookie_test.rb @@ -161,6 +161,6 @@ def test_request_cookie_value_percent_encoding "http://localhost:8080/cookies", cookies: {"mykey" => raw_value} ) - assert_includes resp.text, "hello%20world%3F" + assert_includes resp.text, "hello world?" end end