diff --git a/src/cursor_ext.rs b/src/cursor_ext.rs index bd5bc09..8fc0c44 100644 --- a/src/cursor_ext.rs +++ b/src/cursor_ext.rs @@ -46,21 +46,20 @@ pub trait WriteExt { impl ReadExt for R { #[inline] fn read_string(&mut self) -> Result { + let start_position = self.stream_position()?; match self.read_fstring()? { Some(str) => Ok(str), - None => Err(DeserializeError::InvalidString(0, self.stream_position()?))?, + None => Err(DeserializeError::InvalidString(0, start_position))?, } } + #[inline] fn read_fstring(&mut self) -> Result, Error> { let start_position = self.stream_position()?; let len = self.read_i32::()?; if !(-131072..=131072).contains(&len) { - Err(DeserializeError::InvalidString( - len, - self.stream_position()?, - ))? + Err(DeserializeError::InvalidString(len, start_position))? } else if len == 0 { Ok(None) } else if len < 0 { diff --git a/tests/gvas_tests/test_cursor.rs b/tests/gvas_tests/test_cursor.rs index 7b8a03d..1125ab1 100644 --- a/tests/gvas_tests/test_cursor.rs +++ b/tests/gvas_tests/test_cursor.rs @@ -67,7 +67,7 @@ fn test_read_string() -> Result<(), Error> { // Null let mut cursor = Cursor::new(vec![0u8; 4]); let string = cursor.read_string().expect_err("Expected err").to_string(); - assert_eq!(string, "Invalid string size 0 at position 0x4"); + assert_eq!(string, "Invalid string size 0 at position 0x0"); // Missing null terminator let mut cursor = Cursor::new(vec![1u8, 0u8, 0u8, 0u8, b't']);