From: Amine Khaldi Date: Fri, 27 Nov 2015 18:06:47 +0000 (+0000) Subject: [KERNEL32][NTDLL] Apply Wine commit ab91c01 by Sebastian Lackner: RtlFindActivationCo... X-Git-Tag: ReactOS-0.4.0~59^2~169 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=f42267b75afd38cbf8465e34c9ef1a30b079d558 [KERNEL32][NTDLL] Apply Wine commit ab91c01 by Sebastian Lackner: RtlFindActivationContextSectionString should accept a NULL pointer as data. Fixes 15 kernel32:actctx tests. CORE-10536 svn path=/trunk/; revision=70152 --- diff --git a/reactos/dll/win32/kernel32/wine/actctx.c b/reactos/dll/win32/kernel32/wine/actctx.c index c1a73d16972..3294341067c 100644 --- a/reactos/dll/win32/kernel32/wine/actctx.c +++ b/reactos/dll/win32/kernel32/wine/actctx.c @@ -132,7 +132,7 @@ BOOL WINAPI FindActCtxSectionStringA(DWORD dwFlags, const GUID* lpExtGuid, TRACE("%08x %s %u %s %p\n", dwFlags, debugstr_guid(lpExtGuid), ulId, debugstr_a(lpSearchStr), pInfo); - if (!lpSearchStr) + if (!lpSearchStr || !pInfo) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; @@ -160,6 +160,12 @@ BOOL WINAPI FindActCtxSectionStringW(DWORD dwFlags, const GUID* lpExtGuid, UNICODE_STRING us; NTSTATUS status; + if (!pInfo) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + RtlInitUnicodeString(&us, lpSearchStr); if ((status = RtlFindActivationContextSectionString(dwFlags, lpExtGuid, ulId, &us, pInfo))) { diff --git a/reactos/lib/rtl/actctx.c b/reactos/lib/rtl/actctx.c index 7baf87e8edf..007ac7cca79 100644 --- a/reactos/lib/rtl/actctx.c +++ b/reactos/lib/rtl/actctx.c @@ -3287,19 +3287,22 @@ static NTSTATUS find_dll_redirection(ACTIVATION_CONTEXT* actctx, const UNICODE_S DPRINT("index: %d\n", index); if (!index) return STATUS_SXS_KEY_NOT_FOUND; - dll = get_dllredirect_data(actctx, index); + if (data) + { + dll = get_dllredirect_data(actctx, index); - data->ulDataFormatVersion = 1; - data->lpData = dll; - data->ulLength = dll->size; - data->lpSectionGlobalData = NULL; - data->ulSectionGlobalDataLength = 0; - data->lpSectionBase = actctx->dllredirect_section; - data->ulSectionTotalLength = RtlSizeHeap( RtlGetProcessHeap(), 0, actctx->dllredirect_section ); - data->hActCtx = NULL; + data->ulDataFormatVersion = 1; + data->lpData = dll; + data->ulLength = dll->size; + data->lpSectionGlobalData = NULL; + data->ulSectionGlobalDataLength = 0; + data->lpSectionBase = actctx->dllredirect_section; + data->ulSectionTotalLength = RtlSizeHeap( RtlGetProcessHeap(), 0, actctx->dllredirect_section ); + data->hActCtx = NULL; - if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG)) - data->ulAssemblyRosterIndex = index->rosterindex; + if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG)) + data->ulAssemblyRosterIndex = index->rosterindex; + } return STATUS_SUCCESS; } @@ -3496,20 +3499,23 @@ static NTSTATUS find_window_class(ACTIVATION_CONTEXT* actctx, const UNICODE_STRI if (!index) return STATUS_SXS_KEY_NOT_FOUND; - class = get_wndclass_data(actctx, index); + if (data) + { + class = get_wndclass_data(actctx, index); - data->ulDataFormatVersion = 1; - data->lpData = class; - /* full length includes string length with nulls */ - data->ulLength = class->size + class->name_len + class->module_len + 2*sizeof(WCHAR); - data->lpSectionGlobalData = NULL; - data->ulSectionGlobalDataLength = 0; - data->lpSectionBase = actctx->wndclass_section; - data->ulSectionTotalLength = RtlSizeHeap( RtlGetProcessHeap(), 0, actctx->wndclass_section ); - data->hActCtx = NULL; + data->ulDataFormatVersion = 1; + data->lpData = class; + /* full length includes string length with nulls */ + data->ulLength = class->size + class->name_len + class->module_len + 2*sizeof(WCHAR); + data->lpSectionGlobalData = NULL; + data->ulSectionGlobalDataLength = 0; + data->lpSectionBase = actctx->wndclass_section; + data->ulSectionTotalLength = RtlSizeHeap( RtlGetProcessHeap(), 0, actctx->wndclass_section ); + data->hActCtx = NULL; - if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG)) - data->ulAssemblyRosterIndex = index->rosterindex; + if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG)) + data->ulAssemblyRosterIndex = index->rosterindex; + } return STATUS_SUCCESS; } @@ -4551,19 +4557,22 @@ static NTSTATUS find_progid_redirection(ACTIVATION_CONTEXT* actctx, const UNICOD index = find_string_index(actctx->progid_section, name); if (!index) return STATUS_SXS_KEY_NOT_FOUND; - progid = get_progid_data(actctx, index); + if (data) + { + progid = get_progid_data(actctx, index); - data->ulDataFormatVersion = 1; - data->lpData = progid; - data->ulLength = progid->size; - data->lpSectionGlobalData = (BYTE*)actctx->progid_section + actctx->progid_section->global_offset; - data->ulSectionGlobalDataLength = actctx->progid_section->global_len; - data->lpSectionBase = actctx->progid_section; - data->ulSectionTotalLength = RtlSizeHeap( RtlGetProcessHeap(), 0, actctx->progid_section ); - data->hActCtx = NULL; + data->ulDataFormatVersion = 1; + data->lpData = progid; + data->ulLength = progid->size; + data->lpSectionGlobalData = (BYTE*)actctx->progid_section + actctx->progid_section->global_offset; + data->ulSectionGlobalDataLength = actctx->progid_section->global_len; + data->lpSectionBase = actctx->progid_section; + data->ulSectionTotalLength = RtlSizeHeap( RtlGetProcessHeap(), 0, actctx->progid_section ); + data->hActCtx = NULL; - if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG)) - data->ulAssemblyRosterIndex = index->rosterindex; + if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG)) + data->ulAssemblyRosterIndex = index->rosterindex; + } return STATUS_SUCCESS; } @@ -4595,7 +4604,7 @@ static NTSTATUS find_string(ACTIVATION_CONTEXT* actctx, ULONG section_kind, if (status != STATUS_SUCCESS) return status; - if (flags & FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX) + if (data && (flags & FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX)) { actctx_addref(actctx); data->hActCtx = actctx; diff --git a/reactos/media/doc/README.WINE b/reactos/media/doc/README.WINE index cae8afa6bde..be533962667 100644 --- a/reactos/media/doc/README.WINE +++ b/reactos/media/doc/README.WINE @@ -266,7 +266,7 @@ gdi32 - reactos/dll/win32/gdi32/objects/linedda.c # Synced at 20090410 kernel32 - - reactos/dll/win32/kernel32/wine/actctx.c # Partly synced with Wine 1.7.17 + reactos/dll/win32/kernel32/wine/actctx.c # Partly synced with Wine 1.7.55 reactos/dll/win32/kernel32/wine/comm.c # Synced in r52754 reactos/dll/win32/kernel32/wine/lzexpand.c # Synced in r52754 reactos/dll/win32/kernel32/wine/profile.c # Synced in r52754