2dba10b7df
Two review-identified blocking fixes:
1. RawFd compile error in corec12_integration.rs:45-55.
reader_pool_from_fds received Vec<usize> from callers but the
OwnedFd::from_raw_fd signature takes std::os::fd::RawFd (c_int).
Per Rust's no-implicit-conversion rule this would not compile.
Fix: explicit try_from(raw) with overflow error message. Add a
precise SAFETY comment documenting that 'raw' is expected from
libredox::Fd::into_raw_fd on a live, owned descriptor and that dup
creates an independently owned duplicate.
2. BufferPool still exposed stale bytes in F001 fix:
v.fill(0) only clears 0..v.len() (the OLD logical length), then
unsafe { v.set_len(capacity) } extends the Vec to full capacity,
leaving the tail bytes uninitialized AND violating Vec::set_len's
contract (the new elements must already be initialized). This was
information disclosure (prior flow data in the uninitialized tail)
AND undefined behavior.
Fix: use the safe v.resize(capacity, 0), which guarantees every
byte in [0, capacity) is initialized to 0 before the length
changes. No unsafe needed.