mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-14 17:47:16 +00:00
ntdll: Add ACTCTX field limit checks to RtlCreateActivationContext().
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
This commit is contained in:
parent
e8ce99792e
commit
909204005b
|
@ -2853,7 +2853,6 @@ static void test_CreateActCtx(void)
|
|||
handle = CreateActCtxW(&ctxW);
|
||||
if (!test[i].error)
|
||||
{
|
||||
todo_wine
|
||||
ok(handle != INVALID_HANDLE_VALUE, "CreateActCtx error %lu\n", GetLastError());
|
||||
ReleaseActCtx(handle);
|
||||
}
|
||||
|
@ -2868,7 +2867,6 @@ static void test_CreateActCtx(void)
|
|||
ctxW.lpSource = sourceW; /* source without hModule must point to valid PE */
|
||||
SetLastError(0xdeadbeef);
|
||||
handle = CreateActCtxW(&ctxW);
|
||||
todo_wine_if(i != 4)
|
||||
ok(handle != INVALID_HANDLE_VALUE, "CreateActCtx error %lu\n", GetLastError());
|
||||
ReleaseActCtx(handle);
|
||||
|
||||
|
|
|
@ -5261,9 +5261,17 @@ NTSTATUS WINAPI RtlCreateActivationContext( HANDLE *handle, const void *ptr )
|
|||
|
||||
TRACE("%p %08lx\n", pActCtx, pActCtx ? pActCtx->dwFlags : 0);
|
||||
|
||||
if (!pActCtx || pActCtx->cbSize < sizeof(*pActCtx) ||
|
||||
(pActCtx->dwFlags & ~ACTCTX_FLAGS_ALL))
|
||||
#define CHECK_LIMIT( field ) (pActCtx->cbSize >= RTL_SIZEOF_THROUGH_FIELD( ACTCTXW, field ))
|
||||
if (!pActCtx || (pActCtx->dwFlags & ~ACTCTX_FLAGS_ALL) ||
|
||||
!CHECK_LIMIT( lpSource ) ||
|
||||
((pActCtx->dwFlags & ACTCTX_FLAG_PROCESSOR_ARCHITECTURE_VALID) && !CHECK_LIMIT( wProcessorArchitecture )) ||
|
||||
((pActCtx->dwFlags & ACTCTX_FLAG_LANGID_VALID) && !CHECK_LIMIT( wLangId )) ||
|
||||
((pActCtx->dwFlags & ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID) && !CHECK_LIMIT( lpAssemblyDirectory )) ||
|
||||
((pActCtx->dwFlags & ACTCTX_FLAG_RESOURCE_NAME_VALID) && !CHECK_LIMIT( lpResourceName )) ||
|
||||
((pActCtx->dwFlags & ACTCTX_FLAG_APPLICATION_NAME_VALID) && !CHECK_LIMIT( lpApplicationName )) ||
|
||||
((pActCtx->dwFlags & ACTCTX_FLAG_HMODULE_VALID) && !CHECK_LIMIT( hModule )))
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
#undef CHECK_LIMIT
|
||||
|
||||
if ((pActCtx->dwFlags & ACTCTX_FLAG_RESOURCE_NAME_VALID) && !pActCtx->lpResourceName)
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
|
|
Loading…
Reference in a new issue