From 65bf0d94759f7d522a36698d4b81e3635b8ca572 Mon Sep 17 00:00:00 2001 From: Mitsuhiro Shibuya Date: Sun, 6 Nov 2022 18:47:03 +0900 Subject: [PATCH] Workaround for 'undefined method closed?' error caused by ssrf_filter 1.1 Closes #2628 --- lib/carrierwave/downloader/base.rb | 4 +++- spec/downloader/base_spec.rb | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/carrierwave/downloader/base.rb b/lib/carrierwave/downloader/base.rb index a158e98e..3ba18d77 100644 --- a/lib/carrierwave/downloader/base.rb +++ b/lib/carrierwave/downloader/base.rb @@ -35,7 +35,9 @@ module CarrierWave request = req end else - response = SsrfFilter.get(uri, headers: headers, request_proc: ->(req) { request = req }) + response = SsrfFilter.get(uri, headers: headers, request_proc: ->(req) { request = req }) do |res| + res.body # ensure to read body + end end response.uri = request.uri response.value diff --git a/spec/downloader/base_spec.rb b/spec/downloader/base_spec.rb index 5fc95849..4aa9a31b 100644 --- a/spec/downloader/base_spec.rb +++ b/spec/downloader/base_spec.rb @@ -156,6 +156,16 @@ describe CarrierWave::Downloader::Base do end end + context 'when actually downloading a file' do + let(:uri) { 'https://raw.githubusercontent.com/carrierwaveuploader/carrierwave/master/spec/fixtures/test.jpg' } + before { WebMock.disable! } + after { WebMock.enable! } + + it 'retrieves the body successfully' do + expect(subject.download(uri).file.read).to eq 'this is stuff' + end + end + describe '#process_uri' do it "converts a URL with internationalized domain name to Punycode URI" do uri = "http://ドメイン名例.jp/#{CGI.escape(filename)}"