7127235: (fs) NPE in Files.walkFileTree if cached attributes are GC'ed

Chris Hegarty chris.hegarty at oracle.com
Thu Jan 5 09:02:39 PST 2012


Looks fine.

-Chris.

On 01/ 5/12 03:04 PM, Alan Bateman wrote:
>
> This is a faux pas in the implementation of Files.walkFileTree. Where
> the attributes of the files in a directory are read as part of the
> iteration then they are cached, via a weak reference, to avoid
> re-fetching them. Unfortunately this code doesn't check if the reference
> has been cleared which can be lead to a NPE as per the bug report. The
> fix is to trivially check if the reference has been cleared. This one is
> really hard to reproduce and I don't have a reliable test case.
>
> -Alan
>
> diff --git a/src/share/classes/java/nio/file/FileTreeWalker.java
> b/src/share/classes/java/nio/file/FileTreeWalker.java
> --- a/src/share/classes/java/nio/file/FileTreeWalker.java
> +++ b/src/share/classes/java/nio/file/FileTreeWalker.java
> @@ -92,7 +92,7 @@ class FileTreeWalker {
> (System.getSecurityManager() == null))
> {
> BasicFileAttributes cached = ((BasicFileAttributesHolder)file).get();
> - if (!followLinks || !cached.isSymbolicLink())
> + if (cached != null && (!followLinks || !cached.isSymbolicLink()))
> attrs = cached;
> }
> IOException exc = null;
>


More information about the nio-dev mailing list