summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJeremiah Senkpiel <fishrock123@rocketmail.com>2022-07-09 18:02:44 -0700
committerGitHub <noreply@github.com>2022-07-09 20:02:44 -0500
commitf26bdc9109abffc86ea78bb85cf3504a771d17ad (patch)
treedbd543924da72c713578f8cb28e6facebcf04e5d /tests
parent3ddcd171ea66efa94821533299f48788a18fb33a (diff)
feat: non-strict mode replaces invalid UTF-8 (#62)
This change makes non-strict mode percent-decode utf-8 lossily. This means that invalid UTF-8 percent encoded sequences, such as `%E9`, are decoded as the unicode replacement character (� `U+FFFD`). Refs: https://github.com/samscott89/serde_qs/issues/43
Diffstat (limited to 'tests')
-rw-r--r--tests/test_deserialize.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/tests/test_deserialize.rs b/tests/test_deserialize.rs
index 40cd43b..92e5f53 100644
--- a/tests/test_deserialize.rs
+++ b/tests/test_deserialize.rs
@@ -560,6 +560,19 @@ fn strict_mode() {
.deserialize_str("vec%5B%5D=1&vec%5B%5D=2")
.unwrap();
assert_eq!(params.vec, vec![1, 2]);
+
+ #[derive(Debug, Serialize, Deserialize, PartialEq)]
+ struct StringQueryParam {
+ field: String,
+ }
+
+ // Ensure strict mode produces an error for invalid UTF-8 percent encoded characters.
+ let invalid_utf8: Result<StringQueryParam, _> = strict_config.deserialize_str("field=%E9");
+ assert!(invalid_utf8.is_err());
+
+ // Ensure loose mode invalid UTF-8 percent encoded characters become � U+FFFD.
+ let valid_utf8: StringQueryParam = loose_config.deserialize_str("field=%E9").unwrap();
+ assert_eq!(valid_utf8.field, "�");
}
#[test]