4 changed files with 113 additions and 0 deletions
@ -0,0 +1,105 @@ |
|||
--TEST-- |
|||
bug #49634 (Segfault throwing an exception in a XSL registered function) |
|||
--SKIPIF-- |
|||
<?php |
|||
extension_loaded("xsl") or die("skip need ext/xsl"); |
|||
?> |
|||
--FILE-- |
|||
<?php |
|||
|
|||
$sXml = <<<XML |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<root> |
|||
test |
|||
</root> |
|||
XML; |
|||
|
|||
$cDIR = __DIR__; |
|||
$sXsl = <<<XSL |
|||
<xsl:stylesheet version="1.0" |
|||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
|||
xmlns:ext="http://php.net/xsl" |
|||
xsl:extension-element-prefixes="ext" |
|||
exclude-result-prefixes="ext"> |
|||
<xsl:output encoding="UTF-8" indent="yes" method="xml" /> |
|||
<xsl:template match="/"> |
|||
<xsl:value-of select="ext:function('testFunction', document('$cDIR/bug49634.xml')/root)"/> |
|||
</xsl:template> |
|||
</xsl:stylesheet> |
|||
XSL; |
|||
|
|||
function testFunction($a) |
|||
{ |
|||
throw new Exception('Test exception.'); |
|||
} |
|||
|
|||
$domXml = new DOMDocument; |
|||
$domXml->loadXML($sXml); |
|||
$domXsl = new DOMDocument; |
|||
$domXsl->loadXML($sXsl); |
|||
|
|||
for ($i = 0; $i < 10; $i++) |
|||
{ |
|||
$xsltProcessor = new XSLTProcessor(); |
|||
$xsltProcessor->registerPHPFunctions(array('testFunction')); |
|||
$xsltProcessor->importStyleSheet($domXsl); |
|||
try { |
|||
@$xsltProcessor->transformToDoc($domXml); |
|||
} catch (Exception $e) { |
|||
echo $e,"\n"; |
|||
} |
|||
} |
|||
?> |
|||
===DONE=== |
|||
--EXPECTF-- |
|||
exception 'Exception' with message 'Test exception.' in %s:%d |
|||
Stack trace: |
|||
#0 [internal function]: testFunction(Array) |
|||
#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) |
|||
#2 {main} |
|||
exception 'Exception' with message 'Test exception.' in %s:%d |
|||
Stack trace: |
|||
#0 [internal function]: testFunction(Array) |
|||
#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) |
|||
#2 {main} |
|||
exception 'Exception' with message 'Test exception.' in %s:%d |
|||
Stack trace: |
|||
#0 [internal function]: testFunction(Array) |
|||
#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) |
|||
#2 {main} |
|||
exception 'Exception' with message 'Test exception.' in %s:%d |
|||
Stack trace: |
|||
#0 [internal function]: testFunction(Array) |
|||
#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) |
|||
#2 {main} |
|||
exception 'Exception' with message 'Test exception.' in %s:%d |
|||
Stack trace: |
|||
#0 [internal function]: testFunction(Array) |
|||
#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) |
|||
#2 {main} |
|||
exception 'Exception' with message 'Test exception.' in %s:%d |
|||
Stack trace: |
|||
#0 [internal function]: testFunction(Array) |
|||
#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) |
|||
#2 {main} |
|||
exception 'Exception' with message 'Test exception.' in %s:%d |
|||
Stack trace: |
|||
#0 [internal function]: testFunction(Array) |
|||
#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) |
|||
#2 {main} |
|||
exception 'Exception' with message 'Test exception.' in %s:%d |
|||
Stack trace: |
|||
#0 [internal function]: testFunction(Array) |
|||
#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) |
|||
#2 {main} |
|||
exception 'Exception' with message 'Test exception.' in %s:%d |
|||
Stack trace: |
|||
#0 [internal function]: testFunction(Array) |
|||
#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) |
|||
#2 {main} |
|||
exception 'Exception' with message 'Test exception.' in %s:%d |
|||
Stack trace: |
|||
#0 [internal function]: testFunction(Array) |
|||
#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) |
|||
#2 {main} |
|||
===DONE=== |
|||
@ -0,0 +1 @@ |
|||
<root/> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue