diff options
author | Petri Avikainen <petri.avikainen@gmail.com> | 2019-02-03 23:34:02 +0200 |
---|---|---|
committer | Petri Avikainen <petri.avikainen@gmail.com> | 2019-02-05 07:54:51 +0200 |
commit | c94754e2f0bc488907157382ece309baf4ddb1b0 (patch) | |
tree | e96626fad403e262c29a03702008cfe8b0d0f0fd | |
parent | 300c62f75cc1b48fe5152717f395ee8d94c1ceaf (diff) | |
download | rails-c94754e2f0bc488907157382ece309baf4ddb1b0.tar.gz rails-c94754e2f0bc488907157382ece309baf4ddb1b0.tar.bz2 rails-c94754e2f0bc488907157382ece309baf4ddb1b0.zip |
Define word boundary for unanchored path regexp
-rw-r--r-- | actionpack/lib/action_dispatch/journey/path/pattern.rb | 2 | ||||
-rw-r--r-- | actionpack/test/dispatch/mount_test.rb | 6 | ||||
-rw-r--r-- | actionpack/test/journey/path/pattern_test.rb | 22 |
3 files changed, 18 insertions, 12 deletions
diff --git a/actionpack/lib/action_dispatch/journey/path/pattern.rb b/actionpack/lib/action_dispatch/journey/path/pattern.rb index 537f479ee5..6924dc92c2 100644 --- a/actionpack/lib/action_dispatch/journey/path/pattern.rb +++ b/actionpack/lib/action_dispatch/journey/path/pattern.rb @@ -119,7 +119,7 @@ module ActionDispatch class UnanchoredRegexp < AnchoredRegexp # :nodoc: def accept(node) - %r{\A#{visit node}} + %r{\A#{visit node}\b} end end diff --git a/actionpack/test/dispatch/mount_test.rb b/actionpack/test/dispatch/mount_test.rb index f6cf653980..e42ea89f6f 100644 --- a/actionpack/test/dispatch/mount_test.rb +++ b/actionpack/test/dispatch/mount_test.rb @@ -80,6 +80,12 @@ class TestRoutingMount < ActionDispatch::IntegrationTest assert_equal "/shorthand -- /omg", response.body end + def test_mounting_does_not_match_similar_paths + get "/shorthandomg" + assert_not_equal "/shorthand -- /omg", response.body + assert_equal " -- /shorthandomg", response.body + end + def test_mounting_works_with_via get "/getfake" assert_equal "OK", response.body diff --git a/actionpack/test/journey/path/pattern_test.rb b/actionpack/test/journey/path/pattern_test.rb index 3e7aea57f1..97d99064f2 100644 --- a/actionpack/test/journey/path/pattern_test.rb +++ b/actionpack/test/journey/path/pattern_test.rb @@ -34,17 +34,17 @@ module ActionDispatch end { - "/:controller(/:action)" => %r{\A/(#{x})(?:/([^/.?]+))?}, - "/:controller/foo" => %r{\A/(#{x})/foo}, - "/:controller/:action" => %r{\A/(#{x})/([^/.?]+)}, - "/:controller" => %r{\A/(#{x})}, - "/:controller(/:action(/:id))" => %r{\A/(#{x})(?:/([^/.?]+)(?:/([^/.?]+))?)?}, - "/:controller/:action.xml" => %r{\A/(#{x})/([^/.?]+)\.xml}, - "/:controller.:format" => %r{\A/(#{x})\.([^/.?]+)}, - "/:controller(.:format)" => %r{\A/(#{x})(?:\.([^/.?]+))?}, - "/:controller/*foo" => %r{\A/(#{x})/(.+)}, - "/:controller/*foo/bar" => %r{\A/(#{x})/(.+)/bar}, - "/:foo|*bar" => %r{\A/(?:([^/.?]+)|(.+))}, + "/:controller(/:action)" => %r{\A/(#{x})(?:/([^/.?]+))?\b}, + "/:controller/foo" => %r{\A/(#{x})/foo\b}, + "/:controller/:action" => %r{\A/(#{x})/([^/.?]+)\b}, + "/:controller" => %r{\A/(#{x})\b}, + "/:controller(/:action(/:id))" => %r{\A/(#{x})(?:/([^/.?]+)(?:/([^/.?]+))?)?\b}, + "/:controller/:action.xml" => %r{\A/(#{x})/([^/.?]+)\.xml\b}, + "/:controller.:format" => %r{\A/(#{x})\.([^/.?]+)\b}, + "/:controller(.:format)" => %r{\A/(#{x})(?:\.([^/.?]+))?\b}, + "/:controller/*foo" => %r{\A/(#{x})/(.+)\b}, + "/:controller/*foo/bar" => %r{\A/(#{x})/(.+)/bar\b}, + "/:foo|*bar" => %r{\A/(?:([^/.?]+)|(.+))\b}, }.each do |path, expected| define_method(:"test_to_non_anchored_regexp_#{Regexp.escape(path)}") do path = Pattern.build( |