]> git.lizzy.rs Git - rust.git/blobdiff - src/metadata.rs
Rustup to rustc 1.44.0-nightly (1edd389cc 2020-03-23)
[rust.git] / src / metadata.rs
index f15e1682d13d35ee06c02795663eb6b76fb42257..cedbff914bfd5dec11cc05bdb8c031875df91f58 100644 (file)
@@ -1,8 +1,9 @@
+use std::convert::TryFrom;
 use std::fs::File;
 use std::path::Path;
 
 use rustc::middle::cstore::{EncodedMetadata, MetadataLoader};
-use rustc::session::config;
+use rustc_session::config;
 use rustc::ty::TyCtxt;
 use rustc_codegen_ssa::METADATA_FILENAME;
 use rustc_data_structures::owning_ref::{self, OwningRef};
@@ -24,7 +25,10 @@ fn get_rlib_metadata(
         while let Some(entry_result) = archive.next_entry() {
             let mut entry = entry_result.map_err(|e| format!("{:?}", e))?;
             if entry.header().identifier() == METADATA_FILENAME.as_bytes() {
-                let mut buf = Vec::new();
+                let mut buf = Vec::with_capacity(
+                    usize::try_from(entry.header().size())
+                        .expect("Rlib metadata file too big to load into memory.")
+                );
                 ::std::io::copy(&mut entry, &mut buf).map_err(|e| format!("{:?}", e))?;
                 let buf: OwningRef<Vec<u8>, [u8]> = OwningRef::new(buf).into();
                 return Ok(rustc_erase_owner!(buf.map_owner_box()));