SYNOPSIS
--------
File.setWritable() / File.canWrite() not behaving as expected
OPERATING SYSTEM
----------------
Windows
FULL JDK VERSION
----------------
Java 6, from 1.6.0_23 onwards
Not reproducible on Java 7
PROBLEM DESCRIPTION from LICENSEE
---------------------------------
If setWritable(false) returns true, canWrite() should return false.
From 1.6.0_23, canWrite() is returning true under these circumstances, which is not correct. The problem seems to be caused by an incomplete backport of the changes for CR 6728842 from Java 7 (see suggested fix).
TESTCASE
--------
import java.io.File;
public class Test {
public static void main(String[] args){
File f = new File("wibblefish");
f.deleteOnExit();
if (f.mkdirs())
if (f.setWritable(false,false)) {
if (f.canWrite()) {
System.out.println("Test failed");
} else {
System.out.println("Test passed (setWritable() succeeded)");
}
} else {
System.out.println("Test Passed (setWritable() failed)");
}
}
}
REPRODUCTION INSTRUCTIONS
-------------------------
Compile and execute the above given testcase.
Expected output:
Test passed (setWritable() succeeded)
OR
Test Passed (setWritable() failed)
Observed output:
Test failed
SUGGESTED FIX from LICENSEE
---------------------------
See Suggested Fix section of CR.