[ http://issues.apache.org/jira/browse/XALANJ-1625?page=all ]
Brian Minchau updated XALANJ-1625: ---------------------------------- Version: Latest Development Code (was: 2.5) > org.apache.xml.dtm.ref.DTMDefaultBase (SuballocatedIntVector)-index-error > -------------------------------------------------------------------------- > > Key: XALANJ-1625 > URL: http://issues.apache.org/jira/browse/XALANJ-1625 > Project: XalanJ2 > Type: Bug > Components: DTM > Versions: Latest Development Code > Environment: Operating System: Other > Platform: Other > Reporter: Oliver Haider > Assignee: Xalan Developers Mailing List > > There is a misshap in the class bug in org.apache.xml.dtm.ref.DTMDefaultBase > (at the function SuballocatedIntVector) > In the last few lines the local var candiate is assigned > (candidate=m_namespaceDeclSetElements.elementAt(--wouldBeAt);) > the problem is the --wouldBeAt since it is checked for >= 0 thus it might be > 0 > and then in the get-function -1. > regards > oliver haider > protected SuballocatedIntVector findNamespaceContext(int elementNodeIndex) > { > if (null!=m_namespaceDeclSetElements) > { > // %OPT% Is binary-search really saving us a lot versus linear? > // (... It may be, in large docs with many NS decls.) > int wouldBeAt=findInSortedSuballocatedIntVector > (m_namespaceDeclSetElements, > elementNodeIndex); > if(wouldBeAt>=0) // Found it > return (SuballocatedIntVector) m_namespaceDeclSets.elementAt > (wouldBeAt); > if(wouldBeAt == -1) // -1-wouldbeat == 0 > return null; // Not after anything; definitely not found > // Not found, but we know where it should have been. > // Search back until we find an ancestor or run out. > wouldBeAt=-1-wouldBeAt; > // Decrement wouldBeAt to find last possible ancestor > int candidate=m_namespaceDeclSetElements.elementAt(-- wouldBeAt); > int ancestor=_parent(elementNodeIndex); > // Special case: if the candidate is before the given node, and > // is in the earliest possible position in the document, it > // must have the namespace declarations we're interested in. > if (wouldBeAt == 0 && candidate < ancestor) { > int rootHandle = getDocumentRoot(makeNodeHandle(elementNodeIndex)); > int rootID = makeNodeIdentity(rootHandle); > int uppermostNSCandidateID; > if (getNodeType(rootHandle) == DTM.DOCUMENT_NODE) { > int ch = _firstch(rootID); > uppermostNSCandidateID = (ch != DTM.NULL) ? ch : rootID; > } else { > uppermostNSCandidateID = rootID; > } > if (candidate == uppermostNSCandidateID) { > return (SuballocatedIntVector)m_namespaceDeclSets.elementAt > (wouldBeAt); > } > } > while(wouldBeAt>=0 && ancestor>0) > { > if (candidate==ancestor) { > // Found ancestor in list > return (SuballocatedIntVector)m_namespaceDeclSets.elementAt > (wouldBeAt); > } else if (candidate<ancestor) { > // Too deep in tree > do { > ancestor=_parent(ancestor); > } while (candidate < ancestor); > } else { > // Too late in list > candidate=m_namespaceDeclSetElements.elementAt(--wouldBeAt); > } > } > } > return null; // No namespaces known at this node > } -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]