This commit is contained in:
Abhijit Saha 2009-08-18 16:53:23 -07:00
commit fad0f2d2f6
8 changed files with 97 additions and 39 deletions

View File

@ -129,7 +129,7 @@ public class TextCallbackHandler implements CallbackHandler {
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];

View File

@ -388,9 +388,9 @@ abstract class ISO2022
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;

View File

@ -76,6 +76,15 @@ public class ISO2022_CN_CNS extends ISO2022 implements HistoricallyNamedCharset
} 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

View File

@ -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 @@ import java.util.Arrays;
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 @@ public class Password {
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

View File

@ -283,25 +283,15 @@ class WindowsFileSystem
}
}
// 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();
}
};
}

View File

@ -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()));
}
}

View File

@ -22,7 +22,7 @@
*/
/* @test
* @bug 4313887
* @bug 4313887 6866397
* @summary Unit test for java.nio.file.PathMatcher
*/
@ -68,6 +68,20 @@ public class Basic {
}
}
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 @@ public class Basic {
assertMatch("one*two", "one\\*two");
}
// 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++;
}
assertRegExMatch("foo.html", ".*\\.html");
if (System.getProperty("os.name").startsWith("Windows")) {
assertRegExMatch("foo012", "foo\\d+");
assertRegExMatch("fo o", "fo\\so");
assertRegExMatch("foo", "\\w+");
}
// unknown syntax

View File

@ -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 @@ public class FindCanEncodeBugs {
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);