diff --git a/dlls/oleaut32/ole2disp.c b/dlls/oleaut32/ole2disp.c index c0a9f8b3a64..ac608513365 100644 --- a/dlls/oleaut32/ole2disp.c +++ b/dlls/oleaut32/ole2disp.c @@ -303,7 +303,18 @@ int WINAPI SysStringLen(BSTR str) */ int WINAPI SysStringByteLen(BSTR str) { - return SysStringLen(str)*sizeof(WCHAR); + DWORD* bufferPointer; + + if (!str) return 0; + /* + * The length of the string (in bytes) is contained in a DWORD placed + * just before the BSTR pointer + */ + bufferPointer = (DWORD*)str; + + bufferPointer--; + + return (int)(*bufferPointer); } /******************************************************************************