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/11/30 00:44:22 UTC

[jira] Created: (XALANJ-2349) Serializer's ElemContext does not properly initialize a field sometimes.

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
             Fix For: The Latest Development Code


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


[jira] Assigned: (XALANJ-2349) Serializer's ElemContext does not properly initialize a field sometimes.

Posted by "Brian Minchau (JIRA)" <xa...@xml.apache.org>.
     [ 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