diff --git a/app/jobs/regular/pull_hotlinked_images.rb b/app/jobs/regular/pull_hotlinked_images.rb index fd8191f4a18..14bd57948e9 100644 --- a/app/jobs/regular/pull_hotlinked_images.rb +++ b/app/jobs/regular/pull_hotlinked_images.rb @@ -26,7 +26,7 @@ module Jobs downloaded_urls = {} extract_images_from(post.cooked).each do |image| - src = image['src'] + src = original_src = image['src'] src = "http:" + src if src.start_with?("//") if is_valid_image_url(src) @@ -53,7 +53,7 @@ module Jobs # have we successfully downloaded that file? if downloaded_urls[src].present? url = downloaded_urls[src] - escaped_src = Regexp.escape(src) + escaped_src = Regexp.escape(original_src) # there are 6 ways to insert an image in a post # HTML tag - raw.gsub!(/src=["']#{escaped_src}["']/i, "src='#{url}'") diff --git a/spec/jobs/pull_hotlinked_images_spec.rb b/spec/jobs/pull_hotlinked_images_spec.rb new file mode 100644 index 00000000000..f9f50766785 --- /dev/null +++ b/spec/jobs/pull_hotlinked_images_spec.rb @@ -0,0 +1,28 @@ +require 'rails_helper' +require 'jobs/regular/pull_hotlinked_images' + +describe Jobs::PullHotlinkedImages do + + png = Base64.decode64("R0lGODlhAQABALMAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwICAgP8AAAD/AP//AAAA//8A/wD//wBiZCH5BAEAAA8ALAAAAAABAAEAAAQC8EUAOw==") + FakeWeb.register_uri(:get, "http://wiki.mozilla.org/images/2/2e/Longcat1.png", body: png) + SiteSetting.download_remote_images_to_local = true + + it 'replaces image src' do + post = Fabricate(:post, raw: "") + + Jobs::PullHotlinkedImages.new.execute(post_id: post.id) + post.reload + + expect(post.raw).to match(/^") + + Jobs::PullHotlinkedImages.new.execute(post_id: post.id) + post.reload + + expect(post.raw).to match(/^