Mercurial > hg > openjdk > jdk7 > jdk
changeset 1311:7704895771b5
6847092: (cs) CharsetEncoder.isLegalReplacement of US_ASCII behaves differently since
Summary: Updated the US_ASCII and ISO-8859-1 to fix the failure.
Reviewed-by: alanb, martin
author | sherman |
---|---|
date | Mon, 22 Jun 2009 19:22:47 -0700 |
parents | b0b249933c37 |
children | ce55eb6668d9 |
files | src/share/classes/sun/nio/cs/ISO_8859_1.java src/share/classes/sun/nio/cs/US_ASCII.java test/sun/nio/cs/FindASCIIReplBugs.java |
diffstat | 3 files changed, 62 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/sun/nio/cs/ISO_8859_1.java Mon Jun 22 16:41:27 2009 -0700 +++ b/src/share/classes/sun/nio/cs/ISO_8859_1.java Mon Jun 22 19:22:47 2009 -0700 @@ -142,7 +142,7 @@ } public boolean isLegalReplacement(byte[] repl) { - return (repl.length == 1); // we accept any byte value + return true; // we accept any byte value } private final Surrogate.Parser sgp = new Surrogate.Parser();
--- a/src/share/classes/sun/nio/cs/US_ASCII.java Mon Jun 22 16:41:27 2009 -0700 +++ b/src/share/classes/sun/nio/cs/US_ASCII.java Mon Jun 22 19:22:47 2009 -0700 @@ -160,7 +160,8 @@ } public boolean isLegalReplacement(byte[] repl) { - return (repl.length == 1 && repl[0] >= 0); + return (repl.length == 1 && repl[0] >= 0) || + super.isLegalReplacement(repl); } private final Surrogate.Parser sgp = new Surrogate.Parser();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/nio/cs/FindASCIIReplBugs.java Mon Jun 22 19:22:47 2009 -0700 @@ -0,0 +1,59 @@ +/* + * 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 6847092 + * @summary test if isLegalReplacement() works correctly for ascii charsets + */ + +import java.util.*; +import java.nio.*; +import java.nio.charset.*; + +public class FindASCIIReplBugs { + private static int failures = 0; + + public static void main(String[] args) throws Exception { + Charset ascii = Charset.forName("ASCII"); + for (Map.Entry<String,Charset> e + : Charset.availableCharsets().entrySet()) { + String csn = e.getKey(); + Charset cs = e.getValue(); + if (!cs.contains(ascii) || + csn.matches(".*2022.*") || //iso2022 family + csn.matches(".*UTF-[16|32].*")) //multi-bytes + continue; + if (! cs.canEncode()) continue; + + byte[] sc_subs = { 'A'}; + byte[] mc_subs = { 'A', 'S'}; + if (!cs.newEncoder().isLegalReplacement (sc_subs) || + !cs.newEncoder().isLegalReplacement (mc_subs)) { + System.out.printf(" %s: isLegalReplacement failed!%n", csn); + failures++; + } + } + if (failures > 0) + throw new Exception(failures + "tests failed"); + } +}