On Tue, 13 Sep 2022 09:28:07 GMT, Aleksey Shipilev <[email protected]> wrote:
>> src/jdk.jlink/share/classes/jdk/tools/jmod/JmodTask.java line 1196:
>>
>>> 1194: }
>>> 1195: try {
>>> 1196: int level = Integer.parseInt(value.substring(idx +
>>> 1));
>>
>> If I'm reading this code correctly, then this call to `substring` can
>> potentially end in a `IndexOutOfBoundsException` if the value is `zip-`.
>> Perhaps add a check above to verify that `idx != value.length()`?
>
> `String.substring` does the right thing when `idx == length()` -- it returns
> the empty string, which would fail to parse. Anyway, I added the test for
> "zip-" to verify this.
You are right indeed. All these days I had in my mind that the
`String.subString` will throw the `IndexOutOfBoundsException` if the passed
integer isn't a valid "index". I had that perception due to the javadoc which
says:
The substring begins with the character at the specified index
I hadn't paid attention to the later part of that same javadoc which says,
along with an example, that the returned value is an empty string if the index
== length() and will only throw `IndexOutOfBoundsException` if the passed value
is greater than `length()`.
So what you have here is fine, of course. Thank you for updating the test.
-------------
PR: https://git.openjdk.org/jdk/pull/10213