@@ -789,6 +789,9 @@ fn get_metadata_section<'p>(
789
789
loader. get_dylib_metadata ( target, filename) . map_err ( MetadataError :: LoadFailure ) ?;
790
790
// The header is uncompressed
791
791
let header_len = METADATA_HEADER . len ( ) ;
792
+ let u32_len = core:: mem:: size_of :: < u32 > ( ) ;
793
+ let data_start = header_len + u32_len;
794
+
792
795
debug ! ( "checking {} bytes of metadata-version stamp" , header_len) ;
793
796
let header = & buf[ ..cmp:: min ( header_len, buf. len ( ) ) ] ;
794
797
if header != METADATA_HEADER {
@@ -799,14 +802,13 @@ fn get_metadata_section<'p>(
799
802
}
800
803
801
804
// Length of the compressed stream - this allows linkers to pad the section if they want
802
- let u32_len = core:: mem:: size_of :: < u32 > ( ) ;
803
- let Ok ( len_bytes) = <[ u8 ; 4 ] >:: try_from ( & buf[ header_len..cmp:: min ( header_len + u32_len, buf. len ( ) ) ] ) else {
805
+ let Ok ( len_bytes) = <[ u8 ; 4 ] >:: try_from ( & buf[ header_len..cmp:: min ( data_start, buf. len ( ) ) ] ) else {
804
806
return Err ( MetadataError :: LoadFailure ( "invalid metadata length found" . to_string ( ) ) ) ;
805
807
} ;
806
808
let compressed_len = u32:: from_be_bytes ( len_bytes) as usize ;
807
809
808
810
// Header is okay -> inflate the actual metadata
809
- let compressed_bytes = & buf[ ( header_len + u32_len ) ..( compressed_len + header_len + u32_len ) ] ;
811
+ let compressed_bytes = & buf[ data_start ..( data_start + compressed_len ) ] ;
810
812
debug ! ( "inflating {} bytes of compressed metadata" , compressed_bytes. len( ) ) ;
811
813
// Assume the decompressed data will be at least the size of the compressed data, so we
812
814
// don't have to grow the buffer as much.
0 commit comments