From:             [EMAIL PROTECTED]
Operating system: WinNT 2000
PHP version:      4.2.0
PHP Bug Type:     COM related
Bug description:  releasing IDispatch interface too many times (putprop issue)

hello
I wrote a script to access ADO database:
----------------------------------------------------
        $conn = new COM('ADODB.Connection');
                        
        $hr = $conn->Open('Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=test.mdb',"", "", 0);

        $oCmd = new COM('ADODB.Command');
        $oCmd->ActiveConnection = $conn;
        $oCmd->CommandText = "INSERT INTO config(storage) VALUES('testowa
wartosc')";
        $oCmd->CommandType = 1;

        $rs = $oCmd->Execute();
----------------------------------------------------
in line 
$oCmd->ActiveConnection = $conn;
there is created a zendval variable (result from assigning IDispatch $conn
to property) but $conn is not AddRef-ed...
When this invisible variable is destroyed it calls Release on IDispatch
from $conn -  But this dispatch is already 0-referenced.
I isolated the code in file COM.c in line 1142 (function do_COM_propput):
---------------------------------------------------
        if (SUCCEEDED(hr)) {
                php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC);
        } else {
--------------------------------------------------
and changed to:
---------------------------------------------------
        if (SUCCEEDED(hr)) {
                if ( var_result->vt == VT_DISPATCH )
                        var_result->pdispVal->lpVtbl->AddRef(var_result->pdispVal);
                php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC);
        } else {
----------------------------------------------------
Is it a good solution? Or maybe I don't understand something?
Tristan Rybak
-- 
Edit bug report at http://bugs.php.net/?id=17012&edit=1
-- 
Fixed in CVS:        http://bugs.php.net/fix.php?id=17012&r=fixedcvs
Fixed in release:    http://bugs.php.net/fix.php?id=17012&r=alreadyfixed
Need backtrace:      http://bugs.php.net/fix.php?id=17012&r=needtrace
Try newer version:   http://bugs.php.net/fix.php?id=17012&r=oldversion
Not developer issue: http://bugs.php.net/fix.php?id=17012&r=support
Expected behavior:   http://bugs.php.net/fix.php?id=17012&r=notwrong
Not enough info:     http://bugs.php.net/fix.php?id=17012&r=notenoughinfo
Submitted twice:     http://bugs.php.net/fix.php?id=17012&r=submittedtwice
register_globals:    http://bugs.php.net/fix.php?id=17012&r=globals

Reply via email to