From c8e0db99941a8c4f085890a25df30302fb6e5aa6 Mon Sep 17 00:00:00 2001 From: Prem Sichanugrist Date: Sun, 6 Jun 2010 17:05:28 -0400 Subject: [PATCH] Make sure that rails recognized the full notation of IPv6 loopback address, and recognize 127.0.0.0/8 in IPv4 --- actionpack/lib/action_controller/rescue.rb | 4 ++-- actionpack/test/controller/rescue_test.rb | 11 +++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/actionpack/lib/action_controller/rescue.rb b/actionpack/lib/action_controller/rescue.rb index 58bbf0c..81bf2c1 100644 --- a/actionpack/lib/action_controller/rescue.rb +++ b/actionpack/lib/action_controller/rescue.rb @@ -15,7 +15,7 @@ module ActionController #:nodoc: # behavior is achieved by overriding the rescue_action_in_public # and rescue_action_locally methods. module Rescue - LOCALHOST = ['127.0.0.1', '::1'].freeze + LOCALHOST = [/^127\.0\.0\.\d{1,3}$/, /^::1$/, /^0:0:0:0:0:0:0:1(%.*)?$/].freeze DEFAULT_RESCUE_RESPONSE = :internal_server_error DEFAULT_RESCUE_RESPONSES = { @@ -122,7 +122,7 @@ module ActionController #:nodoc: # method if you wish to redefine the meaning of a local request to # include remote IP addresses or other criteria. def local_request? #:doc: - LOCALHOST.any?{ |local_ip| request.remote_addr == local_ip && request.remote_ip == local_ip } + LOCALHOST.any?{ |local_ip| request.remote_addr =~ local_ip && request.remote_ip =~ local_ip } end # Render detailed diagnostics for unhandled exceptions rescued from diff --git a/actionpack/test/controller/rescue_test.rb b/actionpack/test/controller/rescue_test.rb index fd8aba5..58fccdc 100644 --- a/actionpack/test/controller/rescue_test.rb +++ b/actionpack/test/controller/rescue_test.rb @@ -281,12 +281,11 @@ class RescueControllerTest < ActionController::TestCase end def test_local_request_when_remote_addr_is_localhost - @controller.expects(:request).returns(@request).at_least(4) - with_remote_addr '127.0.0.1' do - assert @controller.send(:local_request?) - end - with_remote_addr '::1' do - assert @controller.send(:local_request?) + @controller.expects(:request).returns(@request).at_least(10) + ['127.0.0.1', '127.0.0.127', '::1', '0:0:0:0:0:0:0:1', '0:0:0:0:0:0:0:1%0'].each do |ip_address| + with_remote_addr ip_address do + assert @controller.send(:local_request?) + end end end -- 1.7.0.4