ID:          23803
 Updated by:  [EMAIL PROTECTED]
 Reported By: eddie at omegaware dot com
-Status:      Assigned
+Status:      Wont fix
 Bug Type:    COM related
 PHP Version: 4.3.3-dev
 Assigned To: wez
 New Comment:

The com extension has been completely rewritten in PHP5 and the PHP4
com extension is no longer being maintained. If you find bugs with the
com extension in PHP5 please report them.


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

[2003-05-26 14:52:06] [EMAIL PROTECTED]

It's my mess, I'll clean it up

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

[2003-05-25 22:23:57] eddie at omegaware dot com

The source code there looks exactly the same as my revision and the
code in
http://cvs.php.net/co.php/php4/ext/rpc/com/dispatch.c?login=2&r=1.7
I have just observed this problem from auditing the source as I don't
use this extension.. I ran my code which was using the same "for loop"
structure that the said function uses (initing the same zval for each
parameter and assigning it to the **params[] array) and it doens't work
there due to the problem that I mentioned..

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

[2003-05-25 22:00:12] [EMAIL PROTECTED]

Please try using this CVS snapshot:

  http://snaps.php.net/php4-STABLE-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php4-win32-STABLE-latest.zip

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

[2003-05-25 14:46:08] eddie at omegaware dot com

dispatch.c line 292 in function
static HRESULT STDMETHODCALLTYPE disp_invokdeex
will not give the expected results..

I found this while writing my own function to use call_user_function_ex
to call a function with params.. And was searching through the PHP code
to see how it was called elsewhere.. and this function is doing it the
same way I was doing it.. which doesn't work..

in line 270 a zval *zarg is allocated. then it is initialized once for
each argument.. the argument is assigned to the zarg then the address
of the zarg is stored in the **params[] array.
The problem is the *zarg has the same address for each iteration.. so
every params[i]=&zarg will assign the same address for every parameter
"i". so all the paramters will be the last parameter passed..

a zval ** needs to be allocated instead of a zval *..  so the address
is different for each parameter..
since I capped the maximum number of params I just allocate a zval
*zarg[4]; but a more dynamic solution would be better.


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


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

Reply via email to