xerces-j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael Glavassevich (JIRA)" <xerces-j-...@xml.apache.org>
Subject [jira] [Commented] (XERCESJ-1421) Temporary inconsistent data inside Xerces2-J when removing a first child of a node.
Date Sat, 14 May 2011 17:12:47 GMT

    [ https://issues.apache.org/jira/browse/XERCESJ-1421?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13033581#comment-13033581
] 

Michael Glavassevich commented on XERCESJ-1421:
-----------------------------------------------

Ludger and Thiwanka, I agree with both or your assessments. This not only corrects an inconsistent
state but is also minor performance improvement for checkNormalizationAfterRemove() when the
first child of a node is removed.

> 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
>            Assignee: Michael Glavassevich
>            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-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org


Mime
View raw message