aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Kane <andrew@ankane.org>2023-11-09 15:24:39 -0800
committergit <svn-admin@ruby-lang.org>2023-12-07 07:00:54 +0000
commit41c00bc97ebf237fd04ce740d0dfd0681f4a28c7 (patch)
treeb083574be631f62055c5dc5de4020f72cf0301dc
parentd97479f9c966bd2c9d52c8be28aca9431760c610 (diff)
downloadruby-41c00bc97ebf237fd04ce740d0dfd0681f4a28c7.tar.gz
[ruby/open-uri] Set default for max_redirects and add exception class
https://github.com/ruby/open-uri/commit/dcdcb885cc
-rw-r--r--lib/open-uri.rb7
-rw-r--r--test/open-uri/test_open-uri.rb2
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