diff --git a/src/java.base/aix/classes/sun/nio/fs/AixFileSystem.java b/src/java.base/aix/classes/sun/nio/fs/AixFileSystem.java index c64062e551c..f1763ce3cae 100644 --- a/src/java.base/aix/classes/sun/nio/fs/AixFileSystem.java +++ b/src/java.base/aix/classes/sun/nio/fs/AixFileSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2013 SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -38,8 +38,8 @@ import static sun.nio.fs.AixNativeDispatcher.*; class AixFileSystem extends UnixFileSystem { - AixFileSystem(UnixFileSystemProvider provider) { - super(provider); + AixFileSystem(UnixFileSystemProvider provider, String dir) { + super(provider, dir); } @Override diff --git a/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java b/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java index 41500b6bb5b..c0d17dd44b5 100644 --- a/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java +++ b/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2013 SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -38,8 +38,8 @@ class AixFileSystemProvider extends UnixFileSystemProvider { } @Override - AixFileSystem newFileSystem() { - return new AixFileSystem(this); + AixFileSystem newFileSystem(String dir) { + return new AixFileSystem(this, dir); } /** diff --git a/src/java.base/linux/classes/sun/nio/fs/LinuxFileSystem.java b/src/java.base/linux/classes/sun/nio/fs/LinuxFileSystem.java index 5d492f98967..44e957f54fb 100644 --- a/src/java.base/linux/classes/sun/nio/fs/LinuxFileSystem.java +++ b/src/java.base/linux/classes/sun/nio/fs/LinuxFileSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,8 +41,8 @@ import static sun.nio.fs.UnixConstants.*; */ class LinuxFileSystem extends UnixFileSystem { - LinuxFileSystem(UnixFileSystemProvider provider) { - super(provider); + LinuxFileSystem(UnixFileSystemProvider provider, String dir) { + super(provider, dir); } @Override diff --git a/src/java.base/linux/classes/sun/nio/fs/LinuxFileSystemProvider.java b/src/java.base/linux/classes/sun/nio/fs/LinuxFileSystemProvider.java index 2d1ca8067cd..a1c2aed4bd2 100644 --- a/src/java.base/linux/classes/sun/nio/fs/LinuxFileSystemProvider.java +++ b/src/java.base/linux/classes/sun/nio/fs/LinuxFileSystemProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,8 +42,8 @@ class LinuxFileSystemProvider extends UnixFileSystemProvider { } @Override - LinuxFileSystem newFileSystem() { - return new LinuxFileSystem(this); + LinuxFileSystem newFileSystem(String dir) { + return new LinuxFileSystem(this, dir); } @Override diff --git a/src/java.base/macosx/classes/sun/nio/fs/BsdFileSystem.java b/src/java.base/macosx/classes/sun/nio/fs/BsdFileSystem.java index fa3040615f2..3b99a456288 100644 --- a/src/java.base/macosx/classes/sun/nio/fs/BsdFileSystem.java +++ b/src/java.base/macosx/classes/sun/nio/fs/BsdFileSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,8 +46,8 @@ import static sun.nio.fs.UnixNativeDispatcher.unlink; class BsdFileSystem extends UnixFileSystem { - BsdFileSystem(UnixFileSystemProvider provider) { - super(provider); + BsdFileSystem(UnixFileSystemProvider provider, String dir) { + super(provider, dir); } @Override diff --git a/src/java.base/macosx/classes/sun/nio/fs/BsdFileSystemProvider.java b/src/java.base/macosx/classes/sun/nio/fs/BsdFileSystemProvider.java index 4c73211418b..fe997a38d96 100644 --- a/src/java.base/macosx/classes/sun/nio/fs/BsdFileSystemProvider.java +++ b/src/java.base/macosx/classes/sun/nio/fs/BsdFileSystemProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,8 +39,8 @@ class BsdFileSystemProvider extends UnixFileSystemProvider { } @Override - BsdFileSystem newFileSystem() { - return new BsdFileSystem(this); + BsdFileSystem newFileSystem(String dir) { + return new BsdFileSystem(this, dir); } @Override diff --git a/src/java.base/macosx/classes/sun/nio/fs/MacOSXFileSystem.java b/src/java.base/macosx/classes/sun/nio/fs/MacOSXFileSystem.java index d6deb82bf2b..9303c713bf2 100644 --- a/src/java.base/macosx/classes/sun/nio/fs/MacOSXFileSystem.java +++ b/src/java.base/macosx/classes/sun/nio/fs/MacOSXFileSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,8 +48,8 @@ class MacOSXFileSystem extends BsdFileSystem { && ("".equals(value) || Boolean.parseBoolean(value)); } - MacOSXFileSystem(UnixFileSystemProvider provider) { - super(provider); + MacOSXFileSystem(UnixFileSystemProvider provider, String dir) { + super(provider, dir); } boolean isCaseInsensitiveAndPreserving() { diff --git a/src/java.base/macosx/classes/sun/nio/fs/MacOSXFileSystemProvider.java b/src/java.base/macosx/classes/sun/nio/fs/MacOSXFileSystemProvider.java index 010c3129a60..256a9b5e613 100644 --- a/src/java.base/macosx/classes/sun/nio/fs/MacOSXFileSystemProvider.java +++ b/src/java.base/macosx/classes/sun/nio/fs/MacOSXFileSystemProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,8 +40,8 @@ class MacOSXFileSystemProvider extends BsdFileSystemProvider { } @Override - MacOSXFileSystem newFileSystem() { - return new MacOSXFileSystem(this); + MacOSXFileSystem newFileSystem(String dir) { + return new MacOSXFileSystem(this, dir); } @Override diff --git a/src/java.base/unix/classes/sun/nio/fs/UnixFileSystem.java b/src/java.base/unix/classes/sun/nio/fs/UnixFileSystem.java index cae69438935..7cab6d31690 100644 --- a/src/java.base/unix/classes/sun/nio/fs/UnixFileSystem.java +++ b/src/java.base/unix/classes/sun/nio/fs/UnixFileSystem.java @@ -52,7 +52,6 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; import jdk.internal.misc.Blocker; -import jdk.internal.util.StaticProperty; import sun.nio.ch.DirectBuffer; import sun.nio.ch.IOStatus; import sun.security.action.GetPropertyAction; @@ -74,17 +73,39 @@ abstract class UnixFileSystem private final UnixFileSystemProvider provider; private final byte[] defaultDirectory; + private final boolean needToResolveAgainstDefaultDirectory; private final UnixPath rootDirectory; // package-private - UnixFileSystem(UnixFileSystemProvider provider) { - String dir = StaticProperty.userDir(); + UnixFileSystem(UnixFileSystemProvider provider, String dir) { this.provider = provider; this.defaultDirectory = Util.toBytes(UnixPath.normalizeAndCheck(dir)); if (this.defaultDirectory[0] != '/') { throw new RuntimeException("default directory must be absolute"); } + // if process-wide chdir is allowed or default directory is not the + // process working directory then paths must be resolved against the + // default directory. + String propValue = GetPropertyAction + .privilegedGetProperty("sun.nio.fs.chdirAllowed", "false"); + boolean chdirAllowed = propValue.isEmpty() ? true : Boolean.parseBoolean(propValue); + if (chdirAllowed) { + this.needToResolveAgainstDefaultDirectory = true; + } else { + byte[] cwd = UnixNativeDispatcher.getcwd(); + boolean defaultIsCwd = (cwd.length == defaultDirectory.length); + if (defaultIsCwd) { + for (int i=0; iNewByteArray(env, len); + if (result != NULL) { + (*env)->SetByteArrayRegion(env, result, 0, len, (jbyte*)buf); + } + } + return result; +} + JNIEXPORT jbyteArray Java_sun_nio_fs_UnixNativeDispatcher_strerror(JNIEnv* env, jclass this, jint error) { diff --git a/src/java.base/windows/classes/sun/nio/fs/WindowsFileSystem.java b/src/java.base/windows/classes/sun/nio/fs/WindowsFileSystem.java index 545bcd60645..f2cded1b372 100644 --- a/src/java.base/windows/classes/sun/nio/fs/WindowsFileSystem.java +++ b/src/java.base/windows/classes/sun/nio/fs/WindowsFileSystem.java @@ -31,7 +31,6 @@ import java.nio.file.spi.*; import java.util.*; import java.util.regex.Pattern; import java.io.IOException; -import jdk.internal.util.StaticProperty; class WindowsFileSystem extends FileSystem @@ -43,11 +42,12 @@ class WindowsFileSystem private final String defaultRoot; // package-private - WindowsFileSystem(WindowsFileSystemProvider provider) { + WindowsFileSystem(WindowsFileSystemProvider provider, + String dir) + { this.provider = provider; // parse default directory and check it is absolute - String dir = StaticProperty.userDir(); WindowsPathParser.Result result = WindowsPathParser.parse(dir); if ((result.type() != WindowsPathType.ABSOLUTE) && diff --git a/src/java.base/windows/classes/sun/nio/fs/WindowsFileSystemProvider.java b/src/java.base/windows/classes/sun/nio/fs/WindowsFileSystemProvider.java index 1d164132920..f27ea450606 100644 --- a/src/java.base/windows/classes/sun/nio/fs/WindowsFileSystemProvider.java +++ b/src/java.base/windows/classes/sun/nio/fs/WindowsFileSystemProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,6 +33,7 @@ import java.net.URI; import java.util.concurrent.ExecutorService; import java.io.*; import java.util.*; +import jdk.internal.util.StaticProperty; import sun.nio.ch.ThreadPool; import sun.security.util.SecurityConstants; @@ -48,7 +49,7 @@ class WindowsFileSystemProvider private final WindowsFileSystem theFileSystem; public WindowsFileSystemProvider() { - theFileSystem = new WindowsFileSystem(this); + theFileSystem = new WindowsFileSystem(this, StaticProperty.userDir()); } WindowsFileSystem theFileSystem() {