RFR: 8338888: SystemDictionary::class_name_symbol has incorrect length check

David Holmes dholmes at openjdk.org
Mon Aug 26 12:16:04 UTC 2024


On Mon, 26 Aug 2024 08:12:07 GMT, Kim Barrett <kbarrett at openjdk.org> wrote:

>> The name length check was incorrectly truncating the length to an int, which is wrong if the name is > `INT_MAX`. Added a test for this case to the existing test cases and fixed an issue with the call to `Exceptions::fthrow` that can hit the `INT_MAX` limitations of `os::vsnprintf` (this is the first in a serious of fixes that will mainly be done under [JDK-8328882](https://bugs.openjdk.org/browse/JDK-8328882) or subtasks thereof).
>> 
>> Testing:
>>  - updated test
>>  - tiers 1-3 (sanity)
>> 
>> Thanks
>
> src/hotspot/share/classfile/systemDictionary.cpp line 269:
> 
>> 267:     // To avoid internal snprintf INT_MAX limit we reduce the maximum length
>> 268:     // of name to print, by the length of the rest of the formatted message.
>> 269:     int print_limit = INT_MAX - 45;
> 
> I was wondering where that "45" came from.  It appears to be the length of the format string below,
> including the format directives.  That seems wrong.  Doesn't it need to account for the *expansion*
> of the "%d" directive?

It does. It is the text up to the %s and the expanded %d which will be 65535, plus one. The plus one deals with a seeming off-by-one bug with macOS vsnprintf.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/20709#discussion_r1731152500


More information about the hotspot-runtime-dev mailing list