What's Changed
- i18n test: leave installed right-to-left faces out of the Japanese check by @FredApps in #2576
- CI: run cargo xtask ci on pull requests and pushes to main by @FredApps in #2563
- M8: Fujifilm F-Log, F-Log2 and F-Log2 C colour spaces (F-Gamut / F-Gamut C) by @melchiaaronzedek in #2819
- Require session-token authentication for desktop control requests by @coderabbitai[bot] in #2764
- Reject signed fields inside multi-field timecodes by @Silvertree2010 in #2636
- Keep WebVTT cues whose identifier starts with NOTE by @Silvertree2010 in #2629
- Escape tab/newline/CR in XML attribute values by @Silvertree2010 in #2586
- Fix false overlaps for empty time ranges by @Lucenx9 in #2601
- Reject signed fields in SCC timecode parser by @Silvertree2010 in #2630
- #2679: effects.setParam refuses values outside the parameter's range by @Felix-Helleckes in #2709
- Reject non-hex characters in colour hex parsing by @Silvertree2010 in #2600
- fix: harden saves, CLI file I/O and AV1 tooling (SonarCloud security/reliability) by @dylanmtaylor in #2983
- Regression tests for #130, #703, #1084 and #1309 by @skylartaylor in #2861
- Scroll the timeline clip menu when it is taller than the screen (#2852) by @HEOJUNFO in #2862
- security(interchange): bound imported track indices by @earlvanze in #2910
- security(text): bound text and phonemizer work by @earlvanze in #2870
- Raise a loaded project's next_id past the ids already in it by @marcoarnulfo in #2864
- security(proxies): reserve outputs atomically by @earlvanze in #2922
- security(hevc): validate slice payload before allocation by @earlvanze in #2939
- security(codecs): avoid quadratic MPEG timestamp lookup by @earlvanze in #2883
- security(platform): bound hybrid replay output by @earlvanze in #2938
- security(isobmff): bound metadata expansion by @earlvanze in #2933
- security(matroska): compose stripped private data once by @earlvanze in #2911
- security(h264enc): cache second-pass plan sums by @earlvanze in #2906
- security(bench): isolate temporary export outputs by @earlvanze in #2928
- security(engine): bound graphic template thumbnails by @earlvanze in #2887
- fix(control): bound synthetic pointer events by @earlvanze in #2868
- security(tts): make malformed-token scanning linear by @earlvanze in #2871
- security(ui): bound export folder elision work by @earlvanze in #2902
- security(text): keep font scans within configured folders by @earlvanze in #2876
- codecs: walk open-GOP leading pictures back in a loop, not by recursion by @mercuryVM in #2920
- security(opus): validate direct multistream headers by @earlvanze in #2905
- security(text): bound transformed glyph masks by @earlvanze in #2900
- security(avi): bound OpenDML index work by @earlvanze in #2925
- Project panel: a clip dropped on New Item makes a sequence from it by @marcoarnulfo in #2940
- security(mxf): share resolved descriptor metadata by @earlvanze in #2949
- security(render): bound expanded frame plans by @earlvanze in #2942
- security(engine): confine stored media filesystem access by @earlvanze in #2869
- ci(deps): bump Swatinem/rust-cache from 2.9.2 to 2.9.3 in the actions group by @dependabot[bot] in #2971
- security(dnx): validate fields before frame allocation by @earlvanze in #2914
- security(mpeg2v): index picture extensions linearly by @earlvanze in #2904
- security(apv): validate tile payload before allocation by @earlvanze in #2916
- security(project): validate graphic templates in linear time by @earlvanze in #2886
- security(videotoolbox): bound reorder buffering by @earlvanze in #2908
- fix(interchange): sanitize embedded-audio output folder names by @earlvanze in #2956
- security(codecs): deduplicate hardware parameter-set checks by @earlvanze in #2890
- security(av1): require unique complete tile coverage by @earlvanze in #2917
- security(automation): isolate bridge screenshots by @earlvanze in #2919
- security(export): confine metadata-derived names by @earlvanze in #2903
- security(bitstream): cache RBSP stop-bit lookup by @earlvanze in #2880
- fix(bitstream): reject invalid length-prefixed NAL widths by @earlvanze in #2953
- security(vp8): bound frame allocation by @earlvanze in #2929
- security(vp9): bound frame allocation by @earlvanze in #2930
- security(prores): bound decoded plane storage by @earlvanze in #2931
- security(exr): validate chunks before frame allocation by @earlvanze in #2913
- Use chrono instead of hand-rolled UTC conversion by @dylanmtaylor in #2662
- packaging: use [[ for bash conditional tests (SonarCloud S7688) by @dylanmtaylor in https://github.com//pull/3003
- tools: quit the super-linear regex scans in the spec table extractors (SonarCloud S8786) by @dylanmtaylor in #3007
- CI: xtask ci in the dev profile, one test binary per crate, nextest by @aiongg in #2860
- fix(engine): resolve stored media paths with craft-docpath's resolve_absolute by @aiongg in #2609
- Fonts: pin craft-fonts bfcbf71; CRAFT_FONTS_REQUIRED fails without CRAFT_FONTS_DIR by @aiongg in #2646
- Packaging: pin the signing client and appimagetool, and check their hashes by @aiongg in #2610
- CI: shared gate workflow; FreeBSD nightly and on release by @aiongg in #2937
- release: the git-sources gate moves into craft-common-actions (storytold/craft-common-actions#78) by @dylanmtaylor in #3014
- i18n: missing translations never fail; xtask ci prints the missing list by @aiongg in #3012
- ci(sonar): stop cancelling main-branch runs so coverage is published by @dylanmtaylor in #3026
- Build: use craft-media for bitstream, isobmff and matroska by @aiongg in #2435
- fix(media): validate Radiance HDR data before frame allocation by @earlvanze in #2957
- fix(captions): reject deeply nested TTML before parsing by @earlvanze in #2955
- security(dng): bound tile decoding and IFD traversal by @earlvanze in #2952
- security(ogg): bound recovery scanning by @earlvanze in #2950
- security(mxf): bound recovery and PCM edit units by @earlvanze in #2948
- security(omf): bound metadata expansion and traversal by @earlvanze in #2946
- security(export): bound image overlay decoding by @earlvanze in #2944
- security(render): bound burn-in text rasters by @earlvanze in #2943
- security(captions): bound burn-in overlays by @earlvanze in #2941
- security(mpeg2v): bound access-unit output by @earlvanze in #2935
- security(aaf): bound materialized streams by @earlvanze in #2934
- security(avi): bound framed audio scans by @earlvanze in #2932
- security(remix): bound analysis resources by @earlvanze in #2926
- security(tts): verify Kokoro checkpoint before parsing by @earlvanze in #2918
- security(h264): bound hostile picture allocation by @earlvanze in #2915
- security(render): bound embedded LUT resolution by @earlvanze in #2901
- security(codecs): cap GOP cache frame retention by @earlvanze in #2899
- security(mpegts): avoid repeated audio buffer drains by @earlvanze in #2898
- security(captions): bound TTML speaker labels by @earlvanze in #2897
- security(captions): bound TTML inline span output by @earlvanze in #2896
- security(h264): enforce long-term DPB limits by @earlvanze in #2894
- security(engine): validate imported sequence settings by @earlvanze in #2892
- security(speech): bound diarization clustering work by @earlvanze in #2891
- security(project): scan malformed caption markup once by @earlvanze in #2885
- security(hevc): bound specification equation parsing by @earlvanze in #2884
- security(format): preserve permissions on atomic replacement by @earlvanze in #2881
- security(captions): bound malformed text processing by @earlvanze in #2879
- security(frame): bound decimation sampling work by @earlvanze in #2878
- fix(speech): contain and verify downloaded model artifacts by @earlvanze in #2867
- fix(speech): bound Whisper model metadata allocations by @earlvanze in #2866
- security(interchange): harden FCPXML cycle detection, XML DTD entities, and imported formats by @dylanmtaylor in #3079
- security: harden developer tools, scripts, and testkit against hostile input by @dylanmtaylor in #3078
- security(codecs): validate VP9 empty tiles and AV1 film grain scaling points by @dylanmtaylor in #3081
- security(engine): require local trust for ingest destinations by @dylanmtaylor in #3083
- security(audio): bound sequence sample rates and AAF/OMF export channel buffers by @dylanmtaylor in #3082
- Import: numbered embedded-audio names keep the path's separators on Windows by @dotCooCoo in #2988
- Don't treat pieces with different settings as through edits by @Silvertree2010 in #3072
- Keep WebVTT cues whose identifier is STYLE or REGION by @Silvertree2010 in #3088
- Export: say why H.265 and AV1 are unavailable without a hardware encoder by @admbe in #3062
- Only materialise kept frames when filling an H.264 frame_num gap by @Silvertree2010 in #2995
- fix(control): release idle connection slots after socket timeouts by @jahvari in #2989
- HEVC: share gray picture backing across unavailable references by @jahvari in #2992
- Recovery: retain candidates after a failed discard by @jahvari in #2993
- ProRes: write final alpha singleton run codes by @skylartaylor in #2991
- control: preserve MCP pointer input defaults (#2784) by @thecyberbutler in #3004
- Audio meters drop to silence right after Stop by @texjer in #3011
- Timeline: the Razor tool cuts captions by @texjer in #3039
- Timeline: Option-drag duplicates captions by @texjer in #3040
- Edit: Copy, Cut and Paste work on captions selected in the Timeline by @texjer in #3041
- Text panel: the Captions list follows the playhead by @texjer in #3042
- History: the panel menu deletes redoable actions and clears the history by @dotCooCoo in #3075
- media: import animated WebP as a clip by @thiscallnet in #3038
- Timeline: the work area bar, with Set Work Area Bar In and Out Point by @dotCooCoo in #3087
- relink tests: no unused index_folder import on Windows by @echelon in #3113
- Merge 6 open PRs (tested batch) by @aiongg in #3240
- effect controls: drag a transition's cut to move it with the transition by @dotCooCoo in #3115
- Timeline: a Rolling Edit drag stops at the roll's limits by @dotCooCoo in #3155
- Timeline: Show Duplicate Frame Markers marks media frames used more than once by @dotCooCoo in #3212
- Audio Track Mixer: Show/Hide Tracks and Meter Input(s) Only are commands with Premiere's keys by @dotCooCoo in #3227
- Monitors: Transparency Grid shows the picture's transparent areas by @dotCooCoo in #3233
- Timeline: a transition stays within its clips after a regular trim by @dotCooCoo in #3236
- Follow-ups to #3240: alpha upload table, duplicate markers off the UI thread, cut drag over the clips by @aiongg in #3243
New Contributors
- @melchiaaronzedek made their first contribution in #2819
- @coderabbitai[bot] made their first contribution in #2764
- @Lucenx9 made their first contribution in #2601
- @mercuryVM made their first contribution in #2920
- @dependabot[bot] made their first contribution in #2971
- @aiongg made their first contribution in #2860
- @admbe made their first contribution in #3062
- @texjer made their first contribution in #3011
- @thiscallnet made their first contribution in #3038
Full Changelog: v0.12.0...v0.13.0