oleview: Use standard APIs in SaveIdl and avoid overflows.
This commit is contained in:
parent
ea8e860903
commit
f0ddaedc29
@ -117,8 +117,9 @@ static void SaveIdl(WCHAR *wszFileName)
|
|||||||
HTREEITEM hIDL;
|
HTREEITEM hIDL;
|
||||||
TVITEM tvi;
|
TVITEM tvi;
|
||||||
HANDLE hFile;
|
HANDLE hFile;
|
||||||
DWORD dwNumWrite;
|
DWORD len, dwNumWrite;
|
||||||
char *wszIdl;
|
char *wszIdl;
|
||||||
|
TYPELIB_DATA *data;
|
||||||
|
|
||||||
hIDL = TreeView_GetChild(typelib.hTree, TVI_ROOT);
|
hIDL = TreeView_GetChild(typelib.hTree, TVI_ROOT);
|
||||||
|
|
||||||
@ -126,31 +127,24 @@ static void SaveIdl(WCHAR *wszFileName)
|
|||||||
tvi.hItem = hIDL;
|
tvi.hItem = hIDL;
|
||||||
|
|
||||||
SendMessage(typelib.hTree, TVM_GETITEM, 0, (LPARAM)&tvi);
|
SendMessage(typelib.hTree, TVM_GETITEM, 0, (LPARAM)&tvi);
|
||||||
|
data = (TYPELIB_DATA *)tvi.lParam;
|
||||||
|
|
||||||
hFile = CreateFile(wszFileName, GENERIC_WRITE, FILE_SHARE_WRITE,
|
hFile = CreateFile(wszFileName, GENERIC_WRITE, FILE_SHARE_WRITE,
|
||||||
NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
if(hFile == INVALID_HANDLE_VALUE)
|
if(hFile == INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
ShowLastError();
|
ShowLastError();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
wszIdl = HeapAlloc(GetProcessHeap(), 0,
|
len = WideCharToMultiByte( CP_UTF8, 0, data->idl, data->idlLen, NULL, 0, NULL, NULL );
|
||||||
sizeof(WCHAR)*((TYPELIB_DATA *)(tvi.lParam))->idlLen);
|
wszIdl = HeapAlloc(GetProcessHeap(), 0, len);
|
||||||
wine_utf8_wcstombs(((TYPELIB_DATA *)(tvi.lParam))->idl,
|
WideCharToMultiByte( CP_UTF8, 0, data->idl, data->idlLen, wszIdl, len, NULL, NULL );
|
||||||
((TYPELIB_DATA *)(tvi.lParam))->idlLen, wszIdl,
|
|
||||||
((TYPELIB_DATA *)(tvi.lParam))->idlLen);
|
|
||||||
|
|
||||||
if(!WriteFile(hFile, wszIdl, ((TYPELIB_DATA *)(tvi.lParam))->idlLen,
|
if(!WriteFile(hFile, wszIdl, len, &dwNumWrite, NULL))
|
||||||
&dwNumWrite, NULL))
|
|
||||||
{
|
|
||||||
ShowLastError();
|
ShowLastError();
|
||||||
HeapFree(GetProcessHeap(), 0, wszIdl);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, wszIdl);
|
HeapFree(GetProcessHeap(), 0, wszIdl);
|
||||||
SetEndOfFile(hFile);
|
|
||||||
CloseHandle(hFile);
|
CloseHandle(hFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user