diff --git a/crates/wasmparser/src/binary_reader.rs b/crates/wasmparser/src/binary_reader.rs index 4df0029072..7f77662dcc 100644 --- a/crates/wasmparser/src/binary_reader.rs +++ b/crates/wasmparser/src/binary_reader.rs @@ -688,6 +688,14 @@ impl<'a> BinaryReader<'a> { Ok(Ieee64(value)) } + /// (internal) Reads a fixed-size WebAssembly string from the module. + fn internal_read_string(&mut self, len: usize) -> Result<&'a str> { + let bytes = self.read_bytes(len)?; + str::from_utf8(bytes).map_err(|_| { + BinaryReaderError::new("malformed UTF-8 encoding", self.original_position() - 1) + }) + } + /// Reads a WebAssembly string from the module. /// # Errors /// If `BinaryReader` has less than up to four bytes remaining, the string's @@ -701,10 +709,13 @@ impl<'a> BinaryReader<'a> { self.original_position() - 1, )); } - let bytes = self.read_bytes(len)?; - str::from_utf8(bytes).map_err(|_| { - BinaryReaderError::new("malformed UTF-8 encoding", self.original_position() - 1) - }) + return self.internal_read_string(len); + } + + /// Reads a unlimited WebAssembly string from the module. + pub fn read_unlimited_string(&mut self) -> Result<&'a str> { + let len = self.read_var_u32()? as usize; + return self.internal_read_string(len); } #[cold] diff --git a/crates/wasmparser/src/readers/core/names.rs b/crates/wasmparser/src/readers/core/names.rs index 986e89506c..ef192acb91 100644 --- a/crates/wasmparser/src/readers/core/names.rs +++ b/crates/wasmparser/src/readers/core/names.rs @@ -33,7 +33,7 @@ pub struct Naming<'a> { impl<'a> FromReader<'a> for Naming<'a> { fn from_reader(reader: &mut BinaryReader<'a>) -> Result { let index = reader.read_var_u32()?; - let name = reader.read_string()?; + let name = reader.read_unlimited_string()?; Ok(Naming { index, name }) } }