Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6374239

validation for surrogate pair is incorrect in XMLSerializer and XML11Serializer

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 1.3.0
    • 1.3.0
    • xml
    • 1.3
    • generic
    • generic

      When start >= length a fatal error was emitted for surrogate characters.
        Since length is decremented on each loop and since start is an offset which
        doesn't necessarily start from zero this comparison isn't valid. Should be
        fixed now.
        
        Revision Changes Path
        1.11 +7 -10 xml-xerces/java/src/org/apache/xml/serialize/XML11Serializer.java
        
        Index: XML11Serializer.java
        ===================================================================
        RCS file: /home/cvs/xml-xerces/java/src/org/apache/xml/serialize/XML11Serializer.java,v
        retrieving revision 1.10
        retrieving revision 1.11
        diff -u -r1.10 -r1.11
        --- XML11Serializer.java 14 May 2004 19:37:53 -0000 1.10
        +++ XML11Serializer.java 18 Apr 2005 04:54:06 -0000 1.11
        @@ -482,12 +482,11 @@
                     // consolidating spaces. If a line terminator is used, a line
                     // break will occur.
                     while ( length-- > 0 ) {
        - ch = chars[ start ];
        - ++start;
        + ch = chars[start++];
                         if (!XML11Char.isXML11Valid(ch)) {
                             // check if it is surrogate
        - if (++start <length) {
        - surrogates(ch, chars[start]);
        + if ( length-- > 0) {
        + surrogates(ch, chars[start++]);
                             } else {
                                 fatalError("The character '"+(char)ch+"' is an invalid XML character");

                             }
        @@ -505,13 +504,11 @@
                     // by printing mechanism. Line terminator is treated
                     // no different than other text part.
                     while ( length-- > 0 ) {
        - ch = chars[ start ];
        - ++start;
        -
        + ch = chars[start++];
                         if (!XML11Char.isXML11Valid(ch)) {
                             // check if it is surrogate
        - if (++start <length) {
        - surrogates(ch, chars[start]);
        + if ( length-- > 0) {
        + surrogates(ch, chars[start++]);
                             } else {
                                 fatalError("The character '"+(char)ch+"' is an invalid XML character");

                             }
        
        
        
        1.65 +7 -10 xml-xerces/java/src/org/apache/xml/serialize/XMLSerializer.java
        
        Index: XMLSerializer.java
        ===================================================================
        RCS file: /home/cvs/xml-xerces/java/src/org/apache/xml/serialize/XMLSerializer.java,v
        retrieving revision 1.64
        retrieving revision 1.65
        diff -u -r1.64 -r1.65
        --- XMLSerializer.java 10 Feb 2005 19:37:21 -0000 1.64
        +++ XMLSerializer.java 18 Apr 2005 04:54:06 -0000 1.65
        @@ -1338,12 +1338,11 @@
                     // consolidating spaces. If a line terminator is used, a line
                     // break will occur.
                     while ( length-- > 0 ) {
        - ch = chars[ start ];
        - ++start;
        + ch = chars[start++];
                         if (!XMLChar.isValid(ch)) {
                             // check if it is surrogate
        - if (++start <length) {
        - surrogates(ch, chars[start]);
        + if ( length-- > 0 ) {
        + surrogates(ch, chars[start++]);
                             } else {
                                 fatalError("The character '"+(char)ch+"' is an invalid XML character");

                             }
        @@ -1361,13 +1360,11 @@
                     // by printing mechanism. Line terminator is treated
                     // no different than other text part.
                     while ( length-- > 0 ) {
        - ch = chars[ start ];
        - ++start;
        -
        + ch = chars[start++];
                         if (!XMLChar.isValid(ch)) {
                             // check if it is surrogate
        - if (++start <length) {
        - surrogates(ch, chars[start]);
        + if ( length-- > 0 ) {
        + surrogates(ch, chars[start++]);
                             } else {
                                 fatalError("The character '"+(char)ch+"' is an invalid XML character");

                             }

            sreddysunw Sunitha Reddy (Inactive)
            sreddysunw Sunitha Reddy (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: