RFR [XS]: 8235489: handle return values of sscanf calls in hotspot

Kim Barrett kim.barrett at oracle.com
Fri Dec 6 20:11:30 UTC 2019


> On Dec 6, 2019, at 10:17 AM, Baesken, Matthias <matthias.baesken at sap.com> wrote:
> 
> Hello,  I noticed there are some remaining sscanf calls  in the hotspot codebase missing return value checks.
> Those should better be checked  .
> 
> 
> Bug/webrev :
> 
> https://bugs.openjdk.java.net/browse/JDK-8235489
> 
> http://cr.openjdk.java.net/~mbaesken/webrevs/8235489.0/
> 
> 
> Thanks, Matthias

------------------------------------------------------------------------------
src/hotspot/os/linux/os_linux.cpp  
2085       memset(name, 0, sizeof(name));

What is this line of the change for?  Is this because the pathname
field in a line can be blank?  That isn't sufficient.  That case needs
to be handled after the "if (matches < 6) continue;" line, e.g. check
whether matches == 6 (e.g. a blank name field), forcing "name" to be
blank if so (e.g. name[0] = '\0').  Otherwise, "name" will contain
data from the most recent parsed line that contained a match for that
field.

------------------------------------------------------------------------------
src/hotspot/os/linux/os_linux.cpp  
2083       char device[6];
...
2088       int matches = sscanf(line, UINT64_FORMAT_X "-" UINT64_FORMAT_X " %4s " UINT64_FORMAT_X " %5s " INT64_FORMAT " %s",

Good eye, spotting the mismatch between the declared size of device
and the size spec in the format string (e.g. changing "%7s" => "%5s").

------------------------------------------------------------------------------
src/hotspot/os/linux/os_linux.cpp 

In the sscanf format string, there's no length spec for the pathname,
e.g. it uses an unadorned "%s".  PATH_MAX doesn't deal with long file
names.

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



More information about the hotspot-dev mailing list