The returned string should have been interned
if stringInterning is true.  This patch from Mark
fixes this.  No javax.xml Mauve regressions were
apparent with this patch (though we may not have
enough such tests) and it appears correct.

ChangeLog:

2009-02-05  Mark Wielaard  <m...@klomp.org>

        PR classpath/38912:
        * gnu/xml/stream/XMLParser.java:
        (getLocalName()): Respect stringInterning.
        (getName()): Likewise.
        (getPrefix()): Likewise.

-- 
Andrew :)

Support Free Java!
Contribute to GNU Classpath and the OpenJDK
http://www.gnu.org/software/classpath
http://openjdk.java.net
PGP Key: 94EFD9D8 (http://subkeys.pgp.net)
Fingerprint = F8EF F1EA 401E 2E60 15FA  7927 142C 2591 94EF D9D8
Index: gnu/xml/stream/XMLParser.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/xml/stream/XMLParser.java,v
retrieving revision 1.35
diff -u -u -r1.35 XMLParser.java
--- gnu/xml/stream/XMLParser.java       6 May 2008 01:07:02 -0000       1.35
+++ gnu/xml/stream/XMLParser.java       5 Feb 2009 20:35:07 -0000
@@ -725,7 +725,10 @@
       case XMLStreamConstants.END_ELEMENT:
         String qName = buf.toString();
         int ci = qName.indexOf(':');
-        return (ci == -1) ? qName : qName.substring(ci + 1);
+        String localName = (ci == -1) ? qName : qName.substring(ci + 1);
+        if (stringInterning)
+          localName = localName.intern();
+        return localName;
       default:
         return null;
       }
@@ -745,9 +748,13 @@
         String qName = buf.toString();
         int ci = qName.indexOf(':');
         String localName = (ci == -1) ? qName : qName.substring(ci + 1);
+        if (stringInterning)
+          localName = localName.intern();
         String prefix = (ci == -1) ?
           (namespaceAware ? XMLConstants.DEFAULT_NS_PREFIX : null) :
           qName.substring(0, ci);
+        if (stringInterning && prefix != null)
+          prefix = prefix.intern();
         String namespaceURI = getNamespaceURI(prefix);
         return new QName(namespaceURI, localName, prefix);
       default:
@@ -831,9 +838,12 @@
       case XMLStreamConstants.END_ELEMENT:
         String qName = buf.toString();
         int ci = qName.indexOf(':');
-        return (ci == -1) ?
+        String prefix = (ci == -1) ?
           (namespaceAware ? XMLConstants.DEFAULT_NS_PREFIX : null) :
           qName.substring(0, ci);
+        if (stringInterning && prefix != null)
+          prefix = prefix.intern();
+        return prefix;
       default:
         return null;
       }

Reply via email to