diff options
author | Jeremiah Senkpiel <fishrock123@rocketmail.com> | 2022-07-09 18:02:44 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-09 20:02:44 -0500 |
commit | f26bdc9109abffc86ea78bb85cf3504a771d17ad (patch) | |
tree | dbd543924da72c713578f8cb28e6facebcf04e5d /tests | |
parent | 3ddcd171ea66efa94821533299f48788a18fb33a (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.rs | 13 |
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] |