Skip to content

Commit 4edcb58

Browse files
committed
Suggestions, add a couple tests
1 parent 807deef commit 4edcb58

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
@@ -281,8 +281,8 @@ impl<'a> ByteStream<'a> {
281281
Some(byte) => {
282282
if byte & 0b10000000 == 0 {
283283
Err(Error::msg(format!(
284-
"Expected header bit at cursor {} in {:?}",
285-
self.cursor, self.buffer
284+
"Expected header bit at index {} in {:?}",
285+
self.cursor - 1, self.buffer
286286
)))
287287
} else {
288288
Ok(Some(byte))
@@ -294,10 +294,10 @@ impl<'a> ByteStream<'a> {
294294

295295
fn read_body(&mut self) -> Result<u8, Error> {
296296
let byte = self.read()?;
297-
if byte & 0b10000000 == 1 {
297+
if byte & 0b10000000 != 0 {
298298
Err(Error::msg(format!(
299-
"Expected non-header bit at cursor {} in {:?}",
300-
self.cursor, self.buffer
299+
"Expected non-header bit at index {} in {:?}",
300+
self.cursor - 1, self.buffer
301301
)))
302302
} else {
303303
Ok(byte)
@@ -890,4 +890,28 @@ mod tests {
890890
];
891891
assert_eq!(code.get_line_number(214, &table).unwrap(), 5);
892892
}
893+
894+
#[test]
895+
fn test_py3_12_line_numbers_truncated() {
896+
use crate::python_bindings::v3_12_0::PyCodeObject;
897+
let code = PyCodeObject {
898+
co_firstlineno: 4,
899+
..Default::default()
900+
};
901+
902+
let table = [128_u8];
903+
assert!(code.get_line_number(214, &table).is_err());
904+
}
905+
906+
#[test]
907+
fn test_py3_12_line_numbers_invalid() {
908+
use crate::python_bindings::v3_12_0::PyCodeObject;
909+
let code = PyCodeObject {
910+
co_firstlineno: 4,
911+
..Default::default()
912+
};
913+
914+
let table = [0];
915+
assert!(code.get_line_number(214, &table).is_err());
916+
}
893917
}

0 commit comments

Comments
 (0)