[ https://issues.apache.org/jira/browse/XERCESJ-1421?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13018115#comment-13018115 ]
Thiwanka Somasiri edited comment on XERCESJ-1421 at 4/10/11 5:36 PM: --------------------------------------------------------------------- What is meant by "checkNormalizationAfterRemove(ChileNode previousSibling)" in org.apache.xerces.dom.ParentNode.java ? was (Author: asthiwanka): What is actual operation by "checkNormalizationAfterRemove(ChileNode previousSibling)" in org.apache.xerces.dom.ParentNode.java ? > Temporary inconsistent data inside Xerces2-J when removing a first child of a > node. > ----------------------------------------------------------------------------------- > > Key: XERCESJ-1421 > URL: https://issues.apache.org/jira/browse/XERCESJ-1421 > Project: Xerces2-J > Issue Type: Improvement > Components: DOM (Level 3 Core) > Affects Versions: 2.9.1 > Reporter: Ludger Bünger > Priority: Minor > Attachments: PreviousSiblingInconsistentDataPatch.txt > > > When removing a first child, currently there is a local field inside > ParentNode.internalRemoveChild that contains inconsistent data. > Since in this specific case the following code still performs correct, there > is currently no harm done. > However I think it should be fixed nonetheless since future changes to the > code might cause problems. > And here the description of the issue: > Xerces2-J uses an internal optimization by overloading the > ChildNode.previousSibling field. > 1) If a node has a previous sibling, this field contains the previous sibling. > 2) if a node is the first child of it's parent (and thus has no previous > sibling), this field is re-used for a different purpose and contains the last > sibling thus allowing quick access to the end of a node list > Now ChildNode.internalRemoveNode stores a reference to the previousSibling of > the removed node for normalization checking purposes in the local field > oldPreviousSibling. > However this is done after removal of the node is already done but before > null'ing of the tree structure fields of the node. > Since this node has already been removed, the isFirstChild() check fails and > instead of 'null' the last sibling is stored in the oldPreviousSibling field. > By chance the normalization checking code still works correct if the previous > sibling field contains the last sibling instead of the correct value 'null' > but this still should be fixed. > See attached patch. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: j-dev-unsubscr...@xerces.apache.org For additional commands, e-mail: j-dev-h...@xerces.apache.org