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

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

Commit messages:
 - unnecessary include after moving funtion
 - whitespace
 - move 'throw_internal_error' plus whitespace comment fix
 - 8299665: /proc/self/stat parsing in libmanagement broken by execname with 
spaces

Changes: https://git.openjdk.org/jdk/pull/14107/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14107&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8299665
  Stats: 61 lines in 4 files changed: 34 ins; 25 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/14107.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/14107/head:pull/14107

PR: https://git.openjdk.org/jdk/pull/14107

Reply via email to