diff options
author | Lain Soykaf <lain@lain.com> | 2025-01-30 12:18:20 +0400 |
---|---|---|
committer | Lain Soykaf <lain@lain.com> | 2025-01-30 12:18:20 +0400 |
commit | 81ab906466f8e46ac2a16011faa8d0c2bd009957 (patch) | |
tree | 4d8205d7230d4f94ef36929c1cb0c36736777204 | |
parent | 011d70df792fff9ecae8cc92728b45c026fe9be3 (diff) | |
download | pleroma-81ab906466f8e46ac2a16011faa8d0c2bd009957.tar.gz pleroma-81ab906466f8e46ac2a16011faa8d0c2bd009957.zip |
AnalyzeMetadata: Don't crash on grayscale image blurhash
-rw-r--r-- | lib/pleroma/upload/filter/analyze_metadata.ex | 10 | ||||
-rw-r--r-- | test/fixtures/break_analyze.png | bin | 0 -> 368176 bytes | |||
-rw-r--r-- | test/pleroma/upload/filter/analyze_metadata_test.exs | 14 |
3 files changed, 21 insertions, 3 deletions
diff --git a/lib/pleroma/upload/filter/analyze_metadata.ex b/lib/pleroma/upload/filter/analyze_metadata.ex index 7ee643277..a8480bf36 100644 --- a/lib/pleroma/upload/filter/analyze_metadata.ex +++ b/lib/pleroma/upload/filter/analyze_metadata.ex @@ -90,9 +90,13 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadata do {:ok, rgb} = if Image.has_alpha?(resized_image) do # remove alpha channel - resized_image - |> Operation.extract_band!(0, n: 3) - |> Image.write_to_binary() + case Operation.extract_band(resized_image, 0, n: 3) do + {:ok, data} -> + Image.write_to_binary(data) + + _ -> + Image.write_to_binary(resized_image) + end else Image.write_to_binary(resized_image) end diff --git a/test/fixtures/break_analyze.png b/test/fixtures/break_analyze.png Binary files differnew file mode 100644 index 000000000..b5e91b08a --- /dev/null +++ b/test/fixtures/break_analyze.png diff --git a/test/pleroma/upload/filter/analyze_metadata_test.exs b/test/pleroma/upload/filter/analyze_metadata_test.exs index e4ac673b2..6e1f2afaf 100644 --- a/test/pleroma/upload/filter/analyze_metadata_test.exs +++ b/test/pleroma/upload/filter/analyze_metadata_test.exs @@ -34,6 +34,20 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadataTest do assert meta.blurhash == "eXJi-E:SwCEm5rCmn$+YWYn+15K#5A$xxCi{SiV]s*W:Efa#s.jE-T" end + test "it gets dimensions for grayscale images" do + upload = %Pleroma.Upload{ + name: "break_analyze.png", + content_type: "image/png", + path: Path.absname("test/fixtures/break_analyze.png"), + tempfile: Path.absname("test/fixtures/break_analyze.png") + } + + {:ok, :filtered, meta} = AnalyzeMetadata.filter(upload) + + assert %{width: 1410, height: 2048} = meta + assert is_nil(meta.blurhash) + end + test "adds the dimensions for videos" do upload = %Pleroma.Upload{ name: "coolvideo.mp4", |