Alexandre Julliard : msi/tests: Avoid corrupting the pending file renames key on failure.
Module: wine Branch: master Commit: 9fe16f8ae9d955508221caf00f4e135c5854fc04 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9fe16f8ae9d955508221caf00f... Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Sep 30 13:42:37 2010 +0200 msi/tests: Avoid corrupting the pending file renames key on failure. --- dlls/msi/tests/install.c | 19 +++++++------------ 1 files changed, 7 insertions(+), 12 deletions(-) diff --git a/dlls/msi/tests/install.c b/dlls/msi/tests/install.c index 345c63f..11b1de1 100644 --- a/dlls/msi/tests/install.c +++ b/dlls/msi/tests/install.c @@ -8995,17 +8995,18 @@ static char rename_ops[] = "PendingFileRenameOperations"; static void process_pending_renames(HKEY hkey) { char *buf, *src, *dst, *buf2, *buf2ptr; - DWORD size, buf2len = 0; + DWORD size; LONG ret; BOOL found = FALSE; ret = RegQueryValueExA(hkey, rename_ops, NULL, NULL, NULL, &size); - buf = HeapAlloc(GetProcessHeap(), 0, size); - buf2ptr = buf2 = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size); - buf[0] = 0; + buf = HeapAlloc(GetProcessHeap(), 0, size + 1); + buf2ptr = buf2 = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size + 1); ret = RegQueryValueExA(hkey, rename_ops, NULL, NULL, (LPBYTE)buf, &size); - ok(!ret, "RegQueryValueExA failed %d (%u)\n", ret, GetLastError()); + buf[size] = 0; + ok(!ret, "RegQueryValueExA failed %d\n", ret); + if (ret) return; for (src = buf; *src; src = dst + strlen(dst) + 1) { @@ -9016,16 +9017,13 @@ static void process_pending_renames(HKEY hkey) if (!strstr(src, "msitest")) { lstrcpyA(buf2ptr, src); - buf2len += strlen(src) + 1; buf2ptr += strlen(src) + 1; if (*dst) { lstrcpyA(buf2ptr, dst); buf2ptr += strlen(dst) + 1; - buf2len += strlen(dst) + 1; } buf2ptr++; - buf2len++; continue; } @@ -9049,10 +9047,7 @@ static void process_pending_renames(HKEY hkey) ok(found, "Expected a 'msitest' entry\n"); if (*buf2) - { - buf2len++; - RegSetValueExA(hkey, rename_ops, 0, REG_MULTI_SZ, (LPBYTE)buf2, buf2len); - } + RegSetValueExA(hkey, rename_ops, 0, REG_MULTI_SZ, (LPBYTE)buf2, buf2ptr + 1 - buf2); else RegDeleteValueA(hkey, rename_ops);
participants (1)
-
Alexandre Julliard