[1/2] advapi32: Added check for NULL pointer being passed to QueryServiceStatus for either parameter. SetLastError is set according to tests in tests/service.c and in accordance with platform.

Damian Dixon damian.dixon at gmail.com
Mon Dec 20 11:29:24 CST 2010


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

diff --git a/dlls/advapi32/service.c b/dlls/advapi32/service.c
index 5d09d18..b58f0e6 100644
--- a/dlls/advapi32/service.c
+++ b/dlls/advapi32/service.c
@@ -1130,6 +1130,31 @@ BOOL WINAPI QueryServiceStatus(SC_HANDLE hService,
 
     TRACE("%p %p\n", hService, lpservicestatus);
 
+    if (!hService)
+    {
+        SetLastError(ERROR_INVALID_HANDLE);
+        return FALSE;
+    }
+    if (!lpservicestatus)
+    {
+        OSVERSIONINFOW osVi;
+        /* Get windows version emulating */
+        osVi.dwOSVersionInfoSize = sizeof(osVi);
+        GetVersionExW(&osVi);
+        if (osVi.dwPlatformId == VER_PLATFORM_WIN32_NT)
+        {
+            if (osVi.dwMajorVersion > 4)
+            {
+                SetLastError(ERROR_INVALID_ADDRESS);
+            }
+            else
+            {
+                SetLastError(ERROR_INVALID_PARAMETER);
+            }
+        }
+        return FALSE;
+    }
+
     ret = QueryServiceStatusEx(hService, SC_STATUS_PROCESS_INFO, 
(LPBYTE)&SvcStatusData,
                                 sizeof(SERVICE_STATUS_PROCESS), &dummy);
     if (ret) memcpy(lpservicestatus, &SvcStatusData, sizeof(SERVICE_STATUS)) 
;
-- 
1.6.4.2





More information about the wine-patches mailing list