Details
-
Bug
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
2.5.4
-
None
Description
When constructing an exclusive range, if the types of the left and right sides are explicitly typed and aren't both int the result at runtime is an instance of `NumberRange`. When this is passed to the List.getAt helper method it calls `DefaultGroovyMethodsSupport.subListBorders` which at line 88 returns an instance of `RangeInfo` for an inclusive range.
Contrast this with the code in IntRange which explicitly checks the `inclusive` flag and returns the correct range info.
The following code blocks runs:
def array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
int x = 10
println array[x..<11]
The following code produces an IndexOutOfBounds exception:
def array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] int x = 10 println array[x..<11L] // Also broken def array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] long x = 10 println array[x..<11L] // Another broken variant def array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Long x = 10 println array[x..<11L]
Attachments
Issue Links
- links to