chore: sync upstream (25 Commits) #8

Merged
alf merged 25 commits from chore/sync-upstream-20261023 into main 2026-10-23 10:59:52 +00:00
Owner

Upstream-Sync von upstream/main (25 Commits). Fast-Forward.

  • 9581b53c Release 0.16.0
  • 0871135a Merge pull request #2062 from storytold/sonar-fix/js-css-reliability
  • 645b683a Merge pull request #2061 from storytold/sonar-fix/js-csprng
  • ec0cc83a fix(web): fall back to network when caches.open fails in service worker
  • 6871aa22 security: check crypto.randomUUID availability in canMove
  • 15b8a916 Release 0.15.0
  • b55cb5bc Merge pull request #1363 from DWAA1660/fix/1237-comp-contains-cycles
  • 571aebd8 Merge pull request #1957 from Anubhav-Rai/script-value-dims
  • 831e719f Merge pull request #1855 from CharlesBaumer/fix/doc-path-stills-windows
  • 70763d74 Merge pull request #1966 from Silvertree2010/fix/h930-deleting-the-first-vertex-of-a-c
  • be4d2d7b Merge pull request #1992 from Silvertree2010/fix/h1142-sampleimage-panics-with-integer
  • a9c2bfa6 Merge pull request #1902 from Silvertree2010/fix/h704-hsv-to-rgb-returns-magenta-for-a
  • 13486210 Merge pull request #1989 from Silvertree2010/fix/h1084-path-rect-panics-when-both-size
  • 9a51a05e Merge pull request #2099 from storytold/readme/app-icon
  • 7d68a74f README: the app icon above the title
Upstream-Sync von `upstream/main` (25 Commits). Fast-Forward. - 9581b53c Release 0.16.0 - 0871135a Merge pull request #2062 from storytold/sonar-fix/js-css-reliability - 645b683a Merge pull request #2061 from storytold/sonar-fix/js-csprng - ec0cc83a fix(web): fall back to network when caches.open fails in service worker - 6871aa22 security: check crypto.randomUUID availability in canMove - 15b8a916 Release 0.15.0 - b55cb5bc Merge pull request #1363 from DWAA1660/fix/1237-comp-contains-cycles - 571aebd8 Merge pull request #1957 from Anubhav-Rai/script-value-dims - 831e719f Merge pull request #1855 from CharlesBaumer/fix/doc-path-stills-windows - 70763d74 Merge pull request #1966 from Silvertree2010/fix/h930-deleting-the-first-vertex-of-a-c - be4d2d7b Merge pull request #1992 from Silvertree2010/fix/h1142-sampleimage-panics-with-integer - a9c2bfa6 Merge pull request #1902 from Silvertree2010/fix/h704-hsv-to-rgb-returns-magenta-for-a - 13486210 Merge pull request #1989 from Silvertree2010/fix/h1084-path-rect-panics-when-both-size - 9a51a05e Merge pull request #2099 from storytold/readme/app-icon - 7d68a74f README: the app icon above the title
alf added 25 commits 2026-10-23 10:59:52 +00:00
Project::comp_contains recursed through precomp layers with no visited
set or depth limit. A damaged project with a precomp cycle that doesn't
pass the queried comp (A and B nesting each other, C unrelated) recursed
until the stack ran out, which aborts the process ("stack overflow,
aborting"): it can't be caught as a command error, so unsaved work is
lost. layer.addItem checks it before adding a precomp, and the renderer
calls it for every nested comp and its audio. A long chain used the
stack the same way, and comps shared by many paths were walked once per
path (exponential for nested diamonds).

It is now an explicit stack with a visited set: same answers (a comp
contains itself; a target reached through a cycle is found), each comp
visited once, no recursion. The renderer already skips a precomp that
contains the comp being rendered, so a cyclic project now renders
instead of crashing; nothing is repaired on load.

Tests: project comp_contains_ends_on_cycles_long_chains_and_shared_
precomps (cycle with an unrelated target, self-nesting, a target through
a cycle, 40 levels of diamonds, a 20 000-comp chain); engine
a_project_with_a_precomp_cycle_opens_adds_and_renders_without_running_
out_of_stack (file.open, layer.addItem both ways, render). On main the
engine test aborts with a stack overflow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`Stills` is only used by the `#[cfg(unix)]` part of
`footage_on_other_computers_is_never_looked_at`. On Windows it was dead
code, so `cargo xtask ci` stopped at clippy (`-D warnings`).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tests that share a fixture each generate it on a first run and rename
their temp file into place. On Windows the losing rename fails with
PermissionDenied while the winner has the file open. Treat a failed
rename as "another test made it first" when the fixture exists, as
`png_sequence` already does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Found while testing crates/color/src/lib.rs:143-158

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
A 2-D point property took any array: `[1, 2, 3]` and `[1, 2, 3, 4]` were cut to `[1, 2]` and
`[1]` was broadcast to `[1, 1]`, each reported as success, so a script holding a wrong value
silently did something else instead of failing. After Effects raises "Array is not of the
correct dimension" and leaves the property unchanged.

The length must now match the property's dimension, with the one exception After Effects also
makes: two values for a 3-D property, where z stays 0, so `position.setValue([x, y])` keeps
working.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Found while testing crates/keyframe/src/value.rs:79-95 (ShapePath::feather_after_remove, called from crates/engine/src/commands/mask.rs:330)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Found while testing crates/path/src/lib.rs:136

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Found while testing crates/expr/src/sample.rs:102

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Replace Math.random() with crypto.randomUUID() when generating the unique
suffix for the atomic write-then-move temp file. The value isn't security-
sensitive, but a CSPRNG gives a stronger uniqueness guarantee and resolves
SonarCloud javascript:S2245.
- scriptui.js: replace the self-comparison NaN check (o.max === o.max) with
  the explicit Number.isNaN(o.max) (S1764).
- sw.js: mark the fire-and-forget cache.put() with void and a .catch() so the
  promise rejection is handled (S9383).
- prelude.js: return __err(...) from the activeCamera getter so every path
  yields a value (S4275); __err always throws, so behavior is unchanged.
README: the app icon above the title
Fix panic in path::rect when both size components are NaN
Fix hsv_to_rgb returning magenta for tiny negative hues
Fix integer overflow in sampleImage for huge sample points
Fix feather points when deleting first vertex of a closed mask path
Windows: two fixes so cargo xtask ci gets past clippy and the media tests
script: setValue rejects an array of the wrong dimension (#1936)
Project: comp_contains walks precomps with a visited set, not recursion (#1237)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
security: use crypto.randomUUID for temp file suffix (SonarCloud S2245)
fix: JS reliability bugs (SonarCloud S1764/S9383/S4275)
Release 0.16.0
Some checks failed
nix.yml / Release 0.16.0 (pull_request) Failing after 0s
sonarcloud.yml / Release 0.16.0 (pull_request) Failing after 0s
nix.yml / Release 0.16.0 (push) Failing after 0s
sonarcloud.yml / Release 0.16.0 (push) Failing after 0s
9581b53c3f
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
alf merged commit 9581b53c3f into main 2026-10-23 10:59:52 +00:00
alf deleted branch chore/sync-upstream-20261023 2026-10-23 10:59:52 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/effectcraft!8
No description provided.