Handle malformed input when reading resource usage. Must happen when `/proc/pid/stat` is not available for some reason. PiperOrigin-RevId: 332242647
diff --git a/src/main/java/com/google/devtools/build/lib/util/ResourceUsage.java b/src/main/java/com/google/devtools/build/lib/util/ResourceUsage.java index 88fbefc..a2076ee 100644 --- a/src/main/java/com/google/devtools/build/lib/util/ResourceUsage.java +++ b/src/main/java/com/google/devtools/build/lib/util/ResourceUsage.java
@@ -24,7 +24,7 @@ import java.io.IOException; import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; -import java.util.Iterator; +import java.util.List; /** * Provides methods to measure the current resource usage of the current process. Also provides some @@ -142,14 +142,12 @@ if (file.isDirectory()) { return new long[2]; } - Iterator<String> stat = - WHITESPACE_SPLITTER.split(Files.asCharSource(file, US_ASCII).read()).iterator(); - for (int i = 0; i < 13; ++i) { - stat.next(); + List<String> stat = + WHITESPACE_SPLITTER.splitToList(Files.asCharSource(file, US_ASCII).read()); + if (stat.size() < 15) { + return new long[2]; // Tolerate malformed input. } - long token13 = Long.parseLong(stat.next()); - long token14 = Long.parseLong(stat.next()); - return new long[] {token13, token14}; + return new long[] {Long.parseLong(stat.get(13)), Long.parseLong(stat.get(14))}; } catch (NumberFormatException | IOException e) { return new long[2]; }