6865748: (file) SimpleFileVisitor methods ignore null arguments
Reviewed-by: sherman
--- a/jdk/src/share/classes/java/nio/file/SimpleFileVisitor.java Tue Aug 11 12:38:43 2009 +0100
+++ b/jdk/src/share/classes/java/nio/file/SimpleFileVisitor.java Tue Aug 11 12:49:16 2009 +0100
@@ -48,6 +48,14 @@
}
/**
+ * Throws NullPointerException if obj is null.
+ */
+ private static void checkNotNull(Object obj) {
+ if (obj == null)
+ throw new NullPointerException();
+ }
+
+ /**
* Invoked for a directory before entries in the directory are visited.
*
* <p> Unless overridden, this method returns {@link FileVisitResult#CONTINUE
@@ -55,6 +63,7 @@
*/
@Override
public FileVisitResult preVisitDirectory(T dir) {
+ checkNotNull(dir);
return FileVisitResult.CONTINUE;
}
@@ -70,6 +79,8 @@
*/
@Override
public FileVisitResult preVisitDirectoryFailed(T dir, IOException exc) {
+ checkNotNull(dir);
+ checkNotNull(exc);
throw new IOError(exc);
}
@@ -81,6 +92,8 @@
*/
@Override
public FileVisitResult visitFile(T file, BasicFileAttributes attrs) {
+ checkNotNull(file);
+ checkNotNull(attrs);
return FileVisitResult.CONTINUE;
}
@@ -96,6 +109,8 @@
*/
@Override
public FileVisitResult visitFileFailed(T file, IOException exc) {
+ checkNotNull(file);
+ checkNotNull(exc);
throw new IOError(exc);
}
@@ -114,6 +129,7 @@
*/
@Override
public FileVisitResult postVisitDirectory(T dir, IOException exc) {
+ checkNotNull(dir);
if (exc != null)
throw new IOError(exc);
return FileVisitResult.CONTINUE;
--- a/jdk/test/java/nio/file/Files/Misc.java Tue Aug 11 12:38:43 2009 +0100
+++ b/jdk/test/java/nio/file/Files/Misc.java Tue Aug 11 12:49:16 2009 +0100
@@ -22,13 +22,14 @@
*/
/* @test
- * @bug 4313887 6838333
+ * @bug 4313887 6838333 6865748
* @summary Unit test for java.nio.file.Files for miscellenous cases not
* covered by other tests
* @library ..
*/
import java.nio.file.*;
+import java.nio.file.attribute.Attributes;
import java.io.IOException;
import java.util.*;
@@ -113,5 +114,29 @@
npeExpected();
} catch (NullPointerException e) {
}
+
+ SimpleFileVisitor<Path> visitor = new SimpleFileVisitor<Path>() { };
+ boolean ranTheGauntlet = false;
+ try { visitor.preVisitDirectory(null);
+ } catch (NullPointerException x0) {
+ try { visitor.preVisitDirectoryFailed(null, new IOException());
+ } catch (NullPointerException x1) {
+ try { visitor.preVisitDirectoryFailed(dir, null);
+ } catch (NullPointerException x2) {
+ try { visitor.visitFile(null, Attributes.readBasicFileAttributes(Paths.get(".")));
+ } catch (NullPointerException x3) {
+ try { visitor.visitFile(dir, null);
+ } catch (NullPointerException x4) {
+ try { visitor.visitFileFailed(null, new IOException());
+ } catch (NullPointerException x5) {
+ try { visitor.visitFileFailed(dir, null);
+ } catch (NullPointerException x6) {
+ try { visitor.postVisitDirectory(null, new IOException());
+ } catch (NullPointerException x7) {
+ // if we get here then all visit* methods threw NPE as expected
+ ranTheGauntlet = true;
+ }}}}}}}}
+ if (!ranTheGauntlet)
+ throw new RuntimeException("A visit method did not throw NPE");
}
}