From f2257069b21892f8bbd57595efb474cdd1020bbc Mon Sep 17 00:00:00 2001
From: Christian Schmidt <github@chsc.dk>
Date: Tue, 1 Aug 2023 19:34:11 +0200
Subject: [PATCH] Fix AVIF attachments (#26264)

---
 app/models/media_attachment.rb                |   2 +-
 config/imagemagick/policy.xml                 |   2 +-
 .../media_type_spoof_detector_extensions.rb   |   4 +-
 spec/fixtures/files/600x400.avif              | Bin 0 -> 7742 bytes
 spec/fixtures/files/600x400.heic              | Bin 0 -> 9671 bytes
 spec/fixtures/files/600x400.jpeg              | Bin 0 -> 21442 bytes
 spec/fixtures/files/600x400.png               | Bin 0 -> 14127 bytes
 spec/fixtures/files/600x400.webp              | Bin 0 -> 9026 bytes
 spec/models/media_attachment_spec.rb          | 115 +++++++++++++-----
 9 files changed, 87 insertions(+), 36 deletions(-)
 create mode 100644 spec/fixtures/files/600x400.avif
 create mode 100644 spec/fixtures/files/600x400.heic
 create mode 100644 spec/fixtures/files/600x400.jpeg
 create mode 100644 spec/fixtures/files/600x400.png
 create mode 100644 spec/fixtures/files/600x400.webp

diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb
index 8689a956e..7474b5653 100644
--- a/app/models/media_attachment.rb
+++ b/app/models/media_attachment.rb
@@ -57,7 +57,7 @@ class MediaAttachment < ApplicationRecord
   ).freeze
 
   IMAGE_MIME_TYPES             = %w(image/jpeg image/png image/gif image/heic image/heif image/webp image/avif).freeze
-  IMAGE_CONVERTIBLE_MIME_TYPES = %w(image/heic image/heif).freeze
+  IMAGE_CONVERTIBLE_MIME_TYPES = %w(image/heic image/heif image/avif).freeze
   VIDEO_MIME_TYPES             = %w(video/webm video/mp4 video/quicktime video/ogg).freeze
   VIDEO_CONVERTIBLE_MIME_TYPES = %w(video/webm video/quicktime).freeze
   AUDIO_MIME_TYPES             = %w(audio/wave audio/wav audio/x-wav audio/x-pn-wave audio/vnd.wave audio/ogg audio/vorbis audio/mpeg audio/mp3 audio/webm audio/flac audio/aac audio/m4a audio/x-m4a audio/mp4 audio/3gpp video/x-ms-asf).freeze
diff --git a/config/imagemagick/policy.xml b/config/imagemagick/policy.xml
index 1052476b3..e2aa202f2 100644
--- a/config/imagemagick/policy.xml
+++ b/config/imagemagick/policy.xml
@@ -22,6 +22,6 @@
 
   <!-- Disallow any coder by default, and only enable ones required by Mastodon -->
   <policy domain="coder" rights="none" pattern="*" />
-  <policy domain="coder" rights="read | write" pattern="{PNG,JPEG,GIF,HEIC,WEBP}" />
+  <policy domain="coder" rights="read | write" pattern="{JPEG,PNG,GIF,WEBP,HEIC,AVIF}" />
   <policy domain="coder" rights="write" pattern="{HISTOGRAM,RGB,INFO}" />
 </policymap>
diff --git a/lib/paperclip/media_type_spoof_detector_extensions.rb b/lib/paperclip/media_type_spoof_detector_extensions.rb
index a406ef312..c8868d5e9 100644
--- a/lib/paperclip/media_type_spoof_detector_extensions.rb
+++ b/lib/paperclip/media_type_spoof_detector_extensions.rb
@@ -2,13 +2,15 @@
 
 module Paperclip
   module MediaTypeSpoofDetectorExtensions
+    MARCEL_MIME_TYPES = %w(audio/mpeg image/avif).freeze
+
     def calculated_content_type
       return @calculated_content_type if defined?(@calculated_content_type)
 
       @calculated_content_type = type_from_file_command.chomp
 
       # The `file` command fails to recognize some MP3 files as such
-      @calculated_content_type = type_from_marcel if @calculated_content_type == 'application/octet-stream' && type_from_marcel == 'audio/mpeg'
+      @calculated_content_type = type_from_marcel if @calculated_content_type == 'application/octet-stream' && type_from_marcel.in?(MARCEL_MIME_TYPES)
       @calculated_content_type
     end
 
diff --git a/spec/fixtures/files/600x400.avif b/spec/fixtures/files/600x400.avif
new file mode 100644
index 0000000000000000000000000000000000000000..f306942dbee737c381c69dbfb69782de3a688b3b
GIT binary patch
literal 7742
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
bU@I%fNQ74-m26$}I2!49ACq7<Xt(_rBOt-M

literal 0
HcmV?d00001

diff --git a/spec/fixtures/files/600x400.heic b/spec/fixtures/files/600x400.heic
new file mode 100644
index 0000000000000000000000000000000000000000..1add5832a8370702f1df496503ac294c870fca7d
GIT binary patch
literal 9671
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

literal 0
HcmV?d00001

diff --git a/spec/fixtures/files/600x400.jpeg b/spec/fixtures/files/600x400.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..1c20bea515d236fa12c71f7a606f0de062bfc93f
GIT binary patch
literal 21442
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
F|Jf;WyQlyF

literal 0
HcmV?d00001

diff --git a/spec/fixtures/files/600x400.png b/spec/fixtures/files/600x400.png
new file mode 100644
index 0000000000000000000000000000000000000000..3b8a2dee352101066c9d59e65f141847043f6932
GIT binary patch
literal 14127
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

literal 0
HcmV?d00001

diff --git a/spec/fixtures/files/600x400.webp b/spec/fixtures/files/600x400.webp
new file mode 100644
index 0000000000000000000000000000000000000000..56fa5151c2dfbae7ab980f70f74e42090e0341fe
GIT binary patch
literal 9026
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
aa7UKncL9_c;@mPXk0X!-RR2E80R9i0cfmsd

literal 0
HcmV?d00001

diff --git a/spec/models/media_attachment_spec.rb b/spec/models/media_attachment_spec.rb
index 90e4f2f47..d142875aa 100644
--- a/spec/models/media_attachment_spec.rb
+++ b/spec/models/media_attachment_spec.rb
@@ -84,7 +84,87 @@ RSpec.describe MediaAttachment, paperclip_processing: true do
     end
   end
 
-  describe 'animated gif conversion' do
+  shared_examples 'static 600x400 image' do |content_type, extension|
+    after do
+      media.destroy
+    end
+
+    it 'saves media attachment' do
+      expect(media.persisted?).to be true
+      expect(media.file).to_not be_nil
+    end
+
+    it 'completes processing' do
+      expect(media.processing_complete?).to be true
+    end
+
+    it 'sets type' do
+      expect(media.type).to eq 'image'
+    end
+
+    it 'sets content type' do
+      expect(media.file_content_type).to eq content_type
+    end
+
+    it 'sets file extension' do
+      expect(media.file_file_name).to end_with extension
+    end
+
+    it 'strips original file name' do
+      expect(media.file_file_name).to_not start_with '600x400'
+    end
+
+    it 'sets meta for original' do
+      expect(media.file.meta['original']['width']).to eq 600
+      expect(media.file.meta['original']['height']).to eq 400
+      expect(media.file.meta['original']['aspect']).to eq 1.5
+    end
+
+    it 'sets meta for thumbnail' do
+      expect(media.file.meta['small']['width']).to eq 588
+      expect(media.file.meta['small']['height']).to eq 392
+      expect(media.file.meta['small']['aspect']).to eq 1.5
+    end
+  end
+
+  describe 'jpeg' do
+    let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('600x400.jpeg')) }
+
+    it_behaves_like 'static 600x400 image', 'image/jpeg', '.jpeg'
+  end
+
+  describe 'png' do
+    let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('600x400.png')) }
+
+    it_behaves_like 'static 600x400 image', 'image/png', '.png'
+  end
+
+  describe 'webp' do
+    let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('600x400.webp')) }
+
+    it_behaves_like 'static 600x400 image', 'image/webp', '.webp'
+  end
+
+  describe 'avif' do
+    let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('600x400.avif')) }
+
+    it_behaves_like 'static 600x400 image', 'image/jpeg', '.jpeg'
+  end
+
+  describe 'heic' do
+    let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('600x400.heic')) }
+
+    it_behaves_like 'static 600x400 image', 'image/jpeg', '.jpeg'
+  end
+
+  describe 'base64-encoded image' do
+    let(:base64_attachment) { "data:image/jpeg;base64,#{Base64.encode64(attachment_fixture('600x400.jpeg').read)}" }
+    let(:media) { described_class.create(account: Fabricate(:account), file: base64_attachment) }
+
+    it_behaves_like 'static 600x400 image', 'image/jpeg', '.jpeg'
+  end
+
+  describe 'animated gif' do
     let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('avatar.gif')) }
 
     it 'sets type to gifv' do
@@ -101,7 +181,7 @@ RSpec.describe MediaAttachment, paperclip_processing: true do
     end
   end
 
-  describe 'non-animated gif non-conversion' do
+  describe 'static gif' do
     fixtures = [
       { filename: 'attachment.gif', width: 600, height: 400, aspect: 1.5 },
       { filename: 'mini-static.gif', width: 32, height: 32, aspect: 1.0 },
@@ -172,37 +252,6 @@ RSpec.describe MediaAttachment, paperclip_processing: true do
     end
   end
 
-  describe 'jpeg' do
-    let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('attachment.jpg')) }
-
-    it 'sets meta for different style' do
-      expect(media.file.meta['original']['width']).to eq 600
-      expect(media.file.meta['original']['height']).to eq 400
-      expect(media.file.meta['original']['aspect']).to eq 1.5
-      expect(media.file.meta['small']['width']).to eq 588
-      expect(media.file.meta['small']['height']).to eq 392
-      expect(media.file.meta['small']['aspect']).to eq 1.5
-    end
-
-    it 'gives the file a random name' do
-      expect(media.file_file_name).to_not eq 'attachment.jpg'
-    end
-  end
-
-  describe 'base64-encoded jpeg' do
-    let(:base64_attachment) { "data:image/jpeg;base64,#{Base64.encode64(attachment_fixture('attachment.jpg').read)}" }
-    let(:media) { described_class.create(account: Fabricate(:account), file: base64_attachment) }
-
-    it 'saves media attachment' do
-      expect(media.persisted?).to be true
-      expect(media.file).to_not be_nil
-    end
-
-    it 'gives the file a file name' do
-      expect(media.file_file_name).to_not be_blank
-    end
-  end
-
   it 'is invalid without file' do
     media = described_class.new(account: Fabricate(:account))
     expect(media.valid?).to be false