Skip to content

Migrate to ATRAPS LLC: DFM recursion bound, copyright, trusted publishing - #2

Merged
BinFlip merged 6 commits into
mainfrom
chore/llc-migration
Aug 10, 2026
Merged

Migrate to ATRAPS LLC: DFM recursion bound, copyright, trusted publishing#2
BinFlip merged 6 commits into
mainfrom
chore/llc-migration

Conversation

@BinFlip

@BinFlip BinFlip commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

Migration of this crate to ATRAPS LLC ownership, per TRANSFER.md. Two of these commits are real fixes, not hygiene.

fix: bound DFM nesting depth — was already in the working tree, unreleased. The form stream is untrusted input carved from the analyzed binary, and neither the read_object/read_children cycle nor read_value's list arm bounded recursion: one nesting byte bought one stack frame, so a crafted DFM could exhaust the stack and abort the process. Now capped at MAX_DFM_DEPTH (64).

Rewiring the call sites onto read_value_at had left the old read_value wrapper with no callers — dead code fails the -D warnings gate, so it is dropped and its doc comment moved onto the depth-carrying function.

fix: drop redundant binding to satisfy current clippysrc/layout.rs binds a field that .. already covers. Clippy did not flag it when CI last ran (2026-07-07), but the workflow pins @stable, so the lint now fires and would fail this PR regardless of the migration. No behaviour change.

chore: assign copyrightLICENSE appendix now reads Copyright 2026 ATRAPS LLC (year was already right, holder was personal). NOTICE added; authors dropped; repository repointed at the org; README gains a proper License section, having previously had only a trailing one-line mention with no heading.

ci: — trusted publishing replaces the stored token, and the job refuses to publish a release whose commit is not contained in main.

build:cargo update; no direct dependency changed version.

chore: release 0.3.2 — 0.3.1 is published and immutable, so both fixes and the corrected metadata only reach crates.io in a new version.

Verified locally: 114 tests pass, clippy clean, rustdoc clean under -D warnings, fmt clean, cargo package ships LICENSE and NOTICE.

Also deleted a stale local master branch (0 unique commits, fully contained in main).

BinFlip added 6 commits August 9, 2026 17:03
The form stream is untrusted input carved out of the analyzed binary,
and neither the read_object/read_children cycle nor read_value's list
arm bounded recursion — one nesting byte in the input bought one stack
frame, so a crafted DFM could exhaust the stack and abort the process.

Thread a depth counter through read_object, read_children,
read_properties, and read_value, and bail out at MAX_DFM_DEPTH (64).
Real Delphi forms nest a handful of levels, so the bound is far above
anything legitimate while still cutting off unbounded descent.

Rewiring every call site onto read_value_at left the old read_value
wrapper with no callers, so drop it and move its doc comment onto the
depth-carrying function.
`LayoutKind::NamedField { managed: _, .. }` binds a field the `..`
pattern already covers. Clippy did not flag this when CI last ran on
2026-07-07, but the workflow pins dtolnay/rust-toolchain@stable, so the
lint now fires on every build and fails the `-D warnings` gate.

No behaviour change — the arm matched the same values before.
Record ATRAPS LLC as copyright holder following the executed IP
assignment. The Apache-2.0 appendix carried the correct year but named
Johann Kempter personally.

- LICENSE: appendix now reads "Copyright 2026 ATRAPS LLC"
- NOTICE: added, per Apache-2.0 section 4(d) attribution channel
- Cargo.toml: drop deprecated `authors`; point `repository` at the org
- README: add a License section naming the holder; it previously had
  only a trailing one-line mention with no heading
Replace the long-lived CARGO_REGISTRY_TOKEN repo secret with a
short-lived OIDC token minted per run by crates-io-auth-action and
revoked when the job ends.

Also gate the job on the release commit being contained in main: a
release can be cut from any commit, including one that never landed on
main, so the `release: published` trigger alone does not imply it.
`cargo update` within existing constraints. No direct dependency changed
version — goblin, scroll, and tracing were already at their latest
releases.
0.3.1 is already published and its metadata is immutable, so the
corrected copyright holder, dropped `authors` field, and organisation
repository URL only reach crates.io in a new version — as does the DFM
recursion bound, which is the substantive change here.
@BinFlip
BinFlip merged commit dc12c62 into main Aug 10, 2026
5 checks passed
@BinFlip
BinFlip deleted the chore/llc-migration branch August 10, 2026 00:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant