address review: cap the opened handle's length before allocating

This commit is contained in:
Dylan M. Taylor
2026-11-04 01:42:34 +00:00
parent a2097213d8
commit 53f2df939f
+4
View File
@@ -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) {