On Tue, 13 Sep 2022 09:28:07 GMT, Aleksey Shipilev <sh...@openjdk.org> 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

Reply via email to