Skip to content

Commit 5e2c55e

Browse files
author
audrius
committed
Fixed the reported inconsistency in Event::Void
1 parent 3366d91 commit 5e2c55e

2 files changed

Lines changed: 22 additions & 24 deletions

File tree

src/de.rs

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -630,12 +630,6 @@ impl<'de, 'document> DeserializerFromEvents<'de, 'document> {
630630
.map(|parse_error| error::shared(Arc::clone(parse_error)))
631631
}
632632

633-
fn reader_error_on_void(&self) -> Option<Error> {
634-
match self.document.events.get(*self.pos) {
635-
Some((Event::Void, _)) => self.document_error(),
636-
_ => None,
637-
}
638-
}
639633

640634
fn peek_event(&self) -> Result<&'document Event<'de>> {
641635
self.peek_event_mark().map(|(event, _mark)| event)
@@ -1005,9 +999,6 @@ impl<'de> de::SeqAccess<'de> for SeqAccess<'de, '_, '_> {
1005999
if self.empty {
10061000
return Ok(None);
10071001
}
1008-
if let Some(err) = self.de.reader_error_on_void() {
1009-
return Err(err);
1010-
}
10111002
match self.de.peek_event()? {
10121003
Event::SequenceEnd | Event::Void => Ok(None),
10131004
_ => {
@@ -1049,9 +1040,6 @@ impl<'de> de::MapAccess<'de> for MapAccess<'de, '_, '_> {
10491040
if self.empty {
10501041
return Ok(None);
10511042
}
1052-
if let Some(err) = self.de.reader_error_on_void() {
1053-
return Err(err);
1054-
}
10551043
loop {
10561044
match self.de.peek_event()? {
10571045
Event::MappingEnd | Event::Void => return Ok(None),
@@ -2016,9 +2004,6 @@ impl<'de> de::Deserializer<'de> for &mut DeserializerFromEvents<'de, '_> {
20162004
where
20172005
V: Visitor<'de>,
20182006
{
2019-
if let Some(err) = self.reader_error_on_void() {
2020-
return Err(err);
2021-
}
20222007
let is_some = match self.peek_event()? {
20232008
&Event::Alias(mut pos) => {
20242009
*self.pos += 1;
@@ -2066,9 +2051,6 @@ impl<'de> de::Deserializer<'de> for &mut DeserializerFromEvents<'de, '_> {
20662051
where
20672052
V: Visitor<'de>,
20682053
{
2069-
if let Some(err) = self.reader_error_on_void() {
2070-
return Err(err);
2071-
}
20722054
let tagged_already = *self.enum_depth.borrow() > 0;
20732055
let (next, mark) = self.next_event_mark()?;
20742056
match next {
@@ -2116,9 +2098,6 @@ impl<'de> de::Deserializer<'de> for &mut DeserializerFromEvents<'de, '_> {
21162098
where
21172099
V: Visitor<'de>,
21182100
{
2119-
if let Some(err) = self.reader_error_on_void() {
2120-
return Err(err);
2121-
}
21222101
let (next, mark) = self.next_event_mark()?;
21232102
match next {
21242103
&Event::Alias(mut pos) => self.jump(&mut pos)?.deserialize_seq(visitor),
@@ -2167,9 +2146,6 @@ impl<'de> de::Deserializer<'de> for &mut DeserializerFromEvents<'de, '_> {
21672146
where
21682147
V: Visitor<'de>,
21692148
{
2170-
if let Some(err) = self.reader_error_on_void() {
2171-
return Err(err);
2172-
}
21732149
let (next, mark) = self.next_event_mark()?;
21742150
match next {
21752151
&Event::Alias(mut pos) => self.jump(&mut pos)?.deserialize_map(visitor),

tests/test_scalar_void.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
use serde::Deserialize;
2+
use serde_yaml_bw::{budget::Budget, Deserializer, DeserializerOptions};
3+
use std::io::Cursor;
4+
5+
#[test]
6+
fn test_scalar_budget_breach_bool() {
7+
let input = "true\n";
8+
let options = DeserializerOptions {
9+
budget: Some(Budget {
10+
max_total_scalar_bytes: 0,
11+
..Budget::default()
12+
}),
13+
..DeserializerOptions::default()
14+
};
15+
16+
let err = bool::deserialize(Deserializer::from_reader_with_options(
17+
Cursor::new(input.as_bytes()),
18+
&options,
19+
)).unwrap_err();
20+
21+
assert!(err.to_string().contains("budget exceeded"), "Expected budget exceeded, got: {:?}", err);
22+
}

0 commit comments

Comments
 (0)