aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib
diff options
context:
space:
mode:
authorArthur Neves <arthurnn@gmail.com>2015-06-16 21:03:39 +0200
committerArthur Neves <arthurnn@gmail.com>2015-06-16 23:27:49 +0200
commite23b3149458b22cf07382d6aeb2264585e28a339 (patch)
treeebb3f70d250693dcd4423c492de453fa629ac01e /actionpack/lib
parente60c18931c81a88f4eb89059e955d6ff07c5e26c (diff)
downloadrails-e23b3149458b22cf07382d6aeb2264585e28a339.tar.gz
rails-e23b3149458b22cf07382d6aeb2264585e28a339.tar.bz2
rails-e23b3149458b22cf07382d6aeb2264585e28a339.zip
Catch InvalidURIError on bad paths on redirect.
Handle URI::InvalidURIError errors on the redirect route method, so it wont raise a 500 if a bad path is given.
Diffstat (limited to 'actionpack/lib')
-rw-r--r--actionpack/lib/action_dispatch/routing/redirection.rb12
1 files changed, 8 insertions, 4 deletions
diff --git a/actionpack/lib/action_dispatch/routing/redirection.rb b/actionpack/lib/action_dispatch/routing/redirection.rb
index 3c1c4fadf6..8d965a5f8e 100644
--- a/actionpack/lib/action_dispatch/routing/redirection.rb
+++ b/actionpack/lib/action_dispatch/routing/redirection.rb
@@ -23,8 +23,12 @@ module ActionDispatch
def serve(req)
req.check_path_parameters!
- uri = URI.parse(path(req.path_parameters, req))
-
+ begin
+ uri = URI.parse(path(req.path_parameters, req))
+ rescue URI::InvalidURIError
+ return [ 400, {}, ['Invalid path.'] ]
+ end
+
unless uri.host
if relative_path?(uri.path)
uri.path = "#{req.script_name}/#{uri.path}"
@@ -32,7 +36,7 @@ module ActionDispatch
uri.path = req.script_name.empty? ? "/" : req.script_name
end
end
-
+
uri.scheme ||= req.scheme
uri.host ||= req.host
uri.port ||= req.port unless req.standard_port?
@@ -124,7 +128,7 @@ module ActionDispatch
url_options[:script_name] = request.script_name
end
end
-
+
ActionDispatch::Http::URL.url_for url_options
end