commit: 50edef5bc13d0407aaaf26c951ce7a4a8cd4db58
parent 8ac4458630026387a5394b427daa409b0d2667ba
Author: Mark Felder <feld@feld.me>
Date: Fri, 29 Dec 2023 14:12:44 -0500
Change QTFastStart to recover gracefully if it encounters an error during bitstring matching
This fixes issues with internal errors when trying to serve the video
Diffstat:
2 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/changelog.d/qtfaststart.fix b/changelog.d/qtfaststart.fix
@@ -0,0 +1 @@
+MediaProxy Preview failures prevented when encountering certain video files
diff --git a/lib/pleroma/helpers/qt_fast_start.ex b/lib/pleroma/helpers/qt_fast_start.ex
@@ -40,16 +40,21 @@ defmodule Pleroma.Helpers.QtFastStart do
got_mdat,
acc
) do
- full_size = (size - 8) * 8
- <<data::bits-size(full_size), rest::bits>> = rest
-
- acc = [
- {fourcc, pos, pos + size, size,
- <<size::integer-big-size(32), fourcc::bits-size(32), data::bits>>}
- | acc
- ]
-
- fix(rest, pos + size, got_moov || fourcc == "moov", got_mdat || fourcc == "mdat", acc)
+ try do
+ full_size = (size - 8) * 8
+ <<data::bits-size(full_size), rest::bits>> = rest
+
+ acc = [
+ {fourcc, pos, pos + size, size,
+ <<size::integer-big-size(32), fourcc::bits-size(32), data::bits>>}
+ | acc
+ ]
+
+ fix(rest, pos + size, got_moov || fourcc == "moov", got_mdat || fourcc == "mdat", acc)
+ rescue
+ _ ->
+ :abort
+ end
end
defp fix(<<>>, _pos, _, _, acc) do