diff --git a/src/de.rs b/src/de.rs index ffd0d48c2..f94893206 100644 --- a/src/de.rs +++ b/src/de.rs @@ -1685,6 +1685,19 @@ impl<'de, 'a, R: Read<'de>> de::Deserializer<'de> for &'a mut Deserializer { tri!(self.parse_ident(b"ull")); visitor.visit_unit() } + b'[' => { + self.eat_char(); + match tri!(self.parse_whitespace()) { + Some(b']') => { + self.eat_char(); + visitor.visit_unit() + } + Some(_) => return Err(self.peek_invalid_type(&visitor)), + None => { + return Err(self.peek_error(ErrorCode::EofWhileParsingList)); + } + } + } _ => Err(self.peek_invalid_type(&visitor)), }; diff --git a/tests/test.rs b/tests/test.rs index b11635e75..41feece33 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -1144,6 +1144,10 @@ fn test_parse_list() { test_parse_ok(vec![("[[3], [1, 2]]", vec![vec![3u64], vec![1, 2]])]); + test_parse_unusual_ok(vec![("[]", ())]); + + test_parse_unusual_ok(vec![("[ ]", ())]); + test_parse_ok(vec![("[1]", (1u64,))]); test_parse_ok(vec![("[1, 2]", (1u64, 2u64))]);