diff --git a/Foundation/CPString.j b/Foundation/CPString.j index 3222c0b88..6aa13e9a0 100644 --- a/Foundation/CPString.j +++ b/Foundation/CPString.j @@ -314,6 +314,9 @@ var CPStringRegexSpecialCharacters = [ */ - (CPString)substringToIndex:(unsigned)anIndex { + if (anIndex > length) + [CPException raise:CPRangeException reason:"index out of bounds"]; + return substring(0, anIndex); } diff --git a/Tests/Foundation/CPStringTest.j b/Tests/Foundation/CPStringTest.j index 1389d493b..678a560ce 100644 --- a/Tests/Foundation/CPStringTest.j +++ b/Tests/Foundation/CPStringTest.j @@ -128,6 +128,18 @@ [self assert:"abcd" equals:["abcd" substringToIndex:4]]; [self assert:"abc" equals:["abcd" substringToIndex:3]]; [self assert:"" equals:["abcd" substringToIndex:0]]; + + var sawException = false; + try + { + [@"abcd" substringToIndex:5]; + } + catch (anException) + { + sawException = true; + [self assert:CPRangeException equals:[anException name]]; + } + [self assertTrue:sawException message:"expected CPRangeException"]; } - (void)testBoolValue