From 887e9af84ffbfdfe1925164947af9892f9f2bbec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Wed, 11 Jan 2017 23:37:12 +0100 Subject: [PATCH] FEATURE: new 'max_image_megapixels' site setting --- app/models/upload.rb | 15 +++++++++++---- config/locales/server.en.yml | 3 +++ config/site_settings.yml | 4 ++++ spec/fixtures/images/huge.jpg | Bin 0 -> 557056 bytes spec/models/upload_spec.rb | 11 ++++++++++- 5 files changed, 28 insertions(+), 5 deletions(-) create mode 100644 spec/fixtures/images/huge.jpg diff --git a/app/models/upload.rb b/app/models/upload.rb index cf95ec5aa28..d6119abc13c 100644 --- a/app/models/upload.rb +++ b/app/models/upload.rb @@ -95,6 +95,8 @@ class Upload < ActiveRecord::Base # - image_type ("avatar", "profile_background", "card_background") # - is_attachment_for_group_message (boolean) def self.create_for(user_id, file, filename, filesize, options = {}) + upload = Upload.new + DistributedMutex.synchronize("upload_#{user_id}_#{filename}") do # do some work on images if FileHelper.is_image?(filename) && is_actual_image?(file) @@ -105,13 +107,19 @@ class Upload < ActiveRecord::Base File.write(file.path, doc.to_s) file.rewind else + # ensure image isn't huge + w, h = FastImage.size(file) || [0, 0] + if w * h >= SiteSetting.max_image_megapixels * 1_000_000 + upload.errors.add(:base, I18n.t("upload.images.larger_than_x_megapixels", max_image_megapixels: SiteSetting.max_image_megapixels)) + return upload + end + # fix orientation first fix_image_orientation(file.path) if should_optimize?(file.path) end # retrieve image info - image_info = FastImage.new(file) - w, h = *(image_info.try(:size) || [0, 0]) + w, h = FastImage.size(file) || [0, 0] # default size width, height = ImageSizer.resize(w, h) @@ -214,8 +222,7 @@ class Upload < ActiveRecord::Base # don't optimize GIFs or SVGs return false if path =~ /\.(gif|svg)$/i return true if path !~ /\.png$/i - image_info = FastImage.new(path) rescue nil - w, h = *(image_info.try(:size) || [0, 0]) + w, h = FastImage.size(path) || [0, 0] # don't optimize large PNGs w > 0 && h > 0 && w * h < LARGE_PNG_SIZE end diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 808beed3794..6468a337a07 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -1213,6 +1213,8 @@ en: authorized_extensions: "A list of file extensions allowed for upload (use '*' to enable all file types)" max_similar_results: "How many similar topics to show above the editor when composing a new topic. Comparison is based on title and body." + max_image_megapixels: "Maximum number of megapixels allowed for an image." + title_prettify: "Prevent common title typos and errors, including all caps, lowercase first character, multiple ! and ?, extra . at end, etc." topic_views_heat_low: "After this many views, the views field is slightly highlighted." @@ -2640,6 +2642,7 @@ en: too_large: "Sorry, the file you are trying to upload is too big (maximum size is %{max_size_kb}KB)." images: too_large: "Sorry, the image you are trying to upload is too big (maximum size is %{max_size_kb}KB), please resize it and try again." + larger_than_x_megapixels: "Sorry, the image you are trying to upload is too large (maximum dimension is %{max_image_megapixels}-megapixels), please resize it and try again." size_not_found: "Sorry, but we couldn't determine the size of the image. Maybe your image is corrupted?" avatar: diff --git a/config/site_settings.yml b/config/site_settings.yml index 4344fab89e5..ae668d64e45 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -699,6 +699,10 @@ files: max_attachment_size_kb: client: true default: 3072 + max_image_megapixels: + default: 40 + min: 5 + max: 100 authorized_extensions: client: true default: 'jpg|jpeg|png|gif' diff --git a/spec/fixtures/images/huge.jpg b/spec/fixtures/images/huge.jpg new file mode 100644 index 0000000000000000000000000000000000000000..25f2d5c6fb460b9ee97f1a777594df6feb295089 GIT binary patch literal 557056 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 b8W>FjqiJ9?4UDFN(KIlc21e7sAWQ=Q0pE|j literal 0 HcmV?d00001 diff --git a/spec/models/upload_spec.rb b/spec/models/upload_spec.rb index 6412be89428..4cf0ad64e05 100644 --- a/spec/models/upload_spec.rb +++ b/spec/models/upload_spec.rb @@ -17,6 +17,10 @@ describe Upload do let(:image_svg) { file_from_fixtures(image_svg_filename) } let(:image_svg_filesize) { File.size(image_svg) } + let(:huge_image_filename) { "huge.jpg" } + let(:huge_image) { file_from_fixtures(huge_image_filename) } + let(:huge_image_filesize) { File.size(huge_image) } + let(:attachment_path) { __FILE__ } let(:attachment) { File.new(attachment_path) } let(:attachment_filename) { File.basename(attachment_path) } @@ -55,6 +59,12 @@ describe Upload do expect(Upload.create_for(user_id, image, image_filename, image_filesize)).to eq(upload) end + it "ensures images isn't huge before processing it" do + Upload.expects(:fix_image_orientation).never + upload = Upload.create_for(user_id, huge_image, huge_image_filename, huge_image_filesize) + expect(upload.errors.size).to be > 0 + end + it "fix image orientation" do Upload.expects(:fix_image_orientation).with(image.path) Upload.create_for(user_id, image, image_filename, image_filesize) @@ -62,7 +72,6 @@ describe Upload do it "computes width & height for images" do ImageSizer.expects(:resize) - image.expects(:rewind).times(3) Upload.create_for(user_id, image, image_filename, image_filesize) end