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