@@ -117,7 +117,7 @@ fn emit_struct(input: &DekuData) -> Result<TokenStream, syn::Error> {
117117 use :: #crate_:: DekuReader as _;
118118 let __deku_reader = & mut deku:: reader:: Reader :: new( __deku_input. 0 ) ;
119119 if __deku_input. 1 != 0 {
120- __deku_reader. skip_bits( __deku_input. 1 ) ?;
120+ __deku_reader. skip_bits( __deku_input. 1 , :: #crate_ :: ctx :: Order :: default ( ) ) ?;
121121 }
122122
123123 let __deku_value = Self :: from_reader_with_ctx( __deku_reader, ( ) ) ?;
@@ -131,7 +131,7 @@ fn emit_struct(input: &DekuData) -> Result<TokenStream, syn::Error> {
131131 let mut __deku_cursor = #crate_:: no_std_io:: Cursor :: new( __deku_input. 0 ) ;
132132 let mut __deku_reader = & mut deku:: reader:: Reader :: new( & mut __deku_cursor) ;
133133 if __deku_input. 1 != 0 {
134- __deku_reader. skip_bits( __deku_input. 1 ) ?;
134+ __deku_reader. skip_bits( __deku_input. 1 , :: #crate_ :: ctx :: Order :: default ( ) ) ?;
135135 }
136136
137137 let __deku_value = Self :: from_reader_with_ctx( __deku_reader, ( ) ) ?;
@@ -406,7 +406,7 @@ fn emit_enum(input: &DekuData) -> Result<TokenStream, syn::Error> {
406406 use :: #crate_:: DekuReader as _;
407407 let __deku_reader = & mut deku:: reader:: Reader :: new( __deku_input. 0 ) ;
408408 if __deku_input. 1 != 0 {
409- __deku_reader. skip_bits( __deku_input. 1 ) ?;
409+ __deku_reader. skip_bits( __deku_input. 1 , :: #crate_ :: ctx :: Order :: default ( ) ) ?;
410410 }
411411
412412 let __deku_value = Self :: from_reader_with_ctx( __deku_reader, ( ) ) ?;
@@ -420,7 +420,7 @@ fn emit_enum(input: &DekuData) -> Result<TokenStream, syn::Error> {
420420 let mut __deku_cursor = #crate_:: no_std_io:: Cursor :: new( __deku_input. 0 ) ;
421421 let mut __deku_reader = & mut deku:: reader:: Reader :: new( & mut __deku_cursor) ;
422422 if __deku_input. 1 != 0 {
423- __deku_reader. skip_bits( __deku_input. 1 ) ?;
423+ __deku_reader. skip_bits( __deku_input. 1 , :: #crate_ :: ctx :: Order :: default ( ) ) ?;
424424 }
425425
426426 let __deku_value = Self :: from_reader_with_ctx( __deku_reader, ( ) ) ?;
@@ -607,43 +607,21 @@ fn emit_padding(bit_size: &TokenStream, bit_order: Option<&LitStr>) -> TokenStre
607607 let order = gen_bit_order_from_str ( bit_order) . unwrap ( ) ;
608608 quote ! {
609609 {
610- extern crate alloc;
611-
612610 use core:: convert:: TryFrom ;
613611 let __deku_pad = usize :: try_from( #bit_size) . map_err( |e|
614612 :: #crate_:: deku_error!( :: #crate_:: DekuError :: InvalidParam , "Invalid padding param, cannot convert ot usize" , "{}" , stringify!( #bit_size) )
615613 ) ?;
616-
617- if ( __deku_pad % 8 ) == 0 {
618- let bytes_read = __deku_pad / 8 ;
619- let mut buf = alloc:: vec![ 0 ; bytes_read] ;
620- // TODO: use skip_bytes, or Seek in the future?
621- let _ = __deku_reader. read_bytes( bytes_read, & mut buf, #order) ?;
622- } else {
623- // TODO: use skip_bits, or Seek in the future?
624- let _ = __deku_reader. read_bits( __deku_pad, #order) ?;
625- }
614+ __deku_reader. skip_bits( __deku_pad, #order) ?;
626615 }
627616 }
628617 } else {
629618 quote ! {
630619 {
631- extern crate alloc;
632-
633620 use core:: convert:: TryFrom ;
634621 let __deku_pad = usize :: try_from( #bit_size) . map_err( |e|
635622 :: #crate_:: deku_error!( :: #crate_:: DekuError :: InvalidParam , "Invalid padding param, cannot convert to usize" , "{}" , stringify!( #bit_size) )
636623 ) ?;
637-
638- if ( __deku_pad % 8 ) == 0 {
639- let bytes_read = __deku_pad / 8 ;
640- let mut buf = alloc:: vec![ 0 ; bytes_read] ;
641- // TODO: use skip_bytes, or Seek in the future?
642- let _ = __deku_reader. read_bytes( bytes_read, & mut buf, :: #crate_:: ctx:: Order :: default ( ) ) ?;
643- } else {
644- // TODO: use skip_bits, or Seek in the future?
645- let _ = __deku_reader. read_bits( __deku_pad, :: #crate_:: ctx:: Order :: default ( ) ) ?;
646- }
624+ __deku_reader. skip_bits( __deku_pad, :: #crate_:: ctx:: Order :: default ( ) ) ?;
647625 }
648626 }
649627 }
@@ -1070,9 +1048,14 @@ pub fn emit_try_from(
10701048 fn try_from( input: & #lifetime [ u8 ] ) -> core:: result:: Result <Self , Self :: Error > {
10711049 let total_len = input. len( ) ;
10721050 let mut cursor = :: #crate_:: no_std_io:: Cursor :: new( input) ;
1073- let ( amt_read, res) = <Self as :: #crate_:: DekuContainerRead >:: from_reader( ( & mut cursor, 0 ) ) ?;
1074- if ( amt_read / 8 ) != total_len {
1075- return Err ( :: #crate_:: deku_error!( :: #crate_:: DekuError :: Parse , "Too much data" ) ) ;
1051+ let ( bits_read, res) = <Self as :: #crate_:: DekuContainerRead >:: from_reader( ( & mut cursor, 0 ) ) ?;
1052+ let bytes_read = bits_read / 8 ;
1053+ if bytes_read < total_len {
1054+ return Err ( :: #crate_:: deku_error!( :: #crate_:: DekuError :: Parse , "Too much data" , "Read {} but total length was {}" , { bits_read / 8 } , total_len) ) ;
1055+ }
1056+ // Possible Seek beyond end
1057+ if bytes_read > total_len {
1058+ return Err ( :: #crate_:: DekuError :: Incomplete ( :: #crate_:: error:: NeedSize :: new( bits_read - { total_len * 8 } ) ) ) ;
10761059 }
10771060 Ok ( res)
10781061 }
0 commit comments