[ http://issues.apache.org/jira/browse/XERCESJ-1063?page=history ]
Michael Glavassevich reassigned XERCESJ-1063:
---------------------------------------------
Assign To: Michael Glavassevich
> Fatal error is called for valid surrogate characters
> ----------------------------------------------------
>
> Key: XERCESJ-1063
> URL: http://issues.apache.org/jira/browse/XERCESJ-1063
> Project: Xerces2-J
> Type: Bug
> Components: Serialization
> Versions: 2.6.2
> Reporter: Serghei Balaban
> Assignee: Michael Glavassevich
>
> I use XMLSerializer and XML11Serializer to generate xml messages. When I was
> testing my application, I found that valid surrogate characters can be
> misinterpreted in printText( char[],int,int,boolean,boolean) methods of
> XMLSerializer and XML11Serializer classes. In excerpt from XMLSerializer.java
> (CVS apache.org) you can see that the variable length is decremented while
> the variable start is incremented, so when start>length the check for
> surrogate is never called and the fatal error is raised:
> protected void printText( char[] chars, int start, int length,
> boolean preserveSpace, boolean unescaped )
> throws IOException {
> int index;
> char ch;
> if ( preserveSpace ) {
> // Preserving spaces: the text must print exactly as it is,
> // without breaking when spaces appear in the text and without
> // consolidating spaces. If a line terminator is used, a line
> // break will occur.
> while ( length-- > 0 ) {
> ch = chars[ start ];
> ++start;
> if (!XMLChar.isValid(ch)) {
> // check if it is surrogate
> if (++start <length) {
> surrogates(ch, chars[start]);
> } else {
> fatalError("The character '"+(char)ch+"' is an
> invalid XML character");
> }
> continue;
> }
> if ( unescaped )
> _printer.printText( ch );
> else
> printXMLChar( ch );
> }
> } else {
> // Not preserving spaces: print one part at a time, and
> // use spaces between parts to break them into different
> // lines. Spaces at beginning of line will be stripped
> // by printing mechanism. Line terminator is treated
> // no different than other text part.
> while ( length-- > 0 ) {
> ch = chars[ start ];
> ++start;
> if (!XMLChar.isValid(ch)) {
> // check if it is surrogate
> if (++start <length) {
> surrogates(ch, chars[start]);
> } else {
> fatalError("The character '"+(char)ch+"' is an
> invalid XML character");
> }
> continue;
> }
> if ( unescaped )
> _printer.printText( ch );
> else
> printXMLChar( ch );
> }
> }
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]