[ https://issues.apache.org/jira/browse/XERCESJ-1421?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13018198#comment-13018198 ]
Thiwanka Somasiri commented on XERCESJ-1421: -------------------------------------------- Got to know that the checkNormalizationAfterRemove() method checks whether the adjacent siblings of the removed child are "TEXT_NODE" or not. * In internalInsertBefore() in ParentNode.java, if the "refInternal" is null the node is appended to the tree as the parent's last child having no reference to the nextSibling attribute(which means having the value null). In the above discussed issue @line 548, the value "oldPreviousSibling" gets whenever the "oldInternal" was a 'firstChild" is the last sibling. But inside the normalization checking process this inconsistency does not matter. The real values at the time of normalization checking should be (in checkNormalizationAfterRemove method in ParentNode.java) : previousSibling = null (normalized property is preserved) But the values actually passed in to checkNormalizationAfterRemove method are : previousSibling = lastChild, and lastChild.nextSibling is null (normalized property is preserved - using wrong values) So the checkNormalizationAfterRemove method gives the same result when the removed child is a first child. But I think, this inconsistency should be still addressed in the code. > 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