Commit Graph
2367 Commits
Author SHA1 Message Date
Dylan M. Taylor 0c8d47f42a fix: suppress the stat check's taint finding (SonarCloud)
The stat is the validation that rejects anything but an existing regular
file; annotate it with that reasoning.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
2026-10-23 10:28:48 -04:00
Dylan M. Taylor 9b735dc687 Merge pull request #2217 from dylanmtaylor/sonar/checker-path-safety
fix: document the AE checker's operator-supplied CLI path (SonarCloud)
2026-10-23 10:18:29 -04:00
Dylan M. Taylor c75071dfb8 fix: document the AE checker's operator-supplied CLI path (SonarCloud)
The path is the developer's own CLI build, stat'ed as a regular file before
use; suppress the taint finding with that reasoning.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
2026-10-23 10:10:47 -04:00
Dylan M. Taylor 16c30830ef Merge pull request #2215 from dylanmtaylor/sonar/nosonar-placement
fix: put the NOSONAR marker on the spawnSync line (SonarCloud follow-up)
2026-10-23 09:53:46 -04:00
Dylan M. Taylor 400fbb79e9 fix: put the NOSONAR marker on the spawnSync line (SonarCloud)
Sonar applies NOSONAR to the line that carries the marker, so the
explanation above the call did not suppress anything.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
2026-10-23 09:44:38 -04:00
Dylan M. Taylor 9066b64150 Merge pull request #2214 from dylanmtaylor/sonar/security-reliability
fix: validate the CLI path in the AE ease checker (SonarCloud jssecurity:S8705)
2026-10-23 09:37:45 -04:00
Dylan M. Taylor d1d9849e2d fix: validate the CLI path in the AE ease checker (SonarCloud)
Resolve the argument and require a regular file before spawnSync, which
never uses a shell and only runs fixed binaries or that validated path.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
2026-10-23 09:29:39 -04:00
Dylan M. Taylor 23f11ab7cf expr: bound rewrite expansion and preserve assignment targets (#2195)
* expr: bound rewrite expansion and preserve assignment targets

* expr: bound rewritten output size and rewrite computed assignment targets
2026-10-23 09:14:49 -04:00
Dylan M. Taylor 09b9ebca34 roto: bound frozen matte decoding and serialization (#2194)
* roto: bound frozen matte decoding and serialization

* roto: address review (fallible RLE growth, pre-check plane bytes, saturate 32-bit limits)
2026-10-23 08:59:06 -04:00
Dylan M. Taylor 8a4ed77c4a pdf: bound image sample and mask allocations (#2191)
* pdf: bound image sample and mask allocations

* pdf: fallible mask allocations and JPEG header pixel cap
2026-10-23 08:56:15 -04:00
Dylan M. Taylor ca8043cbba text: bound layout and variable font metadata (#2193)
* text: bound layout and variable font metadata

* text: address review (intern once, f64 prefix sums, bounded item search, name fallback, consistent variation fallback)
2026-10-23 08:55:07 -04:00
Dylan M. Taylor 4b48482e8f ui: bound queued synthetic input gestures (#2197)
* ui: bound queued synthetic input gestures

* ui: reserve exact click event count
2026-10-23 08:45:10 -04:00
Dylan M. Taylor 2cf90507f3 svg: bound raster surfaces and handle duplicate gradient stops (#2190) 2026-10-23 08:38:10 -04:00
Christopher Linnett 32ae41c4eb #2094 (adv): crisp cast shadows so diffusion only softens
Shadow maps use the full scene-derived size (point-light faces capped
at 2048) under a 26M-texel scene budget halved largest-first; the PCF
filter measures its reach in output pixels with a two-texel minimum,
samples texel centres on a jittered adaptive 5..10 grid, and compares
each texel against the receiver plane's own depth so wide kernels never
self-shadow lit casters. The WGSL mirror is parenthesised (Tint rejects
the old form) and guarded by a shader-wide grammar test; the CPU
reference and shader remain step-for-step parity-tested.
2026-10-23 16:21:21 +08:00
skylar taylor-barrick 8fe2f51fb0 #979: cover raster footage and a selection elsewhere in the vector-menu test
A raster footage layer's Timeline menu now also has to leave out Create Shapes from Vector Layer. The viewer check keeps the solid selected, so the menu has to follow the layer under the pointer rather than the selection. With the viewer's caps merge made a no-op, the test fails at the viewer check.
2026-10-22 19:13:31 -06:00
skylar taylor-barrick 7c1183df56 #1497: test that double-clicking an effect property name reveals it in the timeline
Double-clicking a property name in Effect Controls did nothing. The test double-clicks the name and checks the Timeline marks the property revealed and shows its row. Without the fix nothing is revealed.
2026-10-22 18:55:49 -06:00
skylar taylor-barrick 841ff7bc4b #354: test that the panel focus outline is drawn over the panel bodies
The focused panel's outline was painted before the panel body, so body fills hid it. The test finds the outline in the painted shapes and checks no filled rect painted after it reaches its one-pixel ring. Without the fix a body fill overlaps the ring.
2026-10-22 18:55:49 -06:00
skylar taylor-barrick d87a6940f4 #979: test that layer context menus offer Create Shapes from Vector Layer
Right-clicking vector footage in the Timeline or the Composition viewer offered no vector conversion. The test imports an SVG and checks the item is absent for a solid, present on the SVG layer in both menus, and converts it. Without the fix the menu item is missing.
2026-10-22 18:55:49 -06:00
skylar taylor-barrick 1c3522be4a #382: test that audio decoding at a zero mix rate does not divide by zero
Resampling footage audio divided by the requested mix rate, so a rate of 0 panicked. The test decodes a 44.1 kHz WAV at rate 0 and expects a read of the requested length. Without the guard it panics with 'attempt to divide by zero'.
2026-10-22 18:55:49 -06:00
Brandon ThomasandClaude Opus 5.5 9581b53c3f Release 0.16.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.16.0
2026-10-22 20:06:09 -04:00
Dylan M. Taylor 0871135a6b Merge pull request #2062 from storytold/sonar-fix/js-css-reliability
fix: JS reliability bugs (SonarCloud S1764/S9383/S4275)
2026-10-22 19:27:57 -04:00
Dylan M. Taylor 645b683a77 Merge pull request #2061 from storytold/sonar-fix/js-csprng
security: use crypto.randomUUID for temp file suffix (SonarCloud S2245)
2026-10-22 19:27:53 -04:00
Dylan M. Taylor ec0cc83a29 fix(web): fall back to network when caches.open fails in service worker 2026-10-22 19:19:20 -04:00
Dylan M. Taylor 6871aa2236 security: check crypto.randomUUID availability in canMove 2026-10-22 19:19:19 -04:00
Brandon ThomasandClaude Opus 5.5 15b8a916c5 Release 0.15.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.15.0
2026-10-22 15:39:32 -04:00
Barzabel 210af24abf svg: allocate a CSS block only for accepted selectors; charge class tokens (#2140) 2026-10-22 21:24:33 +03:00
Barzabel ee13586814 svg: share CSS declaration blocks and cap <style> work (#2140)
Every selector of a comma list cloned the whole declaration block, and every
element scanned every rule, so a sub-megabyte <style> could demand billions of
string pairs. Selectors now index one shared block, the sheets are capped at
20 000 selectors and 50 000 declarations, rules are bucketed by id/class/type
so an element checks only candidates, and matching work over all elements is
charged against a 50M-step budget that fails the import instead of doing it.
2026-10-22 20:28:49 +03:00
skylar taylor-barrick b55cb5bc15 Merge pull request #1363 from DWAA1660/fix/1237-comp-contains-cycles
Project: comp_contains walks precomps with a visited set, not recursion (#1237)
2026-10-22 07:52:56 -06:00
skylar taylor-barrick 571aebd854 Merge pull request #1957 from Anubhav-Rai/script-value-dims
script: setValue rejects an array of the wrong dimension (#1936)
2026-10-22 07:52:51 -06:00
skylar taylor-barrick 831e719fa2 Merge pull request #1855 from CharlesBaumer/fix/doc-path-stills-windows
Windows: two fixes so cargo xtask ci gets past clippy and the media tests
2026-10-22 07:52:46 -06:00
skylar taylor-barrick 70763d74c0 Merge pull request #1966 from Silvertree2010/fix/h930-deleting-the-first-vertex-of-a-c
Fix feather points when deleting first vertex of a closed mask path
2026-10-22 07:52:39 -06:00
skylar taylor-barrick be4d2d7bb8 Merge pull request #1992 from Silvertree2010/fix/h1142-sampleimage-panics-with-integer
Fix integer overflow in sampleImage for huge sample points
2026-10-22 07:52:31 -06:00
skylar taylor-barrick a9c2bfa6eb Merge pull request #1902 from Silvertree2010/fix/h704-hsv-to-rgb-returns-magenta-for-a
Fix hsv_to_rgb returning magenta for tiny negative hues
2026-10-22 07:52:17 -06:00
skylar taylor-barrick 1348621007 Merge pull request #1989 from Silvertree2010/fix/h1084-path-rect-panics-when-both-size
Fix panic in path::rect when both size components are NaN
2026-10-22 07:52:11 -06:00
Madhav Agarwal 3306bf2296 ui: Spacebar hand pans timeline rows vertically (#2083) 2026-10-22 19:15:34 +05:30
Madhav Agarwal 7fe0513894 engine: split layers above the original by default (#2083) 2026-10-22 19:13:36 +05:30
Madhav Agarwal 963f489eab engine: resolve effect match-name paths in prop_ref (#2064) 2026-10-22 18:47:59 +05:30
Madhav Agarwal 3f4ffdc0fc engine: a keyframe on the out point no longer warns (#2084) 2026-10-22 18:41:26 +05:30
BFlat 9a51a05e1b Merge pull request #2099 from storytold/readme/app-icon
README: the app icon above the title
2026-10-22 18:01:35 +07:00
bflatastic 7d68a74ffc README: the app icon above the title 2026-10-22 17:57:40 +07:00
Dylan M. Taylor f37f20ffd0 Merge pull request #2059 from storytold/sonar-fix/enforce-https
security: enforce HTTPS on curl downloads (SonarCloud S6506)
2026-10-21 20:13:41 -04:00
Dylan M. Taylor 7983396692 fix: JS reliability bugs (SonarCloud S1764, S9383, S4275)
- 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.
2026-10-21 17:20:35 -04:00
Dylan M. Taylor 887fe3a3a8 security: use crypto.randomUUID for temp file suffix (SonarCloud S2245)
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.
2026-10-21 17:14:27 -04:00
Dylan M. Taylor 5003351186 security: enforce HTTPS on curl downloads (SonarCloud S6506)
Add --proto '=https' to curl invocations so redirects cannot downgrade to
plaintext HTTP. Resolves SonarCloud S6506 (shell/docker/githubactions).
2026-10-21 17:06:49 -04:00
Dylan M. Taylor cee4c16c8a ci: add sonar-project.properties for CI-based analysis
Marks the project ineligible for SonarCloud Automatic Analysis, resolving the
CI-vs-automatic-analysis conflict so the SonarCloud workflow succeeds.
2026-10-21 16:00:34 -04:00
Dylan M. Taylor 714b6c29b0 ci: add SonarCloud scan via shared reusable workflow
Calls storytold/craft-common-actions/.github/workflows/sonarcloud.yml@main
with secrets: inherit. Adds SonarCloud badge to README where missing and
removes the redundant sonar-project.properties (config now passed by the
reusable workflow).
2026-10-21 15:46:55 -04:00
Brandon ThomasandClaude Opus 5.5 26b40199b7 Release 0.14.0
FreeBSD aarch64: build with 16 codegen units and no LTO in the emulated release VM, which ran past
the job's 5-hour limit with the single-unit thin-LTO profile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.14.0
2026-10-21 14:04:43 -04:00
Dylan M. Taylor ec2d51a17a ci: add SonarCloud scan workflow and config 2026-10-21 13:55:18 -04:00
arnav-hiwarkarandClaude Opus 5.5 506a5b327f Timeline: the disk-cache bar checks only the visible frames
- `Frames::disk_frames` takes a frame range instead of a frame count, still clamped to the existing 100,000-frame limit.
- The Timeline passes the visible range (`disk_bar_range`), including frames only partly in view, and clips the blue bar to the work-area row.
- Membership stays live: nothing is cached, so the bar updates as before when frames are written, evicted or promoted to RAM.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 21:47:18 +05:30
arnav-hiwarkarandClaude Opus 5.5 b48a77cf70 Preview: a zoom or resolution change evicts the other sizes' frames first
`crates/ui-egui/src/frames.rs`:

- The cache remembers the scale of the frame on screen (the active viewer's urgent request). Prefetch and passive viewers don't change it, so a second viewer at another zoom can't evict the active viewer's frames.
- RAM and GPU eviction take frames of other scales first, then fall back to the existing playhead-aware order.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 21:46:39 +05:30