Fix for enso 'new File("", String)' regression.
OpenJdk is treating empty parent string as a special case,
it substitutes parent string with the filesystem default parent value "/". Some applications are failing to load assets
because of this regression.
Bug: 25859957
Change-Id: I0a235db2a76a0deec005073eca82655495496f53
diff --git a/luni/src/test/java/libcore/java/io/FileTest.java b/luni/src/test/java/libcore/java/io/FileTest.java
index 13a6f0b..518c4e3 100644
--- a/luni/src/test/java/libcore/java/io/FileTest.java
+++ b/luni/src/test/java/libcore/java/io/FileTest.java
@@ -322,5 +322,17 @@
}
}
+ // http://b/25859957
+ //
+ // OpenJdk is treating empty parent string as a special case,
+ // it substitutes parent string with the filesystem default parent value "/"
+ // This wasn't the case before the switch to openJdk.
+ public void testEmptyParentString() {
+ File f1 = new File("", "foo.bar");
+ File f2 = new File((String)null, "foo.bar");
+ assertEquals("foo.bar", f1.toString());
+ assertEquals("foo.bar", f2.toString());
+ }
+
private static native void nativeTestFilesWithSurrogatePairs(String base);
}
diff --git a/ojluni/src/main/java/java/io/File.java b/ojluni/src/main/java/java/io/File.java
index dd78f69..a8b5241 100755
--- a/ojluni/src/main/java/java/io/File.java
+++ b/ojluni/src/main/java/java/io/File.java
@@ -315,14 +315,9 @@
if (child == null) {
throw new NullPointerException();
}
- if (parent != null) {
- if (parent.equals("")) {
- this.path = fs.resolve(fs.getDefaultParent(),
- fs.normalize(child));
- } else {
- this.path = fs.resolve(fs.normalize(parent),
- fs.normalize(child));
- }
+ if (parent != null && !parent.isEmpty()) {
+ this.path = fs.resolve(fs.normalize(parent),
+ fs.normalize(child));
} else {
this.path = fs.normalize(child);
}
@@ -1880,7 +1875,7 @@
throws IOException
{
// Android-changed: Use Math.randomIntInternal. This (pseudo) random number
- // is initialized post-fork
+ // is initialized post-fork
int n = Math.randomIntInternal();
if (n == Integer.MIN_VALUE) {
n = 0; // corner case