From 769c2d2680c365cfafb35e27bc1d3b39deac118e Mon Sep 17 00:00:00 2001
From: Sumit Khanna <notify@battlepenguin.com>
Date: Thu, 13 Dec 2018 22:07:21 -0600
Subject: [PATCH] Error message for avatar image that's too large. #9204
 (#9518)

* Error message for avatar image that's too large. #9204

* Code climate/formatting

* Removed avatar error message

* Moved valid image dimentions check to update service

* removed unnescessary begin block

* code climate formatting

* code climate indent fix
---
 app/services/update_account_service.rb        |   3 +++
 .../settings/profiles_controller_spec.rb      |  22 ++++++++++++++++++
 spec/fixtures/files/4096x4097.png             | Bin 0 -> 58859 bytes
 3 files changed, 25 insertions(+)
 create mode 100644 spec/fixtures/files/4096x4097.png

diff --git a/app/services/update_account_service.rb b/app/services/update_account_service.rb
index 36665177db..01756a73d4 100644
--- a/app/services/update_account_service.rb
+++ b/app/services/update_account_service.rb
@@ -12,6 +12,9 @@ class UpdateAccountService < BaseService
       check_links(account)
       process_hashtags(account)
     end
+  rescue Mastodon::DimensionsValidationError => de
+    account.errors.add(:avatar, de.message)
+    false
   end
 
   private
diff --git a/spec/controllers/settings/profiles_controller_spec.rb b/spec/controllers/settings/profiles_controller_spec.rb
index a453200af6..5b1fe3acad 100644
--- a/spec/controllers/settings/profiles_controller_spec.rb
+++ b/spec/controllers/settings/profiles_controller_spec.rb
@@ -26,4 +26,26 @@ RSpec.describe Settings::ProfilesController, type: :controller do
       expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id)
     end
   end
+
+  describe 'PUT #update with new profile image' do
+    it 'updates profile image' do
+      allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async)
+      account = Fabricate(:account, user: @user, display_name: 'AvatarTest')
+      expect(account.avatar.instance.avatar_file_name).to be_nil
+
+      put :update, params: { account: { avatar: fixture_file_upload('files/avatar.gif', 'image/gif') } }
+      expect(response).to redirect_to(settings_profile_path)
+      expect(account.reload.avatar.instance.avatar_file_name).not_to be_nil
+      expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id)
+    end
+  end
+
+  describe 'PUT #update with oversized image' do
+    it 'gives the user an error message' do
+      allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async)
+      account = Fabricate(:account, user: @user, display_name: 'AvatarTest')
+      put :update, params: { account: { avatar: fixture_file_upload('files/4096x4097.png', 'image/png') } }
+      expect(response.body).to include('images are not supported')
+    end
+  end
 end
diff --git a/spec/fixtures/files/4096x4097.png b/spec/fixtures/files/4096x4097.png
new file mode 100644
index 0000000000000000000000000000000000000000..d1110cc2df0a299b47e9ad088ea61ccfd428cddb
GIT binary patch
literal 58859
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

literal 0
HcmV?d00001

-- 
GitLab