Michael,  I did some further review of your crash.xsl example.

The problem with the null pointer reference is not with the
empty nodesets which are now supported.

Here lies the issue of the null pointer problem.

The lineage of the problem relates to the
  <xsl:strip-space elements="*"/>
where the parent node of the xalan:nodeset() constructed
nodeset cannot be found because there is no parent.

See Method Implementation:
  bool StylesheetRoot::internalShouldStripSourceNode(XalanText& textNode);

I'm at a loss here!  Should this method return 'false' for such
constructed nodesets?  This method first tries to examine a parent
which in case of constructed xalan:nodeset() does not exist.

- Steven J. Hathaway

> Michael,
> After supplying the patch in XALANC-715 for empty nodesets,
> I can't get the following test to fail with a null pointer reference.
>
> <?xml version="1.0"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
> version="1.0"
>      xmlns:xalan='http://xml.apache.org/xalan'
>      exclude-result-prefixes='xalan'>
>  <xsl:output method="html" indent="yes" encoding='windows-1251'/>
> <!-- The Test Template -->
>  <xsl:template name='EmptyTest'>
>   <xsl:param name='empty'/>
>   <xsl:param name='bar'/>
>   <parm-string parm='empty'><xsl:value-of select='$empty'/></parm-string>
>   <parm-nodes  parm='empty'><xsl:copy-of  select='$empty'/></parm-nodes>
>   <parm-string parm='bar'><xsl:value-of select='$bar'/></parm-string>
>   <parm-nodes  parm='bar'><xsl:copy-of  select='$bar'/></parm-nodes>
>   <xsl:if test='xalan:nodeset($bar)/node()'>
>     <value param='bar'><xsl:copy-of select='$bar'/></value>
>   </xsl:if>
>   <xsl:if test='xalan:nodeset($empty)/node()'>
>     <value parm='empty'><xsl:copy-of select='$empty'/></value>
>   </xsl:if>
>  </xsl:template>
> <!-- The Main Template -->
>  <xsl:template match='/'>
>   <out>
>    <xsl:call-template name='EmptyTest'>
>     <xsl:with-param name='bar'><abc>my test line</abc></xsl:with-param>
>    </xsl:call-template>
>   </out>
>  </xsl:template>
> </xsl:stylesheet>
>
> -------------------------
>
>>
>>     [
>> https://issues.apache.org/jira/browse/XALANC-715?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13140164#comment-13140164
>> ]
>>
>> Michael Kupchuk commented on XALANC-715:
>> ----------------------------------------
>>
>> It seems like the main issue is in the "<xsl:if
>> test="xalan:nodeset($head)/node()">" line. I can't see anything like
>> this
>> in your test.
>> Have you tried my example transformation?
>> The proposed patch removes asserts which will cause the same error
>> deeper
>> by stack.
>>
>>> NULL pointer access => crash
>>> ----------------------------
>>>
>>>                 Key: XALANC-715
>>>                 URL: https://issues.apache.org/jira/browse/XALANC-715
>>>             Project: XalanC
>>>          Issue Type: Bug
>>>          Components: XalanC
>>>    Affects Versions: CurrentCVS
>>>         Environment: Any
>>>            Reporter: Michael Kupchuk
>>>            Assignee: Steven J. Hathaway
>>>              Labels: crash
>>>             Fix For: CurrentCVS
>>>
>>>         Attachments: crash.xsl, empty-nodeset-patch.diff, test.xml
>>>
>>>
>>> Using a xalan:nodeset with an empty parameter causes it to return
>>> nodeset with no data, no parents, completly empty, which in further
>>> operations causes a NULL pointer access in release or debug assertion
>>> in
>>> debug.
>>> Maybe it's not a "very proper" use of xalan:nodeset, but IMHO
>>> crash/assertion is not the correct behaviour at all.
>>> Here is an example xslt to reproduce crash:
>>> <?xml version='1.0' encoding='windows-1251'?>
>>> <xsl:stylesheet exclude-result-prefixes="xalan" xmlns:xalan =
>>> "http://xml.apache.org/xalan";
>>> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
>>> <xsl:output method="html" indent="yes" encoding='windows-1251'/>
>>> <xsl:strip-space elements="*"/>
>>>   <xsl:template name="head-with-info">
>>>     <xsl:param name="head"/>
>>>     <xsl:param name="info"/>
>>>     <xsl:if test="xalan:nodeset($head)/node()">
>>>       <div class="heading"><xsl:copy-of select="$head"/></div>
>>>     </xsl:if>
>>>     <xsl:if test="string-length($info)>0 and
>>> xalan:nodeset($info)/node()">
>>>       <div class="group-info"><xsl:copy-of select="$info"/></div>
>>>     </xsl:if>
>>>   </xsl:template>
>>> <xsl:template match="*" name="test">
>>>     <xsl:value-of select="test_node/inner_test"/>
>>>     <xsl:call-template name="head-with-info">
>>>       <!-- <xsl:with-param name="head"><span>test
>>> head</span></xsl:with-param> -->
>>>       <xsl:with-param name="info"><span>test
>>> info</span></xsl:with-param>
>>>     </xsl:call-template>
>>> </xsl:template>
>>> </xsl:stylesheet>
>>
>> --
>> This message is automatically generated by JIRA.
>> If you think it was sent incorrectly, please contact your JIRA
>> administrators:
>> https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
>> For more information on JIRA, see:
>> http://www.atlassian.com/software/jira
>>
>>
>>
>>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>



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

Reply via email to