Bug #79536 [Opn->Csd]: zend_clear_exception can not call exception destructor

From: Date: Wed, 29 Apr 2020 10:59:42 +0000
Subject: Bug #79536 [Opn->Csd]: zend_clear_exception can not call exception destructor
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-226820@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=79536&edit=1 ID: 79536 Updated by: laruence@php.net Reported by: laruence@php.net Summary: zend_clear_exception can not call exception destructor -Status: Open +Status: Closed Type: Bug Package: Scripting Engine problem PHP Version: 7.3.17 Block user comment: N Private report: N New Comment: Automatic comment on behalf of laruence@gmail.com Revision: http://git.php.net/?p=php-src.git;a=commit;h=8555c2bff01291e00e4e6af9f0df3b4fe848a390 Log: Fixed bug #79536 (zend_clear_exception prevent exception's destructor to be called). Previous Comments: ------------------------------------------------------------------------ [2020-04-29 10:55:20] laruence@php.net Description: ------------ zend_clear_exception: OBJ_RELEASE(EG(exception)); if the exception is refcount 1, and has __destruct, the destructor can not be called because EG(exception) is set. Test script: --------------- it could be seen by soap. <?php $GLOBALS['HTTP_RAW_POST_DATA']=" <env:Envelope xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:enc=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:ns1=\"http://schemas.nothing.com\" > <env:Body> <ns1:dotest2> <dotest2 xsi:type=\"xsd:string\">???</dotest2> </ns1:dotest2> </env:Body> <env:Header/> </env:Envelope>"; class myFault extends SoapFault { public function __destruct() { } } function book_to_xml($book) { throw new myFault("Server", "Conversion Fault"); } class test{ function dotest2($str){ $book = new book; $book->a = "foo"; $book->b = "bar"; return $book; } } class book{ public $a="a"; public $b="c"; } $options=Array( 'actor' =>'http://schemas.nothing.com', 'typemap' => array(array("type_ns" => "http://schemas.nothing.com", "type_name" => "book", "to_xml" => "book_to_xml")) ); $server = new SoapServer(__DIR__."/classmap.wsdl",$options); $server->setClass("test"); $server->handle($HTTP_RAW_POST_DATA); echo "ok\n"; Expected result: ---------------- <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:Server</faultcode><faultstring>Conversion Fault</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope> ok Actual result: -------------- <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:Server</faultcode><faultstring>Attempt to destruct pending exception</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope> ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=79536&edit=1

« previous php.bugs (#226820) next »