From 6ce98d27807984afd0130d12d14c8e15becd58e9 Mon Sep 17 00:00:00 2001 From: Daniel Lyne Date: Tue, 25 Jan 2022 12:22:47 -0500 Subject: [PATCH] Allow deserializing invalid UTF-8 into bytes in maps --- src/de.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/de.rs b/src/de.rs index ffd0d48c2..9c33e789e 100644 --- a/src/de.rs +++ b/src/de.rs @@ -1342,9 +1342,15 @@ impl<'de, 'a, R: Read<'de>> de::Deserializer<'de> for &'a mut Deserializer { b'"' => { self.eat_char(); self.scratch.clear(); - match tri!(self.read.parse_str(&mut self.scratch)) { - Reference::Borrowed(s) => visitor.visit_borrowed_str(s), - Reference::Copied(s) => visitor.visit_str(s), + match tri!(self.read.parse_str_raw(&mut self.scratch)) { + Reference::Borrowed(s) => match std::str::from_utf8(s) { + Ok(s) => visitor.visit_borrowed_str(s), + Err(_) => visitor.visit_borrowed_bytes(s), + }, + Reference::Copied(s) => match std::str::from_utf8(s) { + Ok(s) => visitor.visit_str(s), + Err(_) => visitor.visit_bytes(s), + }, } } b'[' => {