summaryrefslogtreecommitdiff
path: root/src/reflect
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2015-08-20 16:34:30 +1000
committerHao Xia <hao@optimizely.com>2017-01-10 19:05:01 -0800
commitc89d821a4f875133abeccd68d996e0a08f93e08d (patch)
treeb2390e2f11ec3c5f34b85c01c59e4014e5c696c2 /src/reflect
parent827d69d48e96d9add75ce19e06b374610784c936 (diff)
downloadscala-c89d821a4f875133abeccd68d996e0a08f93e08d.tar.gz
scala-c89d821a4f875133abeccd68d996e0a08f93e08d.tar.bz2
scala-c89d821a4f875133abeccd68d996e0a08f93e08d.zip
Fix SIOOBE in Name#pos for substrings of length 1
Diffstat (limited to 'src/reflect')
-rw-r--r--src/reflect/scala/reflect/internal/Names.scala6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/reflect/scala/reflect/internal/Names.scala b/src/reflect/scala/reflect/internal/Names.scala
index 9d39ef8b42..055f7c9d5b 100644
--- a/src/reflect/scala/reflect/internal/Names.scala
+++ b/src/reflect/scala/reflect/internal/Names.scala
@@ -296,11 +296,13 @@ trait Names extends api.Names {
*/
final def pos(s: String, start: Int): Int = {
var i = pos(s.charAt(0), start)
- while (i + s.length() <= len) {
+ val sLen = s.length()
+ if (sLen == 1) return i
+ while (i + sLen <= len) {
var j = 1
while (s.charAt(j) == chrs(index + i + j)) {
j += 1
- if (j == s.length()) return i
+ if (j == sLen) return i
}
i = pos(s.charAt(0), i + 1)
}