diff --git a/jdk/src/share/classes/java/io/FilePermission.java b/jdk/src/share/classes/java/io/FilePermission.java index 88c98fbddf3..aeab68b7907 100644 --- a/jdk/src/share/classes/java/io/FilePermission.java +++ b/jdk/src/share/classes/java/io/FilePermission.java @@ -209,7 +209,17 @@ public final class FilePermission extends Permission implements Serializable { cpath = AccessController.doPrivileged(new PrivilegedAction() { public String run() { try { - return sun.security.provider.PolicyFile.canonPath(cpath); + String path = cpath; + if (cpath.endsWith("*")) { + // call getCanonicalPath with a path with wildcard character + // replaced to avoid calling it with paths that are + // intended to match all entries in a directory + path = path.substring(0, path.length()-1) + "-"; + path = new File(path).getCanonicalPath(); + return path.substring(0, path.length()-1) + "*"; + } else { + return new File(path).getCanonicalPath(); + } } catch (IOException ioe) { return cpath; } diff --git a/jdk/src/share/classes/sun/misc/FloatingDecimal.java b/jdk/src/share/classes/sun/misc/FloatingDecimal.java index f0316ff5631..279dd6180fe 100644 --- a/jdk/src/share/classes/sun/misc/FloatingDecimal.java +++ b/jdk/src/share/classes/sun/misc/FloatingDecimal.java @@ -730,7 +730,7 @@ public class FloatingDecimal{ * Thus we will need more than one digit if we're using * E-form */ - if ( decExp <= -3 || decExp >= 8 ){ + if ( decExp < -3 || decExp >= 8 ){ high = low = false; } while( ! low && ! high ){ @@ -783,7 +783,7 @@ public class FloatingDecimal{ * Thus we will need more than one digit if we're using * E-form */ - if ( decExp <= -3 || decExp >= 8 ){ + if ( decExp < -3 || decExp >= 8 ){ high = low = false; } while( ! low && ! high ){ @@ -847,7 +847,7 @@ public class FloatingDecimal{ * Thus we will need more than one digit if we're using * E-form */ - if ( decExp <= -3 || decExp >= 8 ){ + if ( decExp < -3 || decExp >= 8 ){ high = low = false; } while( ! low && ! high ){ diff --git a/jdk/src/share/classes/sun/security/provider/PolicyFile.java b/jdk/src/share/classes/sun/security/provider/PolicyFile.java index 324e745f375..ed4757d3cff 100644 --- a/jdk/src/share/classes/sun/security/provider/PolicyFile.java +++ b/jdk/src/share/classes/sun/security/provider/PolicyFile.java @@ -1832,8 +1832,9 @@ public class PolicyFile extends java.security.Policy { return canonCs; } - // public for java.io.FilePermission - public static String canonPath(String path) throws IOException { + // Wrapper to return a canonical path that avoids calling getCanonicalPath() + // with paths that are intended to match all entries in the directory + private static String canonPath(String path) throws IOException { if (path.endsWith("*")) { path = path.substring(0, path.length()-1) + "-"; path = new File(path).getCanonicalPath(); diff --git a/jdk/test/java/lang/Double/ToString.java b/jdk/test/java/lang/Double/ToString.java new file mode 100644 index 00000000000..f553d4ebb6c --- /dev/null +++ b/jdk/test/java/lang/Double/ToString.java @@ -0,0 +1,39 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 4428022 + * @summary Tests for Double.toString + * @author Andrew Haley + */ + +public class ToString { + + public static void main(String args[]) { + if (!Double.toString(0.001).equals("0.001")) + throw new RuntimeException("Double.toString(0.001) is not \"0.001\""); + if (!Double.toString(0.002).equals("0.002")) + throw new RuntimeException("Double.toString(0.001) is not \"0.002\""); + } +}