You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-dev@xerces.apache.org by Norris Boyd <nb...@atg.com> on 2000/10/10 18:08:38 UTC

Bug and patch (process?)

I mailed in a description of a problem I'd found and a patch I proposed
to fix it. I haven't heard any response from my previous mail.

Is this the right newsgroup to submit problems and patches to? Is there
some other process I should follow?

My original mail follows.

Thanks for everybody's work on Xerces. I hope you guys can work out your
conflicts and keep improving a great XML parser.

--Norris

Subject:
             Java encoding problems and proposed solution
        Date:
             Thu, 28 Sep 2000 13:41:06 -0400
       From:
             Norris Boyd <nb...@atg.com>
    Reply-To:
             xerces-j-dev@xml.apache.org
 Organization:
             Art Technology Group
         To:
             xerces-j-dev@xml.apache.org




We've been using the
"http://apache.org/xml/features/allow-java-encodings" feature in order
to handle Java encodings used in the J2EE conformance test suite.
Unfortunately, Xerces still gives an error for an invalid encoding for
the Java encoding name "8859_1" since it doesn't begin with [A-Z][a-z].

A patch follows that addresses this problem. The change is simple: the
value of the feature flag is passed down to the method that performs the

check, allowing it to accept the Java encoding name.

Thanks,
Norris

diff -r -u
//d/untouched/xerces-1_2_0/src/org/apache/xerces/framework/XMLDTDScanner.java

org/apache/xerces/framework/XMLDTDScanner.java
---
//d/untouched/xerces-1_2_0/src/org/apache/xerces/framework/XMLDTDScanner.java

Fri Sep 01 14:22:14 2000
+++ org/apache/xerces/framework/XMLDTDScanner.java Tue Sep 26 11:59:48
2000
@@ -185,6 +185,7 @@
     private GrammarResolver fGrammarResolver = null;
     private boolean fNamespacesEnabled = false;
     private boolean fValidationEnabled = false;
+    private boolean fAllowJavaEncodings = false;
     private XMLElementDecl fTempElementDecl = new XMLElementDecl();
     private XMLAttributeDecl fTempAttributeDecl = new
XMLAttributeDecl();
     private QName fElementQName = new QName();
@@ -264,6 +265,11 @@
         fValidationEnabled = enabled;
     }

+    /** set fAllowJavaEncodings  **/
+    public void setAllowJavaEncodings(boolean allow) {
+        fAllowJavaEncodings = allow;
+    }
+
     /**
      * Is the XMLDTDScanner reading from an external entity?
      *
@@ -1685,7 +1691,7 @@
                 //
                 encoding = result;
                 String encodingString = fStringPool.toString(encoding);

-                if (!validEncName(encodingString)) {
+                if (!validEncName(encodingString, fAllowJavaEncodings))

{
                     abortMarkup(XMLMessages.MSG_ENCODINGDECL_INVALID,
                                 XMLMessages.P81_INVALID_VALUE,
                                 encodingString);
@@ -3061,8 +3067,8 @@
         return XMLCharacterProperties.validVersionNum(version);
     }

-    private boolean validEncName(String encoding) {
-        return XMLCharacterProperties.validEncName(encoding);
+    private boolean validEncName(String encoding, boolean
allowJavaEncodingNames) {
+        return XMLCharacterProperties.validEncName(encoding,
allowJavaEncodingNames);
     }

     private int validPublicId(String publicId) {
diff -r -u

//d/untouched/xerces-1_2_0/src/org/apache/xerces/framework/XMLDocumentScanner.java

org/apache/xerces/framework/XMLDocumentScanner.java
---

//d/untouched/xerces-1_2_0/src/org/apache/xerces/framework/XMLDocumentScanner.java

Fri Sep 01 14:22:14 2000
+++ org/apache/xerces/framework/XMLDocumentScanner.java Tue Sep 26
11:57:40 2000
@@ -161,6 +161,7 @@
     XMLDTDScanner fDTDScanner = null;
     boolean fNamespacesEnabled = false;
     boolean fValidationEnabled = false;
+    boolean fAllowJavaEncodings = false;
     QName fElementQName = new QName();
     QName fAttributeQName = new QName();
     QName fCurrentElementQName = new QName();
@@ -328,6 +329,11 @@
     public void setGrammarResolver(GrammarResolver resolver) {
         fGrammarResolver = resolver;
     }
+
+    /** Sets the flag allowing Java encodings. */
+    public void setAllowJavaEncodings(boolean allow) {
+        fAllowJavaEncodings = allow;
+    }

     /**
      * reset the parser so that the instance can be reused
@@ -2167,6 +2173,7 @@
             fDTDScanner = new XMLDTDScanner(fStringPool,
fErrorReporter, fEntityHandler, new ChunkyCharArray(fStringPool));
             fDTDScanner.setValidationEnabled(fValidationEnabled);
             fDTDScanner.setNamespacesEnabled(fNamespacesEnabled);
+            fDTDScanner.setAllowJavaEncodings(fAllowJavaEncodings);
         }
         else {
             fDTDScanner.reset(fStringPool, new
ChunkyCharArray(fStringPool));
@@ -2273,7 +2280,7 @@

     /** Returns true if the encoding name is valid. */
     private boolean validEncName(String encoding) {
-        return XMLCharacterProperties.validEncName(encoding);
+        return XMLCharacterProperties.validEncName(encoding,
fAllowJavaEncodings);
     }

 } // class XMLDocumentScanner
diff -r -u
//d/untouched/xerces-1_2_0/src/org/apache/xerces/framework/XMLParser.java

org/apache/xerces/framework/XMLParser.java
---
//d/untouched/xerces-1_2_0/src/org/apache/xerces/framework/XMLParser.java

Fri Sep 01 14:22:14 2000
+++ org/apache/xerces/framework/XMLParser.java Tue Sep 26 11:58:05 2000
@@ -710,6 +710,7 @@
     protected void setAllowJavaEncodings(boolean allow)
         throws SAXNotRecognizedException, SAXNotSupportedException {
         fEntityHandler.setAllowJavaEncodings(allow);
+        fScanner.setAllowJavaEncodings(allow);
     }

     /**
diff -r -u

//d/untouched/xerces-1_2_0/src/org/apache/xerces/readers/DefaultEntityHandler.java

org/apache/xerces/readers/DefaultEntityHandler.java
---

//d/untouched/xerces-1_2_0/src/org/apache/xerces/readers/DefaultEntityHandler.java

Fri Sep 01 14:22:16 2000
+++ org/apache/xerces/readers/DefaultEntityHandler.java Tue Sep 26
11:43:54 2000
@@ -528,7 +528,7 @@
                                            XMLMessages.P81_REQUIRED,
                                            null,

XMLErrorReporter.ERRORTYPE_FATAL_ERROR);
-            } else if (!XMLCharacterProperties.validEncName(encoding))
{
+            } else if (!XMLCharacterProperties.validEncName(encoding,
getAllowJavaEncodings())) {
                 Object[] args = { encoding };
                 fErrorReporter.reportError(fErrorReporter.getLocator(),

                                            XMLMessages.XML_DOMAIN,
@@ -804,7 +804,7 @@
                                            XMLMessages.P81_REQUIRED,
                                            null,

XMLErrorReporter.ERRORTYPE_FATAL_ERROR);
-            } else if (!XMLCharacterProperties.validEncName(encoding))
{
+            } else if (!XMLCharacterProperties.validEncName(encoding,
getAllowJavaEncodings())) {
                 Object[] args = { encoding };
                 fErrorReporter.reportError(fErrorReporter.getLocator(),

                                            XMLMessages.XML_DOMAIN,
diff -r -u

//d/untouched/xerces-1_2_0/src/org/apache/xerces/utils/XMLCharacterProperties.java

org/apache/xerces/utils/XMLCharacterProperties.java
---

//d/untouched/xerces-1_2_0/src/org/apache/xerces/utils/XMLCharacterProperties.java

Fri Sep 01 14:22:16 2000
+++ org/apache/xerces/utils/XMLCharacterProperties.java Tue Sep 26
11:37:42 2000
@@ -103,11 +103,13 @@
      * @param encoding string to check
      * @return true if encoding is a valid encoding name
      */
-    public static boolean validEncName(String encoding) {
+    public static boolean validEncName(String encoding,
+                                       boolean allowJavaEncodingName)
+    {
         if (encoding.length() == 0)
             return false;
         char ch = encoding.charAt(0);
-        if (ch > 'z' || fgAsciiAlphaChar[ch] == 0)
+        if (ch > 'z' || (fgAsciiAlphaChar[ch] == 0 &&
!allowJavaEncodingName))
             return false;
         for (int i = 1; i < encoding.length(); i++) {
             ch = encoding.charAt(i);