diff options
| author | lain <lain@soykaf.club> | 2025-01-30 09:19:59 +0000 | 
|---|---|---|
| committer | lain <lain@soykaf.club> | 2025-01-30 09:19:59 +0000 | 
| commit | a1f4da7ae2ed5d063b3d146f223a96b9db9bb505 (patch) | |
| tree | bc24eed03d7b5c914d65c9ff5d685d2fa6554592 | |
| parent | 011d70df792fff9ecae8cc92728b45c026fe9be3 (diff) | |
| parent | ebd827891050bf772b0d02a459db00360d53feb8 (diff) | |
| download | pleroma-a1f4da7ae2ed5d063b3d146f223a96b9db9bb505.tar.gz pleroma-a1f4da7ae2ed5d063b3d146f223a96b9db9bb505.zip  | |
Merge branch '3355-vips-blurhash' into 'develop'
AnalyzeMetadata: Don't crash on grayscale image blurhash
Closes #3355
See merge request pleroma/pleroma!4319
| -rw-r--r-- | changelog.d/vips-blurhash.fix | 1 | ||||
| -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 | 
4 files changed, 22 insertions, 3 deletions
diff --git a/changelog.d/vips-blurhash.fix b/changelog.d/vips-blurhash.fix new file mode 100644 index 000000000..9e8951b15 --- /dev/null +++ b/changelog.d/vips-blurhash.fix @@ -0,0 +1 @@ +Fix blurhash generation crashes 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",  | 
