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.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to