Skip to content

Commit

Permalink
Use ZIP file size metadata to allocate string (#13032)
Browse files Browse the repository at this point in the history
  • Loading branch information
MichaReiser authored Aug 21, 2024
1 parent a35cdbb commit 785c399
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion crates/ruff_db/src/vendored.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,16 @@ impl VendoredFileSystem {
fn read_to_string(fs: &VendoredFileSystem, path: &VendoredPath) -> Result<String> {
let mut archive = fs.lock_archive();
let mut zip_file = archive.lookup_path(&NormalizedVendoredPath::from(path))?;
let mut buffer = String::new();

// Pre-allocate the buffer with the size specified in the ZIP file metadata
// because `read_to_string` passes `None` as the size hint.
// But let's not trust the zip file metadata (even though it's vendored)
// and limit it to a reasonable size.
let mut buffer = String::with_capacity(
usize::try_from(zip_file.size())
.unwrap_or(usize::MAX)
.min(10_000_000),
);
zip_file.read_to_string(&mut buffer)?;
Ok(buffer)
}
Expand Down

0 comments on commit 785c399

Please sign in to comment.