Oh My Java: safe guard against index overflows.

This commit is contained in:
Tommi Reiman 2019-01-14 21:08:20 +02:00
parent 9e58f93cc9
commit 393049a772
2 changed files with 15 additions and 7 deletions

View file

@ -192,9 +192,12 @@ public class SegmentTrie {
@Override @Override
public Match match(int i, List<String> segments, Match match) { public Match match(int i, List<String> segments, Match match) {
match.params.put(parameter, decode(String.join("/", segments.subList(i, segments.size())))); if (i < segments.size()) {
match.data = data; match.params.put(parameter, decode(String.join("/", segments.subList(i, segments.size()))));
return match; match.data = data;
return match;
}
return null;
} }
@Override @Override
@ -212,9 +215,11 @@ public class SegmentTrie {
@Override @Override
public Match match(int i, List<String> segments, Match match) { public Match match(int i, List<String> segments, Match match) {
final Matcher child = map.get(segments.get(i)); if (i < segments.size()) {
if (child != null) { final Matcher child = map.get(segments.get(i));
return child.match(i + 1, segments, match); if (child != null) {
return child.match(i + 1, segments, match);
}
} }
return null; return null;
} }

View file

@ -74,8 +74,9 @@
["/abba/1" ::abba2] ["/abba/1" ::abba2]
["/:jabba/2" ::jabba2] ["/:jabba/2" ::jabba2]
["/:abba/:dabba/doo" ::doo] ["/:abba/:dabba/doo" ::doo]
["/abba/dabba/boo/baa" ::baa]
["/abba/:dabba/boo" ::boo] ["/abba/:dabba/boo" ::boo]
["/:jabba/:dabba/:doo/*foo" ::wild]] ["/:jabba/:dabba/:doo/:daa/*foo" ::wild]]
{:router r}) {:router r})
matches #(-> router (r/match-by-path %) :data :name)] matches #(-> router (r/match-by-path %) :data :name)]
(is (= ::abba (matches "/abba"))) (is (= ::abba (matches "/abba")))
@ -83,6 +84,8 @@
(is (= ::jabba2 (matches "/abba/2"))) (is (= ::jabba2 (matches "/abba/2")))
(is (= ::doo (matches "/abba/1/doo"))) (is (= ::doo (matches "/abba/1/doo")))
(is (= ::boo (matches "/abba/1/boo"))) (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"))))) (is (= ::wild (matches "/olipa/kerran/avaruus/vaan/ei/toista/kertaa")))))
(testing "empty path segments" (testing "empty path segments"