Simon Schaarschmidt created XALANJ-2618:
-------------------------------------------

             Summary: Error in org/apache/xml/serializer/Encodings.properties
                 Key: XALANJ-2618
                 URL: https://issues.apache.org/jira/browse/XALANJ-2618
             Project: XalanJ2
          Issue Type: Bug
      Security Level: No security risk; visible to anyone (Ordinary problems in 
Xalan projects.  Anybody can view the issue.)
          Components: Serialization, transformation
    Affects Versions: 2.7.2
         Environment: Java 11
            Reporter: Simon Schaarschmidt
            Assignee: Steven J. Hathaway


We transform and serialize using encoding ISO-8859-1. With JDK 1.8 all is fine, 
but with OpenJDK 11 the result will be written (from class ToTextStream) in 
character references, e.g. "*id=1*" instead of "*id=1*".

In org/apache/xml/serializer/Encodings.properties (serializer.jar) are various 
encodings defined, e.g.

{{ISO8859-1  ISO-8859-1  0x00FF}}
{{ ISO8859_1  ISO-8859-1  0x00FF}}
{{ {color:#FF0000}8859-1{color}     ISO-8859-1  0x00FF}}
{{ {color:#FF0000}8859_1{color}     ISO-8859-1  0x00FF}}

First value: Java encoding name

Second value: comma separated preferred mime names.

The class org.apache.xml.serializer.Encodings reads this file in a Properties 
object and processes the definitions to create EncodingInfo objects and puts 
them (see method loadEncodingInfo()) into the member fields 
__encodingTableKeyJava_ and __encodingTableKeyMime_ (both Hashtable). 
Especially putting Elements into _encodingTableKeyMime is critical because 
there is not a 1:1 mapping and the latest returned Properties.keys() element 
replaces the previous ElementInfo object.

Until Java 1.8 the first line from above is the latest entry in Enumeration, 
therefor _encodingTableKeyMime returns the EncodingInfo object with Java 
encoding "{color:#14892c}ISO8859-1{color}" for encoding "ISO-8859-1". With Java 
11 the elements of the Enumeration returned by Properties.keys() has a 
different order: the third line from above is the latest entry! Therefor 
_encodingTableKeyMime returns the EncodingInfo object with Java encoding 
"*{color:#FF0000}8859-1{color}*" when asking for encoding "ISO-8859-1". But: 
"8859-1" ist not a valid Java encoding name! Method 
EncodingInfo.inEncoding(char,String) fails internally with an 
*UnsupportedEncodingException* and returns false.

The methods in class Encodings first searches EncodingInfo object in 
_encodingTableKeyJava and uses elements from _encodingTableKeyMime as fallback.

I suggest the definitions in Encodings.properties must be extended with 
additional lines, e.g.

*{color:#14892c}ISO-8859-1{color}* ISO-8859-1  0x00FF

Also for encodings ISO-8859-2..9. Or all entries with Java encoding name 
"8859*" should be removed. (They are not valid Java encoding names - 
UnsupportedEncodingException!)

Finally I think, the current mechanism of collecting the EncodingInfo objects 
using two Hashtables is critical.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@xalan.apache.org
For additional commands, e-mail: dev-h...@xalan.apache.org

Reply via email to