@@ -8,7 +8,6 @@ use std::{
88use memmap2:: Mmap ;
99use object:: read:: { File as BinaryFile , Object , ObjectSection } ;
1010use paths:: AbsPath ;
11- use snap:: read:: FrameDecoder as SnapDecoder ;
1211
1312#[ derive( Debug ) ]
1413#[ allow( dead_code) ]
@@ -123,9 +122,8 @@ pub fn read_version(dylib_path: &AbsPath) -> io::Result<String> {
123122 let version = u32:: from_be_bytes ( [ dot_rustc[ 4 ] , dot_rustc[ 5 ] , dot_rustc[ 6 ] , dot_rustc[ 7 ] ] ) ;
124123 // Last supported version is:
125124 // https://github.com/rust-lang/rust/commit/b94cfefc860715fb2adf72a6955423d384c69318
126- let ( snappy_portion, bytes_before_version) = match version {
127- 5 | 6 => ( & dot_rustc[ 8 ..] , 13 ) ,
128- 7 | 8 => {
125+ let ( mut metadata_portion, bytes_before_version) = match version {
126+ 8 => {
129127 let len_bytes = & dot_rustc[ 8 ..12 ] ;
130128 let data_len = u32:: from_be_bytes ( len_bytes. try_into ( ) . unwrap ( ) ) as usize ;
131129 ( & dot_rustc[ 12 ..data_len + 12 ] , 13 )
@@ -143,25 +141,18 @@ pub fn read_version(dylib_path: &AbsPath) -> io::Result<String> {
143141 }
144142 } ;
145143
146- let mut uncompressed: Box < dyn Read > = if & snappy_portion[ 0 ..4 ] == b"rust" {
147- // Not compressed.
148- Box :: new ( snappy_portion)
149- } else {
150- Box :: new ( SnapDecoder :: new ( snappy_portion) )
151- } ;
152-
153144 // We're going to skip over the bytes before the version string, so basically:
154145 // 8 bytes for [b'r',b'u',b's',b't',0,0,0,5]
155146 // 4 or 8 bytes for [crate root bytes]
156147 // 1 byte for length of version string
157148 // so 13 or 17 bytes in total, and we should check the last of those bytes
158149 // to know the length
159150 let mut bytes = [ 0u8 ; 17 ] ;
160- uncompressed . read_exact ( & mut bytes[ ..bytes_before_version] ) ?;
151+ metadata_portion . read_exact ( & mut bytes[ ..bytes_before_version] ) ?;
161152 let length = bytes[ bytes_before_version - 1 ] ;
162153
163154 let mut version_string_utf8 = vec ! [ 0u8 ; length as usize ] ;
164- uncompressed . read_exact ( & mut version_string_utf8) ?;
155+ metadata_portion . read_exact ( & mut version_string_utf8) ?;
165156 let version_string = String :: from_utf8 ( version_string_utf8) ;
166157 version_string. map_err ( |e| io:: Error :: new ( io:: ErrorKind :: InvalidData , e) )
167158}
0 commit comments