Rob Shearman : advapi32: Fix the size calculation in StartServiceW.
Module: wine Branch: master Commit: b2f4c7737b3a5e6260a95c30ec93add9b97fee76 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b2f4c7737b3a5e6260a95c30ec... Author: Rob Shearman <rob(a)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);
participants (1)
-
Alexandre Julliard