aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetri Avikainen <petri.avikainen@gmail.com>2019-02-03 23:34:02 +0200
committerPetri Avikainen <petri.avikainen@gmail.com>2019-02-05 07:54:51 +0200
commitc94754e2f0bc488907157382ece309baf4ddb1b0 (patch)
treee96626fad403e262c29a03702008cfe8b0d0f0fd
parent300c62f75cc1b48fe5152717f395ee8d94c1ceaf (diff)
downloadrails-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.rb2
-rw-r--r--actionpack/test/dispatch/mount_test.rb6
-rw-r--r--actionpack/test/journey/path/pattern_test.rb22
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(