diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | lib/webrick/server.rb | 4 | ||||
-rw-r--r-- | test/webrick/test_do_not_reverse_lookup.rb | 70 |
3 files changed, 80 insertions, 1 deletions
@@ -1,3 +1,10 @@ +Mon Mar 16 17:43:21 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com> + + * lib/webrick/server.rb: Fix regression bug in WEBrick's + :DoNotReverseLookup config option implementation. + [fix GH-731] Patch by @vais + * test/webrick/test_do_not_reverse_lookup.rb: ditto. + Sat Mar 14 20:05:23 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org> * math.c (math_gamma): optimization for passed small integer. diff --git a/lib/webrick/server.rb b/lib/webrick/server.rb index 8b53939c52..815375f30f 100644 --- a/lib/webrick/server.rb +++ b/lib/webrick/server.rb @@ -179,7 +179,9 @@ module WEBrick svrs[0].each{|svr| @tokens.pop # blocks while no token is there. if sock = accept_client(svr) - sock.do_not_reverse_lookup = config[:DoNotReverseLookup] + unless config[:DoNotReverseLookup].nil? + sock.do_not_reverse_lookup = !!config[:DoNotReverseLookup] + end th = start_thread(sock, &block) th[:WEBrickThread] = true thgroup.add(th) diff --git a/test/webrick/test_do_not_reverse_lookup.rb b/test/webrick/test_do_not_reverse_lookup.rb new file mode 100644 index 0000000000..57f3b1d3ef --- /dev/null +++ b/test/webrick/test_do_not_reverse_lookup.rb @@ -0,0 +1,70 @@ +require "test/unit" +require "webrick" +require_relative "utils" + +class TestDoNotReverseLookup < Test::Unit::TestCase + class DNRL < WEBrick::GenericServer + def run(sock) + sock << sock.do_not_reverse_lookup.to_s + end + end + + @@original_do_not_reverse_lookup_value = Socket.do_not_reverse_lookup + + def teardown + Socket.do_not_reverse_lookup = @@original_do_not_reverse_lookup_value + end + + def do_not_reverse_lookup?(config) + result = nil + TestWEBrick.start_server(DNRL, config) do |server, addr, port, log| + TCPSocket.open(addr, port) do |sock| + result = {'true' => true, 'false' => false}[sock.gets] + end + end + result + end + + # +--------------------------------------------------------------------------+ + # | Expected interaction between Socket.do_not_reverse_lookup | + # | and WEBrick::Config::General[:DoNotReverseLookup] | + # +----------------------------+---------------------------------------------+ + # | |WEBrick::Config::General[:DoNotReverseLookup]| + # +----------------------------+--------------+---------------+--------------+ + # |Socket.do_not_reverse_lookup| TRUE | FALSE | NIL | + # +----------------------------+--------------+---------------+--------------+ + # | TRUE | true | false | true | + # +----------------------------+--------------+---------------+--------------+ + # | FALSE | true | false | false | + # +----------------------------+--------------+---------------+--------------+ + + def test_socket_dnrl_true_server_dnrl_true + Socket.do_not_reverse_lookup = true + assert_equal(true, do_not_reverse_lookup?(:DoNotReverseLookup => true)) + end + + def test_socket_dnrl_true_server_dnrl_false + Socket.do_not_reverse_lookup = true + assert_equal(false, do_not_reverse_lookup?(:DoNotReverseLookup => false)) + end + + def test_socket_dnrl_true_server_dnrl_nil + Socket.do_not_reverse_lookup = true + assert_equal(true, do_not_reverse_lookup?(:DoNotReverseLookup => nil)) + end + + def test_socket_dnrl_false_server_dnrl_true + Socket.do_not_reverse_lookup = false + assert_equal(true, do_not_reverse_lookup?(:DoNotReverseLookup => true)) + end + + def test_socket_dnrl_false_server_dnrl_false + Socket.do_not_reverse_lookup = false + assert_equal(false, do_not_reverse_lookup?(:DoNotReverseLookup => false)) + end + + def test_socket_dnrl_false_server_dnrl_nil + Socket.do_not_reverse_lookup = false + assert_equal(false, do_not_reverse_lookup?(:DoNotReverseLookup => nil)) + end +end |