diff --git a/modules/reitit-core/java-src/reitit/SegmentTrie.java b/modules/reitit-core/java-src/reitit/SegmentTrie.java index 5813f26d..31de24ff 100644 --- a/modules/reitit-core/java-src/reitit/SegmentTrie.java +++ b/modules/reitit-core/java-src/reitit/SegmentTrie.java @@ -192,9 +192,12 @@ public class SegmentTrie { @Override public Match match(int i, List segments, Match match) { - match.params.put(parameter, decode(String.join("/", segments.subList(i, segments.size())))); - match.data = data; - return match; + if (i < segments.size()) { + match.params.put(parameter, decode(String.join("/", segments.subList(i, segments.size())))); + match.data = data; + return match; + } + return null; } @Override @@ -212,9 +215,11 @@ public class SegmentTrie { @Override public Match match(int i, List segments, Match match) { - final Matcher child = map.get(segments.get(i)); - if (child != null) { - return child.match(i + 1, segments, match); + if (i < segments.size()) { + final Matcher child = map.get(segments.get(i)); + if (child != null) { + return child.match(i + 1, segments, match); + } } return null; } diff --git a/test/cljc/reitit/core_test.cljc b/test/cljc/reitit/core_test.cljc index a5d5b1e9..4905b6f7 100644 --- a/test/cljc/reitit/core_test.cljc +++ b/test/cljc/reitit/core_test.cljc @@ -74,8 +74,9 @@ ["/abba/1" ::abba2] ["/:jabba/2" ::jabba2] ["/:abba/:dabba/doo" ::doo] + ["/abba/dabba/boo/baa" ::baa] ["/abba/:dabba/boo" ::boo] - ["/:jabba/:dabba/:doo/*foo" ::wild]] + ["/:jabba/:dabba/:doo/:daa/*foo" ::wild]] {:router r}) matches #(-> router (r/match-by-path %) :data :name)] (is (= ::abba (matches "/abba"))) @@ -83,6 +84,8 @@ (is (= ::jabba2 (matches "/abba/2"))) (is (= ::doo (matches "/abba/1/doo"))) (is (= ::boo (matches "/abba/1/boo"))) + (is (= ::baa (matches "/abba/dabba/boo/baa"))) + (is (= ::boo (matches "/abba/dabba/boo"))) (is (= ::wild (matches "/olipa/kerran/avaruus/vaan/ei/toista/kertaa"))))) (testing "empty path segments"