You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by "Brian Minchau (JIRA)" <xa...@xml.apache.org> on 2006/12/12 03:24:23 UTC
[jira] Assigned: (XALANJ-2349) Serializer's ElemContext does not
properly initialize a field sometimes.
[ http://issues.apache.org/jira/browse/XALANJ-2349?page=all ]
Brian Minchau reassigned XALANJ-2349:
-------------------------------------
Assignee: Brian Minchau
Assiging to Brian Minchau, who agreed to look at this one at
the Xalan-J JIRA triage on December 11, 2006
> Serializer's ElemContext does not properly initialize a field sometimes.
> ------------------------------------------------------------------------
>
> Key: XALANJ-2349
> URL: http://issues.apache.org/jira/browse/XALANJ-2349
> Project: XalanJ2
> Issue Type: Bug
> Reporter: Brian Minchau
> Assigned To: Brian Minchau
> Fix For: The Latest Development Code
>
> Attachments: xalanj-2349.patch.txt
>
>
> The serializer's ElemContext class has a push(uri,localName,qName) method. Such a push occurs whenever
> a startElement() is called and we use such an object to collect information about the element. Its fields are:
> 1. m_currentElemDepth
> 2. m_elemDesc
> 3. m_elementLocalName
> 4. m_elementName
> 5. m_elementURI
> 6. m_isCdataSection
> 7. m_isRaw
> 8. m_next
> 9. m_prev
> 10. m_startTagOpen
> The stack of such ElemContext objects is doubly linked with fields 8. and 9. and these are OK.
> When an pop() occurs the ElemContext object doesn't really go away, just the "high water mark" is changed
> and next time we go to push() we can re-use the ElemContext object.
> Looking into ElemContext push() ... these fields are always set:
> 3. 4. 5. 6. 10.
> There is a remark that m_isRaw (field 7.) is already set in the HTML startElement() so this field is OK
> The questionable fields left are 1. and 2. Field 1. is set in the ElemContext constructor. If the object is re-used it will be re-used ad the same depth. So the bug is that field 2. m_elemDesc is not reset to null if a ElemContext is re-used.
> The code currently is:
> ElemContext frame = this.m_next;
> if (frame == null)
> {
> /* We have never been at this depth yet, and there is no
> * stack frame to re-use, so we now make a new one.
> */
> frame = new ElemContext(this);
> this.m_next = frame;
> }
> // Initialize, or reset values in the new or re-used stack frame.
> frame.m_elementName = qName;
> frame.m_elementLocalName = localName;
> frame.m_elementURI = uri;
> frame.m_isCdataSection = false;
> .... but should be:
> ElemContext frame = this.m_next;
> if (frame == null)
> {
> /* We have never been at this depth yet, and there is no
> * stack frame to re-use, so we now make a new one.
> */
> frame = new ElemContext(this);
> this.m_next = frame;
> } else {
> frame.m_isCdataSection = false;
> frame.m_elementDesc = null;
> }
>
> // Initialize, or reset values in the new or re-used stack frame.
> frame.m_elementName = qName;
> frame.m_elementLocalName = localName;
> frame.m_elementURI = uri;
>
> .... note that this change sets m_elemDesc to null when the stack frame is re-used, and for performance reasons
> m_isCdataSection is only set to null when the frame is re-used (a new frame has it false when it is constructed)
> The bug will manifest itself when the output is HTML and we have two child elements (siblings) with say different
> features about their escaping, or whether they are "empty" or not, and the features of the first element will
> carry over to the seconde one.
--
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: xalan-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-dev-help@xml.apache.org