On 17/09/2026 15:37, Chunhui Liu wrote:
Hi Mark:

please help review: [perf] Check for EOF before the numeric test in
readHostIPv4 by leeychee · Pull Request #1068 · apache/tomcat
<https://github.com/apache/tomcat/pull/1068>

Merged around the same time you wrote the above email.

Thanks for the PR.

Mark



Best regards
Chunhui Liu


Mark Thomas <[email protected]> 于2026年9月17日周四 18:18写道:

On 17/09/2026 10:53, Chunhui Liu wrote:
Hi team:

Recently, we noticed that there are hundreds
of ArrayIndexOutOfBoundsExceptions (and deoptimization events) have been
thrown by `HttpParser.readHostIPv4`. It can be reproduced with the
following test case:

```java

@Test
void debugStandardIpv4_isNumericOnEof() throws IOException {
      HttpParser.readHostIPv4(new StringReader("127.0.0.1"), false);
}

```

The method does not throws the exception directly, but rather swallows it
inside `isNumeric` through the following steps:


     1. All characters are read, reaching EOF and returning -1;
     2. The `isNumeric` check is performed before the `-1` check;
     3. `-1` triggers an ArrayIndexOutOfBoundsException inside isNumeric;

[image: image.png]
[image: image.png]

So my question is:

1. Should the `-1` branch be placed before the `isNumeric` branch? or is
there another reason for the current implementation?
2. Should check `0 < c < ARRAY_SIZE`?

Option 1 is the better choice.

Not option 2 since those methods are deliberately designed to be as fast
as possible for valid input.

PRs welcome.

Mark


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]





---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to