@@ -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