mirror of
https://github.com/storytold/cadcraft.git
synced 2026-10-26 11:56:50 -06:00
The native DWG bridge wraps the third-party `acadrust` decoder, which allocates tables and section buffers from sizes a file declares and cannot be interrupted once it starts. The DWG->DXF read path already rejects oversized input before decoding, caps the DXF output while writing, and runs inside `catch_unwind`. The DXF->DWG `convert` path had no input-size guard, so a very large DXF went straight into the dependency's reader. - `convert` now rejects DXF input larger than `Limits::max_dxf_bytes` before calling `DxfReader::read`, symmetric with the read path, and keeps the existing `catch_unwind` around the decoder and writer (rows 23, 3, 27, large-input variant). - Documented the residual risk: a small file that declares a huge internal table or section can still make the dependency allocate before any size is known. Fully fixing that needs an upstream fix in `acadrust` (validate declared sizes against a decoded-memory budget) or a separate worker with an OS memory limit; the in-crate limits keep the blast radius bounded until then. Addresses findings rows 3, 23, 27 (bounds the reachable input/output size; the deeper allocation fix belongs in the unmodified dependency).