On Mon, Dec 16, 2019 at 11:16 AM Dmitry Timoshkov dmitry@baikal.ru wrote:
Alistair Leslie-Hughes leslie_alistair@hotmail.com wrote:
if (CoCreateInstance(&clsid, 0,
CLSCTX_INPROC_SERVER, &IID_IADsOpenDSObject, (void **)&adsopen) == S_OK)
{
hr = IADsOpenDSObject_OpenDSObject(adsopen,
(BSTR)path, (BSTR)user, (BSTR)password, reserved, &disp);
if (hr == S_OK)
You cannot cast to a BSTR, it will corrupt the data structure.
I depends wheather the callee uses SysStringLen() and friends, in this particular case it works just fine, there are many other places in the code when it's not necessary to create intermediate copies of the strings.
It does not matter if it works in this case, arguments should use correct types. If we have similar violations somewhere else, those need fixing as well.
{
hr = IDispatch_QueryInterface(disp, riid,
obj);
IDispatch_Release(disp);
Now that you have found the object, shouldn't you exit the loop?
Yes, thanks for spotting this. I think it could be fixed in a later patch.
-- Dmitry.