summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfermeise <ocker.christian@gmail.com>2019-12-10 18:36:55 +0100
committerfermeise <ocker.christian@gmail.com>2019-12-10 18:38:02 +0100
commit37cb5c7b34a4bb1758649b671066466066fec419 (patch)
treeeecb4d53e9ae1bafc21263c52fd12f7ba4dec747
parentbf45ce227d8ef48e90df9311528338d69f784976 (diff)
Fix panic on malformed query
resolves #23
-rw-r--r--src/de/parse.rs2
-rw-r--r--tests/test_deserialize.rs6
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(&params).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]