diff options
-rw-r--r-- | lib/open-uri.rb | 7 | ||||
-rw-r--r-- | test/open-uri/test_open-uri.rb | 2 |
2 files changed, 6 insertions, 3 deletions
diff --git a/lib/open-uri.rb b/lib/open-uri.rb index 56dac75b29..49488cfc8e 100644 --- a/lib/open-uri.rb +++ b/lib/open-uri.rb @@ -108,7 +108,7 @@ module OpenURI :ftp_active_mode => false, :redirect => true, :encoding => nil, - :max_redirects => nil, + :max_redirects => 64, } def OpenURI.check_options(options) # :nodoc: @@ -240,7 +240,7 @@ module OpenURI uri = redirect raise "HTTP redirection loop: #{uri}" if uri_set.include? uri.to_s uri_set[uri.to_s] = true - raise "Too many redirects" if max_redirects && uri_set.size > max_redirects + raise TooManyRedirects.new("Too many redirects", buf.io) if max_redirects && uri_set.size > max_redirects else break end @@ -395,6 +395,9 @@ module OpenURI attr_reader :uri end + class TooManyRedirects < HTTPError + end + class Buffer # :nodoc: all def initialize @io = StringIO.new diff --git a/test/open-uri/test_open-uri.rb b/test/open-uri/test_open-uri.rb index 6bad7f4bdf..30e3b5c9c1 100644 --- a/test/open-uri/test_open-uri.rb +++ b/test/open-uri/test_open-uri.rb @@ -572,7 +572,7 @@ class TestOpenURI < Test::Unit::TestCase srv.mount_proc("/r1/") {|req, res| res.status = 301; res["location"] = "#{url}/r2"; res.body = "r1" } srv.mount_proc("/r2/") {|req, res| res.status = 301; res["location"] = "#{url}/r3"; res.body = "r2" } srv.mount_proc("/r3/") {|req, res| res.body = "r3" } - exc = assert_raise(RuntimeError) { URI.open("#{url}/r1/", max_redirects: 1) {} } + exc = assert_raise(OpenURI::TooManyRedirects) { URI.open("#{url}/r1/", max_redirects: 1) {} } assert_equal("Too many redirects", exc.message) } end |