From d4050793b43aa6c34a1fb62fc59a83c8c44ad285 Mon Sep 17 00:00:00 2001 From: Daniel Gredler Date: Thu, 30 Aug 2018 15:24:41 -0400 Subject: [PATCH] Add missing checks against null. The program can dereference a null pointer because it does not check the return value of a function that might return null. --- .../classpath/cache/GarbageCollector.java | 7 ++++-- .../com/threerings/getdown/util/FileUtil.java | 22 ++++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/threerings/getdown/classpath/cache/GarbageCollector.java b/src/main/java/com/threerings/getdown/classpath/cache/GarbageCollector.java index 48ae7f8..d4d3e46 100644 --- a/src/main/java/com/threerings/getdown/classpath/cache/GarbageCollector.java +++ b/src/main/java/com/threerings/getdown/classpath/cache/GarbageCollector.java @@ -30,8 +30,11 @@ public class GarbageCollector } File folder = file.getParentFile(); - if (folder.list().length == 0) { - FileUtil.deleteHarder(folder); + if (folder != null) { + String[] children = folder.list(); + if (children != null && children.length == 0) { + FileUtil.deleteHarder(folder); + } } } }); diff --git a/src/main/java/com/threerings/getdown/util/FileUtil.java b/src/main/java/com/threerings/getdown/util/FileUtil.java index 720b05a..9d6f2ef 100644 --- a/src/main/java/com/threerings/getdown/util/FileUtil.java +++ b/src/main/java/com/threerings/getdown/util/FileUtil.java @@ -187,14 +187,20 @@ public class FileUtil */ public static void walkTree (File root, Visitor visitor) { - Deque stack = new ArrayDeque<>(Arrays.asList(root.listFiles())); - while (!stack.isEmpty()) { - File currentFile = stack.pop(); - if (currentFile.exists()) { - visitor.visit(currentFile); - if (currentFile.isDirectory()) { - for (File file: currentFile.listFiles()) { - stack.push(file); + File[] children = root.listFiles(); + if (children != null) { + Deque stack = new ArrayDeque<>(Arrays.asList(children)); + while (!stack.isEmpty()) { + File currentFile = stack.pop(); + if (currentFile.exists()) { + visitor.visit(currentFile); + if (currentFile.isDirectory()) { + File[] currentChildren = currentFile.listFiles(); + if (currentChildren != null) { + for (File file : currentChildren) { + stack.push(file); + } + } } } }