Skip to content

Commit 55e7cc3

Browse files
committed
Suggestions, add a couple tests
1 parent a1fd9c8 commit 55e7cc3

File tree

1 file changed

+29
-5
lines changed

1 file changed

+29
-5
lines changed

src/python_interpreters.rs

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -283,8 +283,8 @@ impl<'a> ByteStream<'a> {
283283
Some(byte) => {
284284
if byte & 0b10000000 == 0 {
285285
Err(Error::msg(format!(
286-
"Expected header bit at cursor {} in {:?}",
287-
self.cursor, self.buffer
286+
"Expected header bit at index {} in {:?}",
287+
self.cursor - 1, self.buffer
288288
)))
289289
} else {
290290
Ok(Some(byte))
@@ -296,10 +296,10 @@ impl<'a> ByteStream<'a> {
296296

297297
fn read_body(&mut self) -> Result<u8, Error> {
298298
let byte = self.read()?;
299-
if byte & 0b10000000 == 1 {
299+
if byte & 0b10000000 != 0 {
300300
Err(Error::msg(format!(
301-
"Expected non-header bit at cursor {} in {:?}",
302-
self.cursor, self.buffer
301+
"Expected non-header bit at index {} in {:?}",
302+
self.cursor - 1, self.buffer
303303
)))
304304
} else {
305305
Ok(byte)
@@ -898,4 +898,28 @@ mod tests {
898898
];
899899
assert_eq!(code.get_line_number(214, &table).unwrap(), 5);
900900
}
901+
902+
#[test]
903+
fn test_py3_12_line_numbers_truncated() {
904+
use crate::python_bindings::v3_12_0::PyCodeObject;
905+
let code = PyCodeObject {
906+
co_firstlineno: 4,
907+
..Default::default()
908+
};
909+
910+
let table = [128_u8];
911+
assert!(code.get_line_number(214, &table).is_err());
912+
}
913+
914+
#[test]
915+
fn test_py3_12_line_numbers_invalid() {
916+
use crate::python_bindings::v3_12_0::PyCodeObject;
917+
let code = PyCodeObject {
918+
co_firstlineno: 4,
919+
..Default::default()
920+
};
921+
922+
let table = [0];
923+
assert!(code.get_line_number(214, &table).is_err());
924+
}
901925
}

0 commit comments

Comments
 (0)