Files
Dylan M. TaylorandClaude Opus 5.5 03d2f0e83c Security: file authority for stored paths, linked files, placed documents, font folders, recovery areas and atomic saves
CodeRabbit findings #7, #72, #92, #94, #95, #99, #100, #140, #158, #174:

- Link search hashes at most the size it looked at (a growing file no longer matches).
- Resolving links reads, decodes and previews each linked file once, shared by every key.
- Placed documents read inside one another resolve links at most 8 deep, never one already
  being read.
- A data set's image path and the placed-document rereader follow stored paths through
  `document_path` (no other computer's share).
- The Links panel looks at a linked file within the roots of the automation caller that
  opened the document.
- A fonts folder set by a confined caller is scanned without following links out of it.
- Recovery refuses an area folder that is a link or another account's.
- Atomic saves keep the replaced file's group and Linux access ACL, or make the replacement
  owner-only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 17:19:59 +07:00

28 lines
846 B
TOML

[package]
name = "vectorcraft-format"
version.workspace = true
edition.workspace = true
license.workspace = true
description = "VectorCraft native .vectorcraft format (versioned JSON, embedded images)"
[lints]
workspace = true
[dependencies]
vectorcraft-doc = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
thiserror = { workspace = true }
flate2 = { workspace = true }
# A plain fsync where a volume refuses the full flush (`sync_file`, atomic.rs), and the replaced
# file's access ACL on Linux (`keep_permissions`). Already in Cargo.lock (tempfile), so this adds
# no new crate.
[target.'cfg(unix)'.dependencies]
rustix = { workspace = true, features = ["std", "fs"] }
[dev-dependencies]
vectorcraft-testkit = { workspace = true }
proptest = { workspace = true }
vectorcraft-geom = { workspace = true }