From 338ef529e12e9b334305b3409f050abe96e7e465 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Fri, 15 May 2020 11:49:48 +0200 Subject: [PATCH] Forbid serializing nested lists --- src/urlencoded/ser/value.rs | 14 ++++++++++++-- tests/url_serialize.rs | 3 +-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/urlencoded/ser/value.rs b/src/urlencoded/ser/value.rs index f0b3a07e..08647c32 100644 --- a/src/urlencoded/ser/value.rs +++ b/src/urlencoded/ser/value.rs @@ -16,6 +16,7 @@ where { urlencoder: &'target mut UrlEncodedSerializer<'input, Target>, key: &'key str, + nested: bool, } impl<'input, 'key, 'target, Target> ValueSink<'input, 'key, 'target, Target> @@ -26,7 +27,11 @@ where urlencoder: &'target mut UrlEncodedSerializer<'input, Target>, key: &'key str, ) -> Self { - ValueSink { urlencoder, key } + ValueSink { + urlencoder, + key, + nested: false, + } } } @@ -63,7 +68,11 @@ where } fn serialize_seq(self) -> Result { - Ok(self) + if self.nested { + Err(self.unsupported()) + } else { + Ok(self) + } } fn unsupported(self) -> Error { @@ -89,6 +98,7 @@ where value.serialize(PartSerializer::new(ValueSink { urlencoder: self.urlencoder, key: self.key, + nested: true, })) } diff --git a/tests/url_serialize.rs b/tests/url_serialize.rs index ff9e6cdb..ad73709d 100644 --- a/tests/url_serialize.rs +++ b/tests/url_serialize.rs @@ -115,12 +115,11 @@ fn serialize_multiple_lists() { } #[test] -#[ignore] fn serialize_nested_list() { let params = &[("list", vec![vec![0u8]])]; assert_matches!( urlencoded::to_string(params), - Err(Error::Custom(s)) if s.contains("Unsupported") + Err(Error::Custom(s)) if s.contains("unsupported") ) }