Module: wine Branch: master Commit: d8c1507846ce40d9c3d4273f03daea3522292e50 URL: http://source.winehq.org/git/wine.git/?a=commit;h=d8c1507846ce40d9c3d4273f03...
Author: Marcus Meissner marcus@jet.franken.de Date: Sat Sep 29 17:58:54 2012 +0200
oleaut2: Pass up errors on typelib writeout (Coverity).
---
dlls/oleaut32/typelib2.c | 21 ++++++++++++++------- 1 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/dlls/oleaut32/typelib2.c b/dlls/oleaut32/typelib2.c index 78995de..8ea95fe 100644 --- a/dlls/oleaut32/typelib2.c +++ b/dlls/oleaut32/typelib2.c @@ -4531,6 +4531,7 @@ static int ctl2_write_chunk(HANDLE hFile, const void *segment, int length) { DWORD dwWritten; if (!WriteFile(hFile, segment, length, &dwWritten, 0)) { + TRACE("Writefile(%p, %d) failed, lasterror %d\n", segment, length, GetLastError()); CloseHandle(hFile); return 0; } @@ -4581,7 +4582,7 @@ static int ctl2_finalize_segment(ICreateTypeLib2Impl *This, int filepos, int seg return This->typelib_segdir[segment].length; }
-static void ctl2_write_typeinfos(ICreateTypeLib2Impl *This, HANDLE hFile) +static int ctl2_write_typeinfos(ICreateTypeLib2Impl *This, HANDLE hFile) { ICreateTypeInfo2Impl *typeinfo;
@@ -4592,21 +4593,27 @@ static void ctl2_write_typeinfos(ICreateTypeLib2Impl *This, HANDLE hFile) if (!typeinfo->typedata) continue;
iter = typeinfo->typedata->next; - ctl2_write_chunk(hFile, &iter->u.val, sizeof(int)); + if (!ctl2_write_chunk(hFile, &iter->u.val, sizeof(int))) + return 0; for(iter=iter->next; iter!=typeinfo->typedata->next; iter=iter->next) - ctl2_write_chunk(hFile, iter->u.data, ctl2_get_record_size(iter)); + if (!ctl2_write_chunk(hFile, iter->u.data, ctl2_get_record_size(iter))) + return 0;
for(iter=typeinfo->typedata->next->next; iter!=typeinfo->typedata->next; iter=iter->next) - ctl2_write_chunk(hFile, &iter->indice, sizeof(int)); + if (!ctl2_write_chunk(hFile, &iter->indice, sizeof(int))) + return 0;
for(iter=typeinfo->typedata->next->next; iter!=typeinfo->typedata->next; iter=iter->next) - ctl2_write_chunk(hFile, &iter->name, sizeof(int)); + if (!ctl2_write_chunk(hFile, &iter->name, sizeof(int))) + return 0;
for(iter=typeinfo->typedata->next->next; iter!=typeinfo->typedata->next; iter=iter->next) { - ctl2_write_chunk(hFile, &offset, sizeof(int)); + if (!ctl2_write_chunk(hFile, &offset, sizeof(int))) + return 0; offset += ctl2_get_record_size(iter); } } + return 1; }
/****************************************************************************** @@ -4669,7 +4676,7 @@ static HRESULT WINAPI ICreateTypeLib2_fnSaveAllChanges(ICreateTypeLib2 * iface) if (!ctl2_write_segment(This, hFile, MSFT_SEG_CUSTDATA )) return retval; if (!ctl2_write_segment(This, hFile, MSFT_SEG_CUSTDATAGUID)) return retval;
- ctl2_write_typeinfos(This, hFile); + if (!ctl2_write_typeinfos(This, hFile)) return retval;
if (!CloseHandle(hFile)) return retval;