From: [EMAIL PROTECTED]
Operating system: Linux Mandrake 8.0
PHP version: 4.0 Latest CVS (2001-06-12)
PHP Bug Type: Sablotron XSL
Bug description: PHP Seg faults with xslt_output_begintransform("xsl_file");
-------------------
System:
-------------------
Linux Mandrake 8.0
Apache 1.3.19
PHP 4.0.6 RC3 (as DSO)
Sablot 0.52
libxml2.3.10
expat 1.95.1
--------------------
Compile options
--------------------
./configure \
--mandir=/usr/share/man \
--with-apxs=/usr/local/apache/bin/apxs \
--with-config-file-path=/etc/httpd \
--enable-magic-quotes \
--enable-bcmath \
--enable-calendar \
--with-dom=/usr/local \
--with-zlib-dir \
--enable-ftp \
--enable-gd-native-ttf \
--with-mysql=/usr/local/mysql \
--with-pgsql=/usr/local/pgsql \
--with-expat-dir=/usr/local \
--with-sablot=/usr/local \
--enable-trans-sid \
--with-regex=system \
--with-swf=/usr/local/openswf \
--enable-wddx \
--enable-memory-limit \
--with-gnu-ld \
--with-gd=/usr/local \
--with-jpeg-dir=/usr/local \
--with-png=/usr/local \
--with-freetype=/usr/local/include/freetype2
----------------------
Back Trace
----------------------
(gdb) run -X
Starting program: /usr/local/apache/bin/httpd -X
Program received signal SIGSEGV, Segmentation fault.
0x403c3ee2 in Processor::useArg (this=0x8121f68, name=0xcc4a090 <Address 0xcc4a090 out
of bounds>,
val=0x40322b84 "�A\024") at proc.cpp:1077
1077 if (*name != '/')
Current language: auto; currently c++
(gdb) bt
#0 0x403c3ee2 in Processor::useArg (this=0x8121f68, name=0xcc4a090 <Address 0xcc4a090
out of bounds>,
val=0x40322b84 "�A\024") at proc.cpp:1077
#1 0x403c4954 in SablotRunProcessor (processor_=0x8121f68, sheetURI=0x80d9b1c
"index.xsl",
inputURI=0x402ee293 "arg:/_xmlinput", resultURI=0x402ee286 "arg:/_output",
params=0x0, arguments=0xbfffdbd0)
at sablot.cpp:144
#2 0x4026de47 in php_if_xslt_output_endtransform (ht=0, return_value=0x8120afc,
this_ptr=0x0, return_value_used=0) at sablot.c:322
#3 0x4021a10c in execute (op_array=0x811e51c) at ./zend_execute.c:1504
#4 0x40228a4d in zend_execute_scripts (type=8, file_count=3) at zend.c:749
#5 0x4023af64 in php_execute_script (primary_file=0xbffff560) at main.c:1206
#6 0x4023757e in apache_php_module_main (r=0x8119684, display_source_mode=0) at
sapi_apache.c:89
#7 0x40237fbc in send_php (r=0x8119684, display_source_mode=0, filename=0x0) at
mod_php4.c:536
#8 0x40237ff3 in send_parsed_php (r=0x8119684) at mod_php4.c:547
#9 0x0805b797 in ap_invoke_handler ()
#10 0x0807029b in process_request_internal ()
#11 0x08070310 in ap_process_request ()
#12 0x080673b2 in child_main ()
#13 0x08067564 in make_child ()
#14 0x080676d8 in startup_children ()
#15 0x08067d57 in standalone_main ()
#16 0x0806858f in main ()
#17 0x400970de in __libc_start_main () from /lib/libc.so.6
--------------------------
All files PHP has contact with
--------------------------
################
index.php
################
<?php
$xmlData2 = '<?xml version="1.0"?>
<page>
<html_header>
<html_title>This is a test of the multi-template</html_title>
<html_body bgcolor="bgcolor=\'#000066\'" />
</html_header>
<article>
<title>How <u>NOT</u> to a B millionare</title>
<author>Micah Almond</author>
<first>Micah</first>
<second>Almond</second>
<body>This is the body of the document</body>
<form><input type="text" value="Test of form" /></form>
<form2>Test of Form 2</form2>
<auction_state state_abbrev="VA">Virginia</auction_state>
</article>
</page>';
$xsl_file = "index.xsl";
xslt_output_begintransform($xsl_file);
print($xmlData2);
xslt_output_endtransform();
?>
################
index.xsl
################
<?xml version='1.0'?>
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method='html' />
<xsl:include href='form.xsl' />
<xsl:template name='prod_cells'>
<xsl:param name='count' />
<xsl:if test='$count != 0'>
<td>Table Cell</td>
<xsl:call-template name='prod_cells'>
<xsl:with-param name='count' select='$count - 1' />
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match='page'>
<html>
<body>
<form method='post'>
<xsl:apply-templates />
</form>
</body>
</html>
</xsl:template>
<xsl:template match='article'>
<table border='1' cellpadding='2' cellspacing='1'>
<tr>
<td width='40%'>
<h2><xsl:value-of select='title'/></h2>
</td>
<td width='60%'>
<h3><xsl:value-of select='author'/></h3>
<br/>
<xsl:value-of select='body'/>
<br />
Form: <xsl:value-of select='form' disable-output-escaping='yes' />
<br />
<table align='center' border='1'>
<tr>
<xsl:call-template name='prod_cells'>
<xsl:with-param name='count' select='4' />
</xsl:call-template>
</tr>
</table>
<br />
<B>This is a function test</B>
<br />
<xsl:text>
<xsl:call-template name='test_form'>
<xsl:with-param name='form_type' select='string("text")' />
<xsl:with-param name='form_name' select='string("micahs_form")' />
<xsl:with-param name='form_value' select='form2' />
</xsl:call-template>
</xsl:text>
<br /><br />
<p>Micah Says Another One</p>
<xsl:text>
<xsl:call-template name='test_form'>
<xsl:with-param name='form_type' select='string("text")' />
<xsl:with-param name='form_name' select='string("micahs_form2")' />
<xsl:with-param name='form_value' select='form2' />
</xsl:call-template>
</xsl:text>
</td>
</tr>
</table>
</xsl:template>
</xsl:stylesheet>
##################
form.xsl
##################
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template name='test_form'>
<xsl:param name='form_name' />
<xsl:param name='form_type' />
<xsl:param name='form_value' />
<xsl:value-of select='concat("<input type=",$form_type,"
name=",$form_name, " size=15 value='",$form_value,"' />")'
disable-output-escaping='yes' />
</xsl:template>
</xsl:stylesheet>
------------------------
Discussion
------------------------
The only xslt_xxx function that is useable to transform xsl with Sablotron is the
xslt_process which only takes the information as strings. Ntoe: Everything works fine
with this. However, you can use <xsl:include> with a string for xslt_process, so I
need to send the string with xslt_output_begintransform() in order for all includes to
happen. I need to use that function, because I will not know what all xsl files will
need to be included with every parsing; template designers add and change things all
the time; plus it would be nice if the transformation was as close to standards as
possible. Note: This seg fault problem has been a problem from php 4.0.3+; I have also
tried the CVS copies and xslt does not seem to work in that distribution at all
(compile with --with-sablot-xslt; according to configure --help). I can take these
same three files (converting the php file to straight XML) and use sabcmd -L log -m
index.xsl index.xml index.html and it is transformed without a hitch. This is
definitely an issue with PHP. I have also created the XML file with the PHP DOM
functions and echoing the tree out (as per the manual example) in between
xslt_output_begintransform() and xslt_output_endtransform() and it seg faults as well.
Any questions let me know.
Micah
--
Edit Bug report at: http://bugs.php.net/?id=11440&edit=1
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]