From 7cf8a7a16b154452b64bc1cee290ea1875bd2f90 Mon Sep 17 00:00:00 2001 From: NikVolf Date: Sun, 18 Feb 2018 22:08:12 +0300 Subject: [PATCH] simplify section reader --- src/elements/section.rs | 44 ++++++++++++++--------------------------- 1 file changed, 15 insertions(+), 29 deletions(-) diff --git a/src/elements/section.rs b/src/elements/section.rs index bf713c8..98fa451 100644 --- a/src/elements/section.rs +++ b/src/elements/section.rs @@ -218,22 +218,6 @@ impl Section { } } -fn read_entries>( - reader: &mut R, - defined_length: usize, -) -> Result, ::elements::Error> -{ - let inner_buffer = buffered_read!(ENTRIES_BUFFER_LENGTH, defined_length, reader); - let buf_length = inner_buffer.len(); - let mut cursor = io::Cursor::new(inner_buffer); - let result = Ok(CountedList::::deserialize(&mut cursor)?.into_inner()); - if cursor.position() != buf_length as u64 { - Err(io::Error::from(io::ErrorKind::InvalidData).into()) - } else { - result - } -} - pub(crate) struct SectionReader { cursor: io::Cursor>, declared_length: usize, @@ -270,11 +254,13 @@ impl io::Read for SectionReader { } } -pub (crate) fn read_entries_with_len>(reader: &mut R) +fn read_entries>(reader: &mut R) -> Result, ::elements::Error> { - let length = u32::from(VarUint32::deserialize(reader)?) as usize; - read_entries(reader, length) + let mut section_reader = SectionReader::new(reader)?; + let result = CountedList::::deserialize(&mut section_reader)?.into_inner(); + section_reader.close()?; + Ok(result) } /// Custom section @@ -359,7 +345,7 @@ impl Deserialize for TypeSection { type Error = Error; fn deserialize(reader: &mut R) -> Result { - Ok(TypeSection(read_entries_with_len(reader)?)) + Ok(TypeSection(read_entries(reader)?)) } } @@ -418,7 +404,7 @@ impl Deserialize for ImportSection { type Error = Error; fn deserialize(reader: &mut R) -> Result { - Ok(ImportSection(read_entries_with_len(reader)?)) + Ok(ImportSection(read_entries(reader)?)) } } @@ -463,7 +449,7 @@ impl Deserialize for FunctionSection { type Error = Error; fn deserialize(reader: &mut R) -> Result { - Ok(FunctionSection(read_entries_with_len(reader)?)) + Ok(FunctionSection(read_entries(reader)?)) } } @@ -508,7 +494,7 @@ impl Deserialize for TableSection { type Error = Error; fn deserialize(reader: &mut R) -> Result { - Ok(TableSection(read_entries_with_len(reader)?)) + Ok(TableSection(read_entries(reader)?)) } } @@ -553,7 +539,7 @@ impl Deserialize for MemorySection { type Error = Error; fn deserialize(reader: &mut R) -> Result { - Ok(MemorySection(read_entries_with_len(reader)?)) + Ok(MemorySection(read_entries(reader)?)) } } @@ -598,7 +584,7 @@ impl Deserialize for GlobalSection { type Error = Error; fn deserialize(reader: &mut R) -> Result { - Ok(GlobalSection(read_entries_with_len(reader)?)) + Ok(GlobalSection(read_entries(reader)?)) } } @@ -643,7 +629,7 @@ impl Deserialize for ExportSection { type Error = Error; fn deserialize(reader: &mut R) -> Result { - Ok(ExportSection(read_entries_with_len(reader)?)) + Ok(ExportSection(read_entries(reader)?)) } } @@ -688,7 +674,7 @@ impl Deserialize for CodeSection { type Error = Error; fn deserialize(reader: &mut R) -> Result { - Ok(CodeSection(read_entries_with_len(reader)?)) + Ok(CodeSection(read_entries(reader)?)) } } @@ -733,7 +719,7 @@ impl Deserialize for ElementSection { type Error = Error; fn deserialize(reader: &mut R) -> Result { - Ok(ElementSection(read_entries_with_len(reader)?)) + Ok(ElementSection(read_entries(reader)?)) } } @@ -778,7 +764,7 @@ impl Deserialize for DataSection { type Error = Error; fn deserialize(reader: &mut R) -> Result { - Ok(DataSection(read_entries_with_len(reader)?)) + Ok(DataSection(read_entries(reader)?)) } }