Marcus Meissner : oleaut2: Pass up errors on typelib writeout (Coverity).

Alexandre Julliard julliard at winehq.org
Mon Oct 1 13:35:00 CDT 2012


Module: wine
Branch: master
Commit: d8c1507846ce40d9c3d4273f03daea3522292e50
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d8c1507846ce40d9c3d4273f03daea3522292e50

Author: Marcus Meissner <marcus at 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;
 




More information about the wine-cvs mailing list