ID:               37850
 User updated by:  jeremiahh at allstardirectories dot com
 Reported By:      jeremiahh at allstardirectories dot com
 Status:           Open
 Bug Type:         SOAP related
 Operating System: Linux
 PHP Version:      5.1.4
 New Comment:

It is important to note that this bug only seems to happen in the case
where a single SoapHeader object is passed to __setSoapHeaders().  If
you pass an array of SoapHeaders, such as array(soapHeaderObj) then the
problem is non-existent.  When you pass it in an array the reference
counting happens automatically by the array constructor.

Also, this problem does not exist in the SoapHeader()::__call method
which correctly adds a reference when a single SoapHeader object is
passed:

ZVAL_ADDREF(headers);


Previous Comments:
------------------------------------------------------------------------

[2006-06-19 17:46:03] jeremiahh at allstardirectories dot com

Description:
------------
The undocumented method SoapClient::__setSoapHeaders() incorrectly
handles reference counting when a single SoapHeader object is passed.

Reproduce code:
---------------
function someMethod()
{
  $headers = new SoapHeader(...);
  $client = new SoapClient(...);
  $client->__setSoapHeaders($headers);

  $this->saved_client = $client;
}

function someOtherMethod()
{
  $client = $this->saved_client;
  $client->__soapCall(...);
}

Expected result:
----------------
For the code

$obj->someMethod();
$obj->someOtherMethod();

you would expect the call $client->__soapCall() to succeed with the
appropriate soap headers.

Actual result:
--------------
It crashes.  If one does a print_r($this->saved_client) in both methods
the problem is obvious.  The reference count for $headers is not
incremented in __setSoapHeaders() and so when  someMethod() finished
the object is destroyed while the SoapClient object is still
referencing it.  Then in someOtherMethod() the SoapHeader object is no
longer available.


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=37850&edit=1

Reply via email to