mirror of
https://github.com/storytold/pdfcraft.git
synced 2026-11-12 11:15:34 +00:00
address review: cap the opened handle's length before allocating
This commit is contained in:
@@ -242,6 +242,10 @@ pub fn read_remote_document(path: &Path) -> Result<Vec<u8>, RemoteDocumentPathEr
|
||||
if !meta.is_file() {
|
||||
return Err(RemoteDocumentPathError::NotAFile);
|
||||
}
|
||||
// the opened handle's own length: a file replaced after the path check must not size the buffer
|
||||
if meta.len() > MAX_REMOTE_DOCUMENT_BYTES {
|
||||
return Err(RemoteDocumentPathError::TooLarge);
|
||||
}
|
||||
let mut bytes = Vec::with_capacity(usize::try_from(meta.len()).unwrap_or(0));
|
||||
file.take(MAX_REMOTE_DOCUMENT_BYTES.saturating_add(1)).read_to_end(&mut bytes).map_err(|e| RemoteDocumentPathError::Read(e.to_string()))?;
|
||||
if u64::try_from(bytes.len()).map_or(true, |n| n > MAX_REMOTE_DOCUMENT_BYTES) {
|
||||
|
||||
Reference in New Issue
Block a user