Mercurial > hg > openjdk > jdk6 > jaxp
changeset 102:9228eb02e753
8032909: XSLT string-length returns incorrect length when string includes complementary chars
Reviewed-by: joehw, dfuchs
author | aefimov |
---|---|
date | Fri, 21 Feb 2014 16:57:21 +0400 |
parents | be7aed69d65e |
children | f84335866983 |
files | drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/compiler/StringLengthCall.java drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java |
diffstat | 2 files changed, 13 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/compiler/StringLengthCall.java Wed Oct 08 19:12:51 2014 +0100 +++ b/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/compiler/StringLengthCall.java Fri Feb 21 16:57:21 2014 +0400 @@ -26,7 +26,7 @@ import java.util.Vector; import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen; -import com.sun.org.apache.bcel.internal.generic.INVOKEVIRTUAL; +import com.sun.org.apache.bcel.internal.generic.INVOKESTATIC; import com.sun.org.apache.bcel.internal.generic.InstructionList; import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator; import com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator; @@ -51,7 +51,8 @@ il.append(methodGen.loadContextNode()); Type.Node.translateTo(classGen, methodGen, Type.String); } - il.append(new INVOKEVIRTUAL(cpg.addMethodref(STRING_CLASS, - "length", "()I"))); + il.append(new INVOKESTATIC(cpg.addMethodref(BASIS_LIBRARY_CLASS, + "getStringLength", + "(Ljava/drop_included/jaxp_src/lang/String;)I"))); } }
--- a/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java Wed Oct 08 19:12:51 2014 +0100 +++ b/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java Fri Feb 21 16:57:21 2014 +0400 @@ -1595,5 +1595,14 @@ } + /** + * Utility method to calculate string-length as a number of code points, + * to avoid possible errors with string that contains + * complementary characters + */ + public static int getStringLength(String str) { + return str.codePointCount(0,str.length()); + } + //-- End utility functions }