garyp 01/08/09 10:13:15
Modified: java/src/org/apache/xml/dtm/ref/sax2dtm SAX2DTM.java
Log:
Fix for bugzilla 3060 (http://nagoya.apache.org/bugzilla/show_bug.cgi?id=3060).
Prefixes and
namespaceURIs are kept in the same Vector, m_prefixMappings. The entries are stored
as pairs of vector elements. The even elements contain the prefix and the odd
elements contain the URI. In two routines, getPrefix and endElement, the appropriate
prefix or URI was being located in the Vector using an indexOf. However, in this case
where the prefix and the URI were the same, the routine was looking for the URI but
finding the prefix instead of the URI. It tried tried to back up one to get the
prefix and underflowed the Vector size.
Revision Changes Path
1.15 +13 -3 xml-xalan/java/src/org/apache/xml/dtm/ref/sax2dtm/SAX2DTM.java
Index: SAX2DTM.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/sax2dtm/SAX2DTM.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- SAX2DTM.java 2001/07/28 00:25:59 1.14
+++ SAX2DTM.java 2001/08/09 17:13:15 1.15
@@ -1230,11 +1230,16 @@
{
String prefix;
+ int uriIndex = -1;
if (null != uri && uri.length() > 0)
{
- int uriIndex = m_prefixMappings.indexOf(uri, 0);
+ do
+ {
+ uriIndex = m_prefixMappings.indexOf(uri, ++uriIndex);
+ } while ( (uriIndex & 0x01) == 0);
+
if (uriIndex >= 0)
{
prefix = (String) m_prefixMappings.elementAt(uriIndex - 1);
@@ -1560,9 +1565,14 @@
if(null == prefix)
prefix = "";
+
+ int index = m_contextIndexes.peek() - 1;
+
+ do
+ {
+ index = m_prefixMappings.indexOf(prefix, ++index);
+ } while ( (index >= 0) && ((index & 0x01) == 0x01) );
- int start = m_contextIndexes.peek();
- int index = m_prefixMappings.indexOf(prefix, start);
if (index > -1)
{
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]