Fix panic deserializing flattened any after flattened struct

This commit is contained in:
David Tolnay
2018-09-08 16:53:03 -07:00
parent 108cca687c
commit 2a4b8ce42d
2 changed files with 70 additions and 6 deletions
+4 -5
View File
@@ -2916,18 +2916,17 @@ where
where
T: DeserializeSeed<'de>,
{
match self.iter.next() {
Some(item) => {
while let Some(item) = self.iter.next() {
if let Some((ref key, ref content)) = *item {
// Do not take(), instead borrow this entry. The internally tagged
// enum does its own buffering so we can't tell whether this entry
// is going to be consumed. Borrowing here leaves the entry
// available for later flattened fields.
let (ref key, ref content) = *item.as_ref().unwrap();
self.pending = Some(content);
seed.deserialize(ContentRefDeserializer::new(key)).map(Some)
return seed.deserialize(ContentRefDeserializer::new(key)).map(Some);
}
None => Ok(None),
}
Ok(None)
}
fn next_value_seed<T>(&mut self, seed: T) -> Result<T::Value, Self::Error>