-
Bug
-
Resolution: Fixed
-
P3
-
7
-
b23
-
x86
-
windows_7
-
Not verified
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-2224611 | 7u6 | Sean Coffey | P3 | Closed | Fixed | b12 |
FULL PRODUCT VERSION :
java version "1.7.0_01"
Java(TM) SE Runtime Environment (build 1.7.0_01-b08)
Java HotSpot(TM) 64-Bit Server VM (build 21.1-b02, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Any version of Windows 32 or 64 bits since Server 2003 (did not test on older versions)
EXTRA RELEVANT SYSTEM CONFIGURATION :
NTFS filesystem
Seems to happen more frequently when shadow volumes are used
A DESCRIPTION OF THE PROBLEM :
In java.nio.file.FileTreeWalker line 83:
private FileVisitResult walk(Path file, int depth, List<AncestorDirectory> ancestors)
throws IOException
{
// if attributes are cached then use them if possible
BasicFileAttributes attrs = null;
if ((depth > 0) &&
(file instanceof BasicFileAttributesHolder) &&
(System.getSecurityManager() == null))
{
BasicFileAttributes cached = ((BasicFileAttributesHolder)file).get();
if (!followLinks || !cached.isSymbolicLink())
attrs = cached;
}
...
The optimization that tries to reuse the cached attributes sometimes gets null attributes, that is ((BasicFileAttributesHolder)file).get() returns null so that cached is null. As the next test checks is cached.isSymbolicLink without checking first if it is not null, the code generates a NPE.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Use a FileTreeWalker starting from C:\ (having an antivirus scanner or other concurrent programs accessing the filesystem concurrently might help trigger the bug)
Most often got a stack trace with a depth of 5:
java.lang.NullPointerException
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.Files.walkFileTree(Unknown Source)
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Walking directories without errors
ACTUAL -
java.lang.NullPointerException
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.Files.walkFileTree(Unknown Source)
ERROR MESSAGES/STACK TRACES THAT OCCUR :
java.lang.NullPointerException
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.Files.walkFileTree(Unknown Source)
REPRODUCIBILITY :
This bug can be reproduced often.
---------- BEGIN SOURCE ----------
Any use of FileTreeWalker should do
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
No workaround. Duplicate the code of FileTreeWalker to write your own and test for null cached attributes.
java version "1.7.0_01"
Java(TM) SE Runtime Environment (build 1.7.0_01-b08)
Java HotSpot(TM) 64-Bit Server VM (build 21.1-b02, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Any version of Windows 32 or 64 bits since Server 2003 (did not test on older versions)
EXTRA RELEVANT SYSTEM CONFIGURATION :
NTFS filesystem
Seems to happen more frequently when shadow volumes are used
A DESCRIPTION OF THE PROBLEM :
In java.nio.file.FileTreeWalker line 83:
private FileVisitResult walk(Path file, int depth, List<AncestorDirectory> ancestors)
throws IOException
{
// if attributes are cached then use them if possible
BasicFileAttributes attrs = null;
if ((depth > 0) &&
(file instanceof BasicFileAttributesHolder) &&
(System.getSecurityManager() == null))
{
BasicFileAttributes cached = ((BasicFileAttributesHolder)file).get();
if (!followLinks || !cached.isSymbolicLink())
attrs = cached;
}
...
The optimization that tries to reuse the cached attributes sometimes gets null attributes, that is ((BasicFileAttributesHolder)file).get() returns null so that cached is null. As the next test checks is cached.isSymbolicLink without checking first if it is not null, the code generates a NPE.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Use a FileTreeWalker starting from C:\ (having an antivirus scanner or other concurrent programs accessing the filesystem concurrently might help trigger the bug)
Most often got a stack trace with a depth of 5:
java.lang.NullPointerException
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.Files.walkFileTree(Unknown Source)
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Walking directories without errors
ACTUAL -
java.lang.NullPointerException
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.Files.walkFileTree(Unknown Source)
ERROR MESSAGES/STACK TRACES THAT OCCUR :
java.lang.NullPointerException
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.FileTreeWalker.walk(Unknown Source)
at java.nio.file.Files.walkFileTree(Unknown Source)
REPRODUCIBILITY :
This bug can be reproduced often.
---------- BEGIN SOURCE ----------
Any use of FileTreeWalker should do
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
No workaround. Duplicate the code of FileTreeWalker to write your own and test for null cached attributes.
- backported by
-
JDK-2224611 (fs) NPE in Files.walkFileTree if cached attributes are GC'ed
-
- Closed
-