Commit b29157e1 authored by Andrew Eikum's avatar Andrew Eikum Committed by Alexandre Julliard

services: Fix reading past end of struct (Coverity).

parent 7bc327a1
...@@ -821,6 +821,14 @@ DWORD __cdecl svcctl_ChangeServiceConfigW( ...@@ -821,6 +821,14 @@ DWORD __cdecl svcctl_ChangeServiceConfigW(
return err; return err;
} }
static void fill_status_process(SERVICE_STATUS_PROCESS *status, struct service_entry *service)
{
struct process_entry *process = service->process;
memcpy(status, &service->status, sizeof(service->status));
status->dwProcessId = process ? process->process_id : 0;
status->dwServiceFlags = 0;
}
static void fill_notify(struct sc_notify_handle *notify) static void fill_notify(struct sc_notify_handle *notify)
{ {
SC_RPC_NOTIFY_PARAMS_LIST *list; SC_RPC_NOTIFY_PARAMS_LIST *list;
...@@ -834,8 +842,7 @@ static void fill_notify(struct sc_notify_handle *notify) ...@@ -834,8 +842,7 @@ static void fill_notify(struct sc_notify_handle *notify)
cparams = (SERVICE_NOTIFY_STATUS_CHANGE_PARAMS_2 *)(list + 1); cparams = (SERVICE_NOTIFY_STATUS_CHANGE_PARAMS_2 *)(list + 1);
cparams->dwNotifyMask = notify->notify_mask; cparams->dwNotifyMask = notify->notify_mask;
memcpy(&cparams->ServiceStatus, &notify->service->service_entry->status, fill_status_process(&cparams->ServiceStatus, notify->service->service_entry);
sizeof(SERVICE_STATUS_PROCESS));
cparams->dwNotificationStatus = ERROR_SUCCESS; cparams->dwNotificationStatus = ERROR_SUCCESS;
cparams->dwNotificationTriggered = 1 << (cparams->ServiceStatus.dwCurrentState - SERVICE_STOPPED); cparams->dwNotificationTriggered = 1 << (cparams->ServiceStatus.dwCurrentState - SERVICE_STOPPED);
cparams->pszServiceNames = NULL; cparams->pszServiceNames = NULL;
...@@ -1013,14 +1020,6 @@ DWORD __cdecl svcctl_QueryServiceConfig2W( SC_RPC_HANDLE hService, DWORD level, ...@@ -1013,14 +1020,6 @@ DWORD __cdecl svcctl_QueryServiceConfig2W( SC_RPC_HANDLE hService, DWORD level,
return err; return err;
} }
static void fill_status_process(SERVICE_STATUS_PROCESS *status, struct service_entry *service)
{
struct process_entry *process = service->process;
memcpy(status, &service->status, sizeof(service->status));
status->dwProcessId = process ? process->process_id : 0;
status->dwServiceFlags = 0;
}
DWORD __cdecl svcctl_QueryServiceStatusEx( DWORD __cdecl svcctl_QueryServiceStatusEx(
SC_RPC_HANDLE hService, SC_RPC_HANDLE hService,
SC_STATUS_TYPE InfoLevel, SC_STATUS_TYPE InfoLevel,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment