1--TEST-- 2bug #49634 (Segfault throwing an exception in a XSL registered function) 3--SKIPIF-- 4<?php 5extension_loaded("xsl") or die("skip need ext/xsl"); 6?> 7--FILE-- 8<?php 9 10$sXml = <<<XML 11<?xml version="1.0" encoding="UTF-8" ?> 12<root> 13 test 14</root> 15XML; 16 17$cDIR = __DIR__; 18$sXsl = <<<XSL 19<xsl:stylesheet version="1.0" 20 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 21 xmlns:ext="http://php.net/xsl" 22 xsl:extension-element-prefixes="ext" 23 exclude-result-prefixes="ext"> 24 <xsl:output encoding="UTF-8" indent="yes" method="xml" /> 25 <xsl:template match="/"> 26 <xsl:value-of select="ext:function('testFunction', document('$cDIR/bug49634.xml')/root)"/> 27 </xsl:template> 28</xsl:stylesheet> 29XSL; 30 31function testFunction($a) 32{ 33 throw new Exception('Test exception.'); 34} 35 36$domXml = new DOMDocument; 37$domXml->loadXML($sXml); 38$domXsl = new DOMDocument; 39$domXsl->loadXML($sXsl); 40 41for ($i = 0; $i < 10; $i++) 42{ 43 $xsltProcessor = new XSLTProcessor(); 44 $xsltProcessor->registerPHPFunctions(array('testFunction')); 45 $xsltProcessor->importStyleSheet($domXsl); 46 try { 47 @$xsltProcessor->transformToDoc($domXml); 48 } catch (Exception $e) { 49 echo $e,"\n"; 50 } 51} 52?> 53===DONE=== 54--EXPECTF-- 55Exception: Test exception. in %s:%d 56Stack trace: 57#0 [internal function]: testFunction(Array) 58#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) 59#2 {main} 60Exception: Test exception. in %s:%d 61Stack trace: 62#0 [internal function]: testFunction(Array) 63#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) 64#2 {main} 65Exception: Test exception. in %s:%d 66Stack trace: 67#0 [internal function]: testFunction(Array) 68#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) 69#2 {main} 70Exception: Test exception. in %s:%d 71Stack trace: 72#0 [internal function]: testFunction(Array) 73#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) 74#2 {main} 75Exception: Test exception. in %s:%d 76Stack trace: 77#0 [internal function]: testFunction(Array) 78#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) 79#2 {main} 80Exception: Test exception. in %s:%d 81Stack trace: 82#0 [internal function]: testFunction(Array) 83#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) 84#2 {main} 85Exception: Test exception. in %s:%d 86Stack trace: 87#0 [internal function]: testFunction(Array) 88#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) 89#2 {main} 90Exception: Test exception. in %s:%d 91Stack trace: 92#0 [internal function]: testFunction(Array) 93#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) 94#2 {main} 95Exception: Test exception. in %s:%d 96Stack trace: 97#0 [internal function]: testFunction(Array) 98#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) 99#2 {main} 100Exception: Test exception. in %s:%d 101Stack trace: 102#0 [internal function]: testFunction(Array) 103#1 %s(%d): XSLTProcessor->transformToDoc(Object(DOMDocument)) 104#2 {main} 105===DONE=== 106