Eric Pouech : dbghelp: Fixed regressions introduced by growing arrays exponentially instead of linearly .

Alexandre Julliard julliard at winehq.org
Tue Jul 14 10:37:53 CDT 2009


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

Author: Eric Pouech <eric.pouech at orange.fr>
Date:   Tue Jul 14 12:17:22 2009 +0200

dbghelp: Fixed regressions introduced by growing arrays exponentially instead of linearly.

---

 dlls/dbghelp/minidump.c |   32 +++++++++++++++++++-------------
 1 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/dlls/dbghelp/minidump.c b/dlls/dbghelp/minidump.c
index a786d29..4108ef4 100644
--- a/dlls/dbghelp/minidump.c
+++ b/dlls/dbghelp/minidump.c
@@ -266,18 +266,23 @@ static BOOL add_module(struct dump_context* dc, const WCHAR* name,
         dc->modules = HeapReAlloc(GetProcessHeap(), 0, dc->modules,
                                   dc->alloc_modules * sizeof(*dc->modules));
     }
-    if (!dc->modules) return FALSE;
+    if (!dc->modules)
+    {
+        dc->alloc_modules = dc->num_modules = 0;
+        return FALSE;
+    }
     if (is_elf ||
         !GetModuleFileNameExW(dc->hProcess, (HMODULE)base,
-                              dc->modules[dc->num_modules - 1].name,
-                              sizeof(dc->modules[dc->num_modules - 1].name) / sizeof(WCHAR)))
-        lstrcpynW(dc->modules[dc->num_modules - 1].name, name,
-                  sizeof(dc->modules[dc->num_modules - 1].name) / sizeof(WCHAR));
-    dc->modules[dc->num_modules - 1].base = base;
-    dc->modules[dc->num_modules - 1].size = size;
-    dc->modules[dc->num_modules - 1].timestamp = timestamp;
-    dc->modules[dc->num_modules - 1].checksum = checksum;
-    dc->modules[dc->num_modules - 1].is_elf = is_elf;
+                              dc->modules[dc->num_modules].name,
+                              sizeof(dc->modules[dc->num_modules].name) / sizeof(WCHAR)))
+        lstrcpynW(dc->modules[dc->num_modules].name, name,
+                  sizeof(dc->modules[dc->num_modules].name) / sizeof(WCHAR));
+    dc->modules[dc->num_modules].base = base;
+    dc->modules[dc->num_modules].size = size;
+    dc->modules[dc->num_modules].timestamp = timestamp;
+    dc->modules[dc->num_modules].checksum = checksum;
+    dc->modules[dc->num_modules].is_elf = is_elf;
+    dc->num_modules++;
 
     return TRUE;
 }
@@ -402,9 +407,10 @@ static void add_memory_block(struct dump_context* dc, ULONG64 base, ULONG size,
     }
     if (dc->mem)
     {
-        dc->mem[dc->num_mem - 1].base = base;
-        dc->mem[dc->num_mem - 1].size = size;
-        dc->mem[dc->num_mem - 1].rva  = rva;
+        dc->mem[dc->num_mem].base = base;
+        dc->mem[dc->num_mem].size = size;
+        dc->mem[dc->num_mem].rva  = rva;
+        dc->num_mem++;
     }
     else dc->num_mem = dc->alloc_mem = 0;
 }




More information about the wine-cvs mailing list