Skip to content

OpenCut v1.5.1 — Batches 28+29 Audit Fixes

Choose a tag to compare

@SysAdminDoc SysAdminDoc released this 24 Mar 15:08

v1.5.1 — Batches 28+29 Audit Fixes (50+ bugs fixed)

Critical: UXP Panel Was Completely Non-Functional (5 P0 bugs)

  • CSRF header name mismatch (X-CSRF-Token vs X-OpenCut-Token)
  • CSRF token fetched from non-existent /csrf endpoint
  • Job polling hit /jobs/{id} instead of /status/{id}
  • Job cancel used DELETE instead of POST /cancel/{id}
  • LLM settings called non-existent BackendClient.fetch()

Route Crash Fixes (Batch 29)

  • auto-zoom: probe.get() on non-dict crashed apply_to_file, wrong subprocess import alias, keyframe result was dict not list
  • loudness-match: batch_loudness_match returns list not dict — entire result was silently discarded
  • settings: 6 POST routes silently accepted malformed JSON (silent=True -> force=True)
  • chapters: missing LLM provider allowlist, segments validation
  • multicam: segments validation, 50 MB file size cap

Core Module Fixes (Batch 28)

  • chapter_gen -- Non-greedy JSON regex truncated multi-element LLM arrays
  • nlp_command -- Route allowlist on LLM output, word-boundary keyword matching
  • color_match -- VideoWriter.isOpened(), consolidated run_ffmpeg, channel label fix
  • auto_zoom -- VideoCapture try/finally, easing was a complete no-op
  • loudness_match -- Pass 1 returncode, measured value validation, target clamp
  • footage_search -- Windows file lock non-blocking -> blocking + explicit unlock
  • deliverables -- round(fps) for 29.97fps timecodes

CLI Crash Fixes

  • chapters: dict attribute access crash
  • repeat-detect: dict treated as list
  • search index/query: imported from non-existent module

Security

  • MCP server: files[] array path traversal validation, UNC path rejection
  • checks.py: consistent bool returns (Tuple was always truthy)
  • user_data.py: removed lock eviction thread-safety bug