diff options
author | Sam Scott <sam.scott89@gmail.com> | 2019-12-10 16:59:59 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-10 16:59:59 -0500 |
commit | 7cdcddcfccfbf17e4c7a61fb4f983301448bc133 (patch) | |
tree | eecb4d53e9ae1bafc21263c52fd12f7ba4dec747 | |
parent | bf45ce227d8ef48e90df9311528338d69f784976 (diff) | |
parent | 37cb5c7b34a4bb1758649b671066466066fec419 (diff) |
Merge pull request #24 from fermeise/fix_malformed_urlencode
Fix panic on malformed query
-rw-r--r-- | src/de/parse.rs | 2 | ||||
-rw-r--r-- | tests/test_deserialize.rs | 6 |
2 files changed, 6 insertions, 2 deletions
diff --git a/src/de/parse.rs b/src/de/parse.rs index 0d4c1db..6f10ac3 100644 --- a/src/de/parse.rs +++ b/src/de/parse.rs @@ -140,7 +140,7 @@ impl<'a> Iterator for Parser<'a> { self.index += 1; self.acc.1 += 1; match self.iter.next() { - Some(v) if v == &b'%' => { + Some(v) if v == &b'%' && self.iter.len() >= 2 => { match &self.iter.as_slice()[..2] { b"5B" => { // skip the next two characters diff --git a/tests/test_deserialize.rs b/tests/test_deserialize.rs index 99ab241..beede63 100644 --- a/tests/test_deserialize.rs +++ b/tests/test_deserialize.rs @@ -506,7 +506,7 @@ fn strict_mode() { let params = OddTest { a: 12 }; let enc_params = qs::to_string(¶ms).unwrap(); - println!("Enocded as: {}", enc_params); + println!("Encoded as: {}", enc_params); let rec_params: Result<OddTest, _> = strict_config.deserialize_str(&enc_params); assert_eq!(rec_params.unwrap(), params); @@ -516,6 +516,10 @@ fn strict_mode() { loose_config.deserialize_str(&enc_params); assert!(rec_params.is_err()); println!("{}", rec_params.unwrap_err()); + + // Test that we don't panic + let malformed_params: Result<Query, _> = loose_config.deserialize_str("%"); + assert!(malformed_params.is_err()); } #[test] |