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