Bug #64130 [Ver->Csd]: COM obj parameters passed by reference are not updated

From: Date: Wed, 26 Aug 2020 12:58:06 +0000
Subject: Bug #64130 [Ver->Csd]: COM obj parameters passed by reference are not updated
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-228755@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=64130&edit=1 ID: 64130 Updated by: cmb@php.net Reported by: bmiller dot qw at gmail dot com Summary: COM obj parameters passed by reference are not updated -Status: Verified +Status: Closed Type: Bug Package: COM related Operating System: Windows PHP Version: 5.4.11 Assigned To: cmb Block user comment: N Private report: N New Comment: Fixed as <http://git.php.net/?p=php-src.git;a=commit;h=5ff15e2651850ba30dde69056436b8774fac9166>. Previous Comments: ------------------------------------------------------------------------ [2013-02-01 19:14:19] bmiller dot qw at gmail dot com Description: ------------ I found that COM ByRef parameters where still being treated as ByVal parameters - only for "out of process" com objects. I debugged the COM extension (or COM_DOTNET) and found that in function; php_com_get_id_of_name() (in com_com.c) was calling "hr = ITypeInfo_GetIDsOfNames(obj->typeinfo, &olename, 1, dispid);" to get the com object dispatch id from the member name. For out of process objects this will always return E_NOTIMPL. Thus the iTypeInfo object (obj->typeinfo) would be destroyed. The final result would be that ByRef parameters would NOT be detected. Easy fix; Just ALWAYS use the IDispatch_GetIDsOfNames and only use iTypeInfo for the ITypeInfo_GetTypeComp call - which is what we need. Test script: --------------- //(need MS word) or any app that has a COM interface $word = new COM("word.application") or die("Unable to instantiate Word"); $word->Visible = 1; /* In the com_com.c, place a breakpoint at: hr = ITypeInfo_GetIDsOfNames(obj->typeinfo, &olename, 1, dispid); It will always return E_NOTIMPL then the code deletes obj->typeinfo which ultimately causes the problem */ Expected result: ---------------- If the com object function call used references then the variable would be changed. Sorry I couldn't find a public COM object off hand that passed variables by reference. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=64130&edit=1

« previous php.bugs (#228755) next »