mirror of
https://github.com/mbilker/kbinxml-rs.git
synced 2026-09-08 18:45:18 -05:00
de(seq): require size for sequence
This commit is contained in:
@@ -244,10 +244,12 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
|
||||
let size = self.data_buf.read_u32::<BigEndian>().context(KbinErrorKind::ArrayLengthRead)?;
|
||||
debug!("Deserializer::deserialize_seq() => read array size: {}", size);
|
||||
|
||||
// Changes to `self.read_mode` must stay here as `next_element_seed` is not
|
||||
// called past the length of the array to reset the read mode
|
||||
self.read_mode = ReadMode::Array;
|
||||
let value = visitor.visit_seq(Seq::new(self, Some(size as usize)))?;
|
||||
self.data_buf.realign_reads(None)?;
|
||||
let value = visitor.visit_seq(Seq::new(self, size as usize))?;
|
||||
self.read_mode = ReadMode::Single;
|
||||
self.data_buf.realign_reads(None)?;
|
||||
|
||||
Ok(value)
|
||||
}
|
||||
|
||||
@@ -10,8 +10,9 @@ pub struct Seq<'a, 'de: 'a> {
|
||||
}
|
||||
|
||||
impl<'de, 'a> Seq<'a, 'de> {
|
||||
pub fn new(de: &'a mut Deserializer<'de>, len: Option<usize>) -> Self {
|
||||
let len = len.unwrap_or(0);
|
||||
pub fn new(de: &'a mut Deserializer<'de>, len: usize) -> Self {
|
||||
trace!("Seq::new(len: {})", len);
|
||||
|
||||
Self {
|
||||
de,
|
||||
index: 0,
|
||||
@@ -27,6 +28,8 @@ impl<'de, 'a> SeqAccess<'de> for Seq<'a, 'de> {
|
||||
where T: DeserializeSeed<'de>
|
||||
{
|
||||
if self.index >= self.len {
|
||||
trace!("Seq::next_element_seed() => out of bounds read, returning None");
|
||||
|
||||
return Ok(None);
|
||||
}
|
||||
self.index += 1;
|
||||
|
||||
Reference in New Issue
Block a user