On Tue, 23 May 2023 20:54:42 GMT, Kevin Walls <kev...@openjdk.org> wrote:
> Code that parses /proc/self/stat may be broken if the executable name > contains spaces. > > We have code that does this correctly, and code that does not. > UnixOperatingSystem.c is Linux-specific OS code, and has vread_statdata which > correctly uses strrchr to find the last ) and parses from there. > > OperatingSystemImpl.c the generic, not Linux-specific code, is not OK, as > Java_com_sun_management_internal_OperatingSystemImpl_getCommittedVirtualMemorySize0 > has a problematic fscanf call. > But the problematic fscanf call is Linux-specific: we use ifdef to create > OS-specific implementations. > > > Need to change the fscanf of /proc/self/stat to do the same buffered read as > read_ticks in UnixOperatingSystem.c (the Linux-specific code), with strrchr > to read past the ) of the execname. > > Moving the actually-Linux-specific getCommittedVirtualMemorySize0 to be with > the other Linux-specific code means it can just use the existing method for > accessing /proc/self/stat. > > It does however call throw_internal_error, which is then not accessible. So > that function can be shared in the libmanagement_ext.h/.c for both uses. > > The call to throw_internal_error is working: if I change the code to fail, it > reports a java.lang.InternalError as it would before. > > Existing tests still pass: > i.e. > test/jdk/com/sun/management/OperatingSystemMXBean/GetCommittedVirtualMemorySize.java Marked as reviewed by amenkov (Reviewer). ------------- PR Review: https://git.openjdk.org/jdk/pull/14107#pullrequestreview-1442935250