提交 a4902ef2 编写于 作者: V VKARNAUK

2229575: Swing HTML parser can't properly decode codepoints outside the...

2229575: Swing HTML parser can't properly decode codepoints outside the Unicode Plane 0 into a surrogate pair
Reviewed-by: rupashka
上级 cbfc54fb
/*
* Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 2012, 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
......@@ -952,7 +952,7 @@ class Parser implements DTDConstants {
ch = readCh();
break;
}
char data[] = {mapNumericReference((char) n)};
char data[] = mapNumericReference(n);
return data;
}
addString('#');
......@@ -1021,7 +1021,7 @@ class Parser implements DTDConstants {
}
/**
* Converts numeric character reference to Unicode character.
* Converts numeric character reference to char array.
*
* Normally the code in a reference should be always converted
* to the Unicode character with the same code, but due to
......@@ -1030,13 +1030,21 @@ class Parser implements DTDConstants {
* to displayable characters with other codes.
*
* @param c the code of numeric character reference.
* @return the character corresponding to the reference code.
* @return a char array corresponding to the reference code.
*/
private char mapNumericReference(char c) {
if (c < 130 || c > 159) {
return c;
private char[] mapNumericReference(int c) {
char[] data;
if (c >= 0xffff) { // outside unicode BMP.
try {
data = Character.toChars(c);
} catch (IllegalArgumentException e) {
data = new char[0];
}
} else {
data = new char[1];
data[0] = (c < 130 || c > 159) ? (char) c : cp1252Map[c - 130];
}
return cp1252Map[c - 130];
return data;
}
/**
......
/*
* Copyright (c) 2010, 2012, 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
* 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 6836089
* @summary Tests correct parsing of characters outside Base Multilingual Plane
* @author Vladislav Karnaukhov
*/
import javax.swing.*;
import javax.swing.text.html.*;
public class bug6836089 {
public static void main(String[] args) throws Exception {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
JTextPane htmlPane = new JTextPane();
htmlPane.setEditorKit(new HTMLEditorKit());
htmlPane.setText("<html><head></head><body>&#131072;</body></html>");
String str = htmlPane.getText();
if (str.contains("&#0;")) {
throw new RuntimeException("Test failed");
}
}
});
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册