Automated release: version and notes generated from pull requests merged since 3.6.0.
Security
- A DASH manifest or an IMF composition playlist given as media is refused, whatever it is
called. The playlist guard knew HLS and ffconcat by name and first bytes only, so a DASH
manifest saved asclip.mp4(with adash:profileor the 3GPPPSS:profile:DASH1) made every
tool follow itsBaseURL: to another local file, which
the output then contained (reported completed and verified), or over HTTP, which FFmpeg 6.1's
-protocol_whitelist filedid not stop. Both are now told the way ffmpeg's own probes tell
them, by content, and refused asmedia_path_is_playlist. subfile,<options>:<url>is refused as a URL. ffmpeg opens it through the subfile protocol;
the URL guard stopped reading the scheme at the comma and let it through, so the guards
described the named file while ffmpeg read another.- A path with a line break is refused where it would go into a concat list (
loop.py,
join.py --copy,sequence.py, multi-part cuts):media_path_has_line_break. Each line of a
concat list is a directive, so such a name added entries and pulled a file named nowhere on the
command line into the output. - The hidden temp files in the output directory are created exclusively. The staging temp of
an--overwriterun,place_output()'s temp,export.py's key/fill temp andbatch.py's
cross-filesystem delivery temp had fixed names and were opened through
whatever was already there, a planted symlink included: the encode was written into the link's
target and the output left as a symlink to it. A copy the tool makes itself is written
through the descriptor that created the temp, never by reopening its name, and a directory that
refuses the exclusive create fails the run (output_dir_not_writable) instead of handing ffmpeg
a name nobody reserved. A lock's default audit log is opened without following a symlink. render.pyrefuses an output that is any file the project names. The guard compared the
output with the clips and overlay videos only, so with--overwritea project whose output was
its own music bed, brand file (or the brand's logo or font), overlay image or font, caption
file, beat source, or the project file itself replaced it. A--stop-afterpreview, which
never writes the output, is not refused.audiogram.imageand an overlay'sfont_fileare now passed
to their stages resolved against the project file, as every other project path is, instead of
against the caller's working directory.
Fixed
- A colour given to
caption.py,graphics.pyor a brand must be six hex digits. The check
was on the length only: a six-letter name such asyellowororangedrew black text and was
reported verified, and a quote or comma reached the filter graph and failed askind: ffmpeg.
It is now akind: inputrefusal. - fix(security): refuse DASH/IMF manifests and subfile URLs, refuse line breaks in concat paths, never write temps through a planted link (#456)
What's Changed
- fix(security): refuse DASH/IMF manifests and subfile URLs, refuse line breaks in concat paths, never write temps through a planted link by @kajisho5 in #456
Full Changelog: v3.6.0...v3.6.1