diff options
author | Guilherme Mansur <guilherme.mansur@shopify.com> | 2019-04-23 16:11:10 -0400 |
---|---|---|
committer | Guilherme Mansur <guilherme.mansur@shopify.com> | 2019-04-24 07:59:12 -0400 |
commit | 6133dad86970951094bdb4a603bc80c4968a9667 (patch) | |
tree | c5823ae44fc4a88e39d52b1a9cfb672c27527aef /activestorage/lib/active_storage/analyzer | |
parent | df35204ed190086ec95b308ac1764571344005a6 (diff) | |
download | rails-6133dad86970951094bdb4a603bc80c4968a9667.tar.gz rails-6133dad86970951094bdb4a603bc80c4968a9667.tar.bz2 rails-6133dad86970951094bdb4a603bc80c4968a9667.zip |
Don't fail ImageAnalyzer on unsupported types
Fix: #36065
The IamgeAnalyzer passes a image to ImageMagick without checking if the
image is supported by ImageMagick. This patch checks that image is
supported and if not logs an error and returns an empty hash instead of
raising an error. This is the same error handling we do when we
encounter a LoadError when mini_magick is not installed.
Diffstat (limited to 'activestorage/lib/active_storage/analyzer')
-rw-r--r-- | activestorage/lib/active_storage/analyzer/image_analyzer.rb | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/activestorage/lib/active_storage/analyzer/image_analyzer.rb b/activestorage/lib/active_storage/analyzer/image_analyzer.rb index 3b39de91be..c8bc8fe953 100644 --- a/activestorage/lib/active_storage/analyzer/image_analyzer.rb +++ b/activestorage/lib/active_storage/analyzer/image_analyzer.rb @@ -25,17 +25,24 @@ module ActiveStorage { width: image.width, height: image.height } end end - rescue LoadError - logger.info "Skipping image analysis because the mini_magick gem isn't installed" - {} end private def read_image download_blob_to_tempfile do |file| require "mini_magick" - yield MiniMagick::Image.new(file.path) + image = MiniMagick::Image.new(file.path) + + if image.valid? + yield image + else + logger.info "Skipping image analysis because ImageMagick doesn't support the file" + {} + end end + rescue LoadError + logger.info "Skipping image analysis because the mini_magick gem isn't installed" + {} end def rotated_image?(image) |