Fix #3982: Uploads: URI::InvalidURIError - URI must be ascii only.

This commit is contained in:
evazion
2018-11-11 12:17:58 -06:00
parent eade33fa7c
commit e10c6c6a30
5 changed files with 44 additions and 8 deletions

View File

@@ -48,7 +48,7 @@ class UploadService
@upload.update(status: "processing")
if @upload.file.nil? && Utils.is_downloadable?(source)
if @upload.file.nil? && @upload.source_url.present?
@upload.file = Utils.download_for_upload(@upload)
end
@@ -71,10 +71,6 @@ class UploadService
return @post.warnings.full_messages
end
def source
params[:source]
end
def include_artist_commentary?
params[:include_artist_commentary].to_s.truthy?
end

View File

@@ -93,7 +93,7 @@ class UploadService
if params[:file].present?
file = params[:file]
elsif Utils.is_downloadable?(source)
elsif upload.source_url.present?
file = Utils.download_for_upload(upload)
end

View File

@@ -210,7 +210,7 @@ class UploadService
attempts = 0
begin
download = Downloads::File.new(upload.source, upload.referer_url)
download = Downloads::File.new(upload.source_url, upload.referer_url)
file, strategy = download.download!
if !DanbooruImageResizer.validate_shell(file)

View File

@@ -135,6 +135,24 @@ class Upload < ApplicationRecord
end
end
module SourceMethods
def source=(source)
source = source.unicode_normalize(:nfc)
# percent encode unicode characters in urls
if source =~ %r!\Ahttps?://!i
source = Addressable::URI.normalized_encode(source) rescue source
end
super(source)
end
def source_url
return nil unless source =~ %r!\Ahttps?://!i
Addressable::URI.heuristic_parse(source) rescue nil
end
end
module UploaderMethods
def uploader_name
User.id_to_name(uploader_id)
@@ -233,6 +251,7 @@ class Upload < ApplicationRecord
include VideoMethods
extend SearchMethods
include ApiMethods
include SourceMethods
def uploader_is_not_limited
if !uploader.can_upload?