From a6994cd4d78cc752b26403bcb402ab88d55cf498 Mon Sep 17 00:00:00 2001 From: evazion Date: Mon, 22 Jun 2020 16:59:28 -0500 Subject: [PATCH] media file: fix exception on empty files. This may happen if a user uploads from a source that returns an error HTTP response with no data. --- app/logical/danbooru/http.rb | 2 -- app/logical/media_file.rb | 2 ++ test/files/test-empty.bin | 0 test/unit/media_file_test.rb | 4 ++++ 4 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 test/files/test-empty.bin diff --git a/app/logical/danbooru/http.rb b/app/logical/danbooru/http.rb index 6bbc7db87..17f45ec21 100644 --- a/app/logical/danbooru/http.rb +++ b/app/logical/danbooru/http.rb @@ -7,7 +7,6 @@ require "danbooru/http/session" module Danbooru class Http - class DownloadError < StandardError; end class FileTooLargeError < StandardError; end DEFAULT_TIMEOUT = 10 @@ -111,7 +110,6 @@ module Danbooru end def download_response(response, file: Tempfile.new("danbooru-download-", binmode: true)) - raise DownloadError, response if response.status != 200 raise FileTooLargeError, response if @max_size && response.content_length.to_i > @max_size size = 0 diff --git a/app/logical/media_file.rb b/app/logical/media_file.rb index c28bf25a9..334de8f05 100644 --- a/app/logical/media_file.rb +++ b/app/logical/media_file.rb @@ -43,6 +43,8 @@ class MediaFile else :bin end + rescue EOFError + :bin end def self.videos_enabled? diff --git a/test/files/test-empty.bin b/test/files/test-empty.bin new file mode 100644 index 000000000..e69de29bb diff --git a/test/unit/media_file_test.rb b/test/unit/media_file_test.rb index a7516198d..4c77cf5b3 100644 --- a/test/unit/media_file_test.rb +++ b/test/unit/media_file_test.rb @@ -98,6 +98,10 @@ class MediaFileTest < ActiveSupport::TestCase should "determine the correct extension for a flash file" do assert_equal(:swf, MediaFile.open("test/files/compressed.swf").file_ext) end + + should "not fail for empty files" do + assert_equal(:bin, MediaFile.open("test/files/test-empty.bin").file_ext) + end end should "determine the correct md5 for a jpeg file" do