WineHQ: Corrected PATCH to fix IPersistFile::Load() and associated
functions.
Mike McCormack
mike at codeweavers.com
Fri Oct 31 05:54:25 CST 2003
Subhobroto Sinha wrote:
> Hello all
>
> I corrected my last patch after replacing everything
> C++ into C.
Great. It looks much better! There's just one last thing:
> + SHGetPathFromIDListA(This->pPidl,szTemp);
> + This->sPath=HeapAlloc( GetProcessHeap(), 0,(strlen(szTemp)+1)*sizeof(WCHAR));
> + dwBytesRead=(strlen(szTemp)+1);/*Just to hold the length of the string*/
> + MultiByteToWideChar(CP_ACP,0,szTemp,dwBytesRead,This->sPath,dwBytesRead);
> + TRACE("%s\n",debugstr_w(This->sPath));
The above code will calculate an incorrect length in some locales. You
should use:
len = MultiByteToWideChar(CP_ACP,0,szTemp,-1,NULL,0);
HeapAlloc( GetProcessHeap(), 0,len*sizeof(WCHAR));
MultiByteToWideChar(CP_ACP,0,szTemp,-1,This->sPath,len);
The (commonly made) assumption that one WCHAR is at most two multichar
bytes isn't correct.
Mike
More information about the wine-devel
mailing list