Fix error when processing remote files with unusually long names (#28823)

This commit is contained in:
Claire 2024-01-19 19:52:59 +01:00 committed by GitHub
parent cf2a2ed71c
commit 93957daa50
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -16,7 +16,7 @@ module Paperclip
private private
def cache_current_values def cache_current_values
@original_filename = filename_from_content_disposition.presence || filename_from_path.presence || 'data' @original_filename = truncated_filename
@tempfile = copy_to_tempfile(@target) @tempfile = copy_to_tempfile(@target)
@content_type = ContentTypeDetector.new(@tempfile.path).detect @content_type = ContentTypeDetector.new(@tempfile.path).detect
@size = File.size(@tempfile) @size = File.size(@tempfile)
@ -43,6 +43,13 @@ module Paperclip
source.response.connection.close source.response.connection.close
end end
def truncated_filename
filename = filename_from_content_disposition.presence || filename_from_path.presence || 'data'
extension = File.extname(filename)
basename = File.basename(filename, extension)
[basename[...20], extension[..4]].compact_blank.join
end
def filename_from_content_disposition def filename_from_content_disposition
disposition = @target.response.headers['content-disposition'] disposition = @target.response.headers['content-disposition']
disposition&.match(/filename="([^"]*)"/)&.captures&.first disposition&.match(/filename="([^"]*)"/)&.captures&.first