diff --git a/reactos/dll/win32/advapi32/service/eventlog.c b/reactos/dll/win32/advapi32/service/eventlog.c index 775d9c9f18c..0f7c48b148d 100644 --- a/reactos/dll/win32/advapi32/service/eventlog.c +++ b/reactos/dll/win32/advapi32/service/eventlog.c @@ -632,6 +632,13 @@ ReadEventLogA(IN HANDLE hEventLog, hEventLog, dwReadFlags, dwRecordOffset, lpBuffer, nNumberOfBytesToRead, pnBytesRead, pnMinNumberOfBytesNeeded); + /* If buffer is NULL set nNumberOfBytesToRead to 0 to prevent rpcrt4 from + trying to access a null pointer */ + if (!lpBuffer) + { + nNumberOfBytesToRead = 0; + } + RpcTryExcept { Status = ElfrReadELA(hEventLog, @@ -648,15 +655,15 @@ ReadEventLogA(IN HANDLE hEventLog, } RpcEndExcept; + *pnBytesRead = (DWORD)bytesRead; + *pnMinNumberOfBytesNeeded = (DWORD)minNumberOfBytesNeeded; + if (!NT_SUCCESS(Status)) { SetLastError(RtlNtStatusToDosError(Status)); return FALSE; } - *pnBytesRead = (DWORD)bytesRead; - *pnMinNumberOfBytesNeeded = (DWORD)minNumberOfBytesNeeded; - return TRUE; } @@ -689,6 +696,13 @@ ReadEventLogW(IN HANDLE hEventLog, hEventLog, dwReadFlags, dwRecordOffset, lpBuffer, nNumberOfBytesToRead, pnBytesRead, pnMinNumberOfBytesNeeded); + /* If buffer is NULL set nNumberOfBytesToRead to 0 to prevent rpcrt4 from + trying to access a null pointer */ + if (!lpBuffer) + { + nNumberOfBytesToRead = 0; + } + RpcTryExcept { Status = ElfrReadELW(hEventLog, @@ -705,15 +719,15 @@ ReadEventLogW(IN HANDLE hEventLog, } RpcEndExcept; + *pnBytesRead = (DWORD)bytesRead; + *pnMinNumberOfBytesNeeded = (DWORD)minNumberOfBytesNeeded; + if (!NT_SUCCESS(Status)) { SetLastError(RtlNtStatusToDosError(Status)); return FALSE; } - *pnBytesRead = (DWORD)bytesRead; - *pnMinNumberOfBytesNeeded = (DWORD)minNumberOfBytesNeeded; - return TRUE; }