Rob Shearman : advapi32: Fix the size calculation in StartServiceW.

Alexandre Julliard julliard at winehq.org
Mon Feb 4 08:42:59 CST 2008


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

Author: Rob Shearman <rob at codeweavers.com>
Date:   Thu Jan 31 14:46:07 2008 +0000

advapi32: Fix the size calculation in StartServiceW.

Calculating an open-ended structure using sizeof doesn't yield an 
accurate size because of alignment.

---

 dlls/advapi32/service.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/dlls/advapi32/service.c b/dlls/advapi32/service.c
index 7cfd9ea..9f27c40 100644
--- a/dlls/advapi32/service.c
+++ b/dlls/advapi32/service.c
@@ -484,7 +484,7 @@ static BOOL service_send_start_message(HANDLE pipe, LPCWSTR *argv, DWORD argc)
     for (i=0; i<argc; i++)
         len += strlenW(argv[i])+1;
 
-    ssi = HeapAlloc(GetProcessHeap(),0,sizeof *ssi + (len-1)*sizeof(WCHAR));
+    ssi = HeapAlloc(GetProcessHeap(),0,FIELD_OFFSET(service_start_info, str[len]));
     ssi->cmd = WINESERV_STARTINFO;
     ssi->size = len;
 
@@ -497,7 +497,7 @@ static BOOL service_send_start_message(HANDLE pipe, LPCWSTR *argv, DWORD argc)
     }
     *p=0;
 
-    r = WriteFile(pipe, ssi, sizeof *ssi + (len-1)*sizeof(WCHAR), &count, NULL);
+    r = WriteFile(pipe, ssi, FIELD_OFFSET(service_start_info, str[len]), &count, NULL);
     if (r)
     {
         r = ReadFile(pipe, &result, sizeof result, &count, NULL);




More information about the wine-cvs mailing list