RFR: 8353468: [ubsan] arguments.cpp:2422:23: runtime error: 2.14748e+11 is outside the range of representable values of type 'int' [v3]

Stefan Karlsson stefank at openjdk.org
Thu Aug 28 08:01:43 UTC 2025


On Thu, 28 Aug 2025 07:27:24 GMT, Afshin Zafari <azafari at openjdk.org> wrote:

>> src/hotspot/share/runtime/arguments.cpp line 2422:
>> 
>>> 2420:       } else {
>>> 2421:         if (dmaxf < 0.0 || dmaxf > 1.0) {
>>> 2422:           JVMFlag::printError(true,"uintx MaxHeapFreeRatio=%s is outside the allowed range  [ 0.0 ... 1.0 ]\n", tail);
>> 
>> This needs to refer to the allowed range for `-Xmaxf` as that is what the user supplied. The user does not know this is just used to internally set `MaxHeapFreeRatio`. If `-Xminf` and `-Xmaxf` were actually VM `-XX` flags then we would have defined the appropriate constraint function for them. We need to emulate that here. There should also be checks that minf <= maxf.
>
> This is exactly the source of confusion. User is allowed to enter `double` values in range `[0.0, 1.0]`, but the value is multiplied by 100 and stored in a `uintx`.
> Using hard-coded constants `MinHeapFreeRatio ` and `MaxHeapFreeRatio` in the error message is as expected by tests.
> These two flags have already constraint functions as `MinHeapFreeRatioConstraintFunc` and `MaxHeapFreeRatioConstraintFunc` where minf <= maxf is checked.
> Checking the user input to be in [0.0, 1.0] cannot be done in the constraint functions, since the original input is missed due to * 100 and casting to uintx.

I agree with David's comment here. The suggestion is to explicitly pre-check that Xminf/Xmaxf falls within [0.0, 1.0], just so that the constraint function for MinHeapFreeRatio/MaxHeapFreeRatio triggers and gives a confusing message.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/26859#discussion_r2306560558


More information about the hotspot-runtime-dev mailing list