mirror of
https://github.com/php/php-src.git
synced 2025-01-12 22:14:41 +08:00
Fix #25664 - COM crashes when calling a Delphi implementations of ITypeInfo.
Problem was that our extension assumes that the first param to ITypeInfo::Invoke was a reference to the COM object; this is not necessarily true and caused a crash in this instance. Problem solved by removing the ITypeInfo::Invoke call, as it doesn't buy us anything anyway.
This commit is contained in:
parent
28277f1d00
commit
cab6d93bdd
@ -290,21 +290,8 @@ HRESULT php_com_invoke_helper(php_com_dotnet_object *obj, DISPID id_member,
|
||||
unsigned int arg_err;
|
||||
EXCEPINFO e;
|
||||
|
||||
if (obj->typeinfo) {
|
||||
hr = ITypeInfo_Invoke(obj->typeinfo, V_DISPATCH(&obj->v), id_member, flags, disp_params, v, &e, &arg_err);
|
||||
if (FAILED(hr) && (hr != DISP_E_EXCEPTION)) {
|
||||
hr = IDispatch_Invoke(V_DISPATCH(&obj->v), id_member,
|
||||
&IID_NULL, LOCALE_SYSTEM_DEFAULT, flags, disp_params, v, &e, &arg_err);
|
||||
if (SUCCEEDED(hr)) {
|
||||
/* fall back on using IDispatch directly */
|
||||
ITypeInfo_Release(obj->typeinfo);
|
||||
obj->typeinfo = NULL;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
hr = IDispatch_Invoke(V_DISPATCH(&obj->v), id_member,
|
||||
&IID_NULL, LOCALE_SYSTEM_DEFAULT, flags, disp_params, v, &e, &arg_err);
|
||||
}
|
||||
hr = IDispatch_Invoke(V_DISPATCH(&obj->v), id_member,
|
||||
&IID_NULL, LOCALE_SYSTEM_DEFAULT, flags, disp_params, v, &e, &arg_err);
|
||||
|
||||
if (FAILED(hr)) {
|
||||
char *source = NULL, *desc = NULL, *msg = NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user