Bug #17012: releasing IDispatch interface too many times (putprop issue)

From: Date: Sun, 05 May 2002 12:38:41 +0000
Subject: Bug #17012: releasing IDispatch interface too many times (putprop issue)
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-6948@lists.php.net to get a copy of this message
From: rybak@gorlice.net.pl 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

« previous php.bugs (#6948) next »