From 5b30480967cfe3327682adec1e8218672bb58e92 Mon Sep 17 00:00:00 2001 From: Dmitry Gorbachev Date: Thu, 10 May 2007 10:13:01 +0000 Subject: [PATCH] Fix a bug in ScServiceMainStub(), add more checks. svn path=/trunk/; revision=26672 --- reactos/dll/win32/advapi32/service/sctrl.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/advapi32/service/sctrl.c b/reactos/dll/win32/advapi32/service/sctrl.c index a0e43fb0934..bf5e7d2d58e 100644 --- a/reactos/dll/win32/advapi32/service/sctrl.c +++ b/reactos/dll/win32/advapi32/service/sctrl.c @@ -101,7 +101,7 @@ ScServiceMainStub(LPVOID Context) lpPtr = lpService->Arguments; while (*lpPtr) { - DPRINT("arg: %S\n", *lpPtr); + DPRINT("arg: %S\n", lpPtr); dwLen = wcslen(lpPtr) + 1; dwArgCount++; dwLength += dwLen; @@ -153,9 +153,15 @@ ScServiceMainStub(LPVOID Context) 0, NULL, NULL); + if (AnsiLength == 0) + return ERROR_INVALID_PARAMETER; /* ? */ + AnsiString = HeapAlloc(GetProcessHeap(), 0, - AnsiLength); + AnsiLength + 1); + if (AnsiString == NULL) + return ERROR_OUTOFMEMORY; + WideCharToMultiByte(CP_ACP, 0, lpService->Arguments, @@ -165,9 +171,13 @@ ScServiceMainStub(LPVOID Context) NULL, NULL); + AnsiString[AnsiLength] = ANSI_NULL; + lpArgVector = HeapAlloc(GetProcessHeap(), 0, (dwArgCount + 1) * sizeof(LPSTR)); + if (lpArgVector == NULL) + return ERROR_OUTOFMEMORY; dwArgCount = 0; Ptr = AnsiString;