Commit Graph
5 Commits
Author SHA1 Message Date
nrq6993-a11y a0b038e9e2 Fix clippy after upstream merge (art style test, Fenwick step, pencil bool)
Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-26 18:46:53 +07:00
bflatastic f024069002 Effects and pathops: keep the isolate_lowest_one allows #4252 dropped (clippy 1.99 still flags the manual form) 2026-10-26 18:46:46 +07:00
nrq6993-a11y c38185f79c ci: Rust 1.95 clippy and flaky Arabic PDF test after upstream merge
Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-26 18:40:47 +07:00
Dylan M. Taylor 0eebd533c5 security(pathops): signed zeros, reported budget rejections, and a fill-only fallback
Boxes that touch at -0.0/+0.0 now count as overlapping, so the pair cap cannot be skipped. try_boolean_n, try_unite_all and try_area report a refused input, and the Pathfinder shape-mode unite and the Blob Brush use them to show an error. When the planar map is over its budget, the fallback leaves out paths that fill nothing so a flood of cutting lines cannot take the filled shapes down with it.
2026-10-25 16:04:29 -04:00
Dylan M. Taylor cd80d1d859 Security: planar map budgets for booleans, Live Paint, Offset Path and 3D effects
CodeRabbit findings #6, #19, #53, #59, #62, #167:

- Before a sweep builds a planar map (Boolean, normalize, Pathfinder, Offset Path, Live
  Paint, Shape Builder), the pairs of segments whose bounds overlap are counted exactly in
  O(n log n); past 4M the operation fails as `PathOpsError::TooComplex` (a crossing can only
  lie where two segments' bounds overlap).
- Live Paint's winding crossings are sparse: the sweep keeps one per edge, and a vector as
  long as the input count made disjoint shapes quadratic in memory.
- Gap detection groups the segments near a loose end by track once.
- 3D: ring containment checks bounds first and walks at most 50M edges; Inflate's mixed-cell
  booleans take at most 4M outline segments together.
2026-10-25 15:42:41 -04:00