--- a/jdk/src/share/classes/com/sun/security/auth/callback/TextCallbackHandler.java Tue Aug 18 12:10:12 2009 +0800
+++ b/jdk/src/share/classes/com/sun/security/auth/callback/TextCallbackHandler.java Tue Aug 18 16:53:23 2009 -0700
@@ -129,7 +129,7 @@
System.err.print(pc.getPrompt());
System.err.flush();
- pc.setPassword(Password.readPassword(System.in));
+ pc.setPassword(Password.readPassword(System.in, pc.isEchoOn()));
} else if (callbacks[i] instanceof ConfirmationCallback) {
confirmation = (ConfirmationCallback) callbacks[i];
--- a/jdk/src/share/classes/sun/nio/cs/ext/ISO2022.java Tue Aug 18 12:10:12 2009 +0800
+++ b/jdk/src/share/classes/sun/nio/cs/ext/ISO2022.java Tue Aug 18 16:53:23 2009 -0700
@@ -388,9 +388,9 @@
protected static class Encoder extends CharsetEncoder {
private final Surrogate.Parser sgp = new Surrogate.Parser();
- private final byte SS2 = (byte)0x8e;
- private final byte PLANE2 = (byte)0xA2;
- private final byte PLANE3 = (byte)0xA3;
+ public static final byte SS2 = (byte)0x8e;
+ public static final byte PLANE2 = (byte)0xA2;
+ public static final byte PLANE3 = (byte)0xA3;
private final byte MSB = (byte)0x80;
protected final byte maximumDesignatorLength = 4;
--- a/jdk/src/share/classes/sun/nio/cs/ext/ISO2022_CN_CNS.java Tue Aug 18 12:10:12 2009 +0800
+++ b/jdk/src/share/classes/sun/nio/cs/ext/ISO2022_CN_CNS.java Tue Aug 18 16:53:23 2009 -0700
@@ -76,6 +76,15 @@
} catch (Exception e) { }
}
+ private byte[] bb = new byte[4];
+ public boolean canEncode(char c) {
+ int n = 0;
+ return (c <= '\u007f' ||
+ (n = ((EUC_TW.Encoder)ISOEncoder).toEUC(c, bb)) == 2 ||
+ (n == 4 && bb[0] == SS2 &&
+ (bb[1] == PLANE2 || bb[1] == PLANE3)));
+ }
+
/*
* Since ISO2022-CN-CNS possesses a CharsetEncoder
* without the corresponding CharsetDecoder half the
--- a/jdk/src/share/classes/sun/security/util/Password.java Tue Aug 18 12:10:12 2009 +0800
+++ b/jdk/src/share/classes/sun/security/util/Password.java Tue Aug 18 16:53:23 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-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
@@ -37,6 +37,14 @@
public class Password {
/** Reads user password from given input stream. */
public static char[] readPassword(InputStream in) throws IOException {
+ return readPassword(in, false);
+ }
+
+ /** Reads user password from given input stream.
+ * @param isEchoOn true if the password should be echoed on the screen
+ */
+ public static char[] readPassword(InputStream in, boolean isEchoOn)
+ throws IOException {
char[] consoleEntered = null;
byte[] consoleBytes = null;
@@ -44,7 +52,7 @@
try {
// Use the new java.io.Console class
Console con = null;
- if (in == System.in && ((con = System.console()) != null)) {
+ if (!isEchoOn && in == System.in && ((con = System.console()) != null)) {
consoleEntered = con.readPassword();
// readPassword returns "" if you just print ENTER,
// to be compatible with old Password class, change to null
--- a/jdk/src/windows/classes/sun/nio/fs/WindowsFileSystem.java Tue Aug 18 12:10:12 2009 +0800
+++ b/jdk/src/windows/classes/sun/nio/fs/WindowsFileSystem.java Tue Aug 18 16:53:23 2009 -0700
@@ -283,25 +283,15 @@
}
}
- // match in uppercase
- StringBuilder sb = new StringBuilder(expr.length());
- for (int i=0; i<expr.length(); i++) {
- sb.append(Character.toUpperCase(expr.charAt(i)));
- }
- expr = sb.toString();
+ // match in unicode_case_insensitive
+ final Pattern pattern = Pattern.compile(expr,
+ Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
// return matcher
- final Pattern pattern = Pattern.compile(expr);
return new PathMatcher() {
@Override
public boolean matches(Path path) {
- // match in uppercase
- String s = path.toString();
- StringBuilder sb = new StringBuilder(s.length());
- for (int i=0; i<s.length(); i++) {
- sb.append( Character.toUpperCase(s.charAt(i)) );
- }
- return pattern.matcher(sb).matches();
+ return pattern.matcher(path.toString()).matches();
}
};
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/com/sun/security/auth/callback/TextCallbackHandler/Password.java Tue Aug 18 16:53:23 2009 -0700
@@ -0,0 +1,47 @@
+/*
+ * 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 6825240
+ * @summary Password.readPassword() echos the input when System.Console is null
+ * @ignore run these by hand
+ */
+
+import com.sun.security.auth.callback.TextCallbackHandler;
+import javax.security.auth.callback.*;
+
+public class Password {
+ public static void main(String args[]) throws Exception {
+ TextCallbackHandler h = new TextCallbackHandler();
+ PasswordCallback nc = new PasswordCallback("Invisible: ", false);
+ PasswordCallback nc2 = new PasswordCallback("Visible: ", true);
+
+ System.out.println("Two passwords will be prompted for. The first one " +
+ "should have echo off, the second one on. Otherwise, this test fails");
+ Callback[] callbacks = { nc, nc2 };
+ h.handle(callbacks);
+ System.out.println("You input " + new String(nc.getPassword()) +
+ " and " + new String(nc2.getPassword()));
+ }
+}
--- a/jdk/test/java/nio/file/PathMatcher/Basic.java Tue Aug 18 12:10:12 2009 +0800
+++ b/jdk/test/java/nio/file/PathMatcher/Basic.java Tue Aug 18 16:53:23 2009 -0700
@@ -22,7 +22,7 @@
*/
/* @test
- * @bug 4313887
+ * @bug 4313887 6866397
* @summary Unit test for java.nio.file.PathMatcher
*/
@@ -68,6 +68,20 @@
}
}
+ static void assertRegExMatch(String path, String pattern) {
+ System.out.format("Test regex pattern: %s", pattern);
+ Path file = Paths.get(path);
+ boolean matched = file.getFileSystem()
+ .getPathMatcher("regex:" + pattern).matches(file);
+ if (matched) {
+ System.out.println(" OKAY");
+ } else {
+ System.out.println(" ==> UNEXPECTED RESULT!");
+ failures++;
+ }
+ }
+
+
public static void main(String[] args) {
// basic
assertMatch("foo.html", "foo.html");
@@ -140,21 +154,13 @@
assertMatch("one*two", "one\\*two");
}
-
+ // regex syntax
+ assertRegExMatch("foo.html", ".*\\.html");
- // regex syntax
- {
- String pattern = ".*\\.html";
- System.out.format("Test regex pattern: %s", pattern);
- Path file = Paths.get("foo.html");
- boolean matched = file.getFileSystem()
- .getPathMatcher("regex:" + pattern).matches(file);
- if (matched) {
- System.out.println(" OKAY");
- } else {
- System.out.println(" ==> UNEXPECTED RESULT!");
- failures++;
- }
+ if (System.getProperty("os.name").startsWith("Windows")) {
+ assertRegExMatch("foo012", "foo\\d+");
+ assertRegExMatch("fo o", "fo\\so");
+ assertRegExMatch("foo", "\\w+");
}
// unknown syntax
--- a/jdk/test/sun/nio/cs/FindCanEncodeBugs.java Tue Aug 18 12:10:12 2009 +0800
+++ b/jdk/test/sun/nio/cs/FindCanEncodeBugs.java Tue Aug 18 16:53:23 2009 -0700
@@ -22,7 +22,7 @@
*/
/* @test
- @bug 5066863 5066867 5066874 5066879 5066884 5066887 5065777
+ @bug 5066863 5066867 5066874 5066879 5066884 5066887 5065777 6730652
@summary canEncode() false iff encode() throws CharacterCodingException
@run main/timeout=1200 FindCanEncodeBugs
@author Martin Buchholz
@@ -52,9 +52,7 @@
String csn = e.getKey();
Charset cs = e.getValue();
- if (! cs.canEncode() ||
- csn.matches("x-COMPOUND_TEXT") ||
- csn.matches("x-ISO-2022-CN-CNS")) // ISO2022_CN_CNS supports less
+ if (! cs.canEncode() || csn.matches("x-COMPOUND_TEXT"))
continue;
//System.out.println(csn);