From a608838ba2f12a51dce2c6a9ed14466eda3a628b Mon Sep 17 00:00:00 2001 From: bflatastic Date: Sat, 24 Oct 2026 17:19:54 +0700 Subject: [PATCH] Security bounds: fix on landing #3939 (see the PR comment) --- crates/doc/src/placed_document.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/doc/src/placed_document.rs b/crates/doc/src/placed_document.rs index bb7c6e95f..9b00da57e 100644 --- a/crates/doc/src/placed_document.rs +++ b/crates/doc/src/placed_document.rs @@ -553,8 +553,10 @@ impl Document { let mut reads = 0usize; while let Some((p, depth)) = queue.pop() { let Some(blob) = d.images.get(&p.key).cloned() else { continue }; - let read_full = depth < MAX_DEPTH && reads < MAX_PLACED_READS; - reads += usize::from(read_full); + // Top-level placements are distinct already (by key): only reads nested inside placed + // documents count, so a catalogue placing many files still reads each of them. + let read_full = depth < MAX_DEPTH && (depth == 0 || reads < MAX_PLACED_READS); + reads += usize::from(read_full && depth > 0); let full = if read_full { full_bytes(&p, &blob) } else { None }; if full.and_then(|b| read(&p, &b)).is_none() { let preview = if blob.is_proxy() { Some(blob.bytes.clone()) } else { blob.proxy.clone() };