Commit ab91c011 authored by Sebastian Lackner's avatar Sebastian Lackner Committed by Alexandre Julliard

ntdll: RtlFindActivationContextSectionString should accept a NULL pointer as data.

parent f091ff58
...@@ -227,7 +227,7 @@ BOOL WINAPI FindActCtxSectionStringA(DWORD dwFlags, const GUID* lpExtGuid, ...@@ -227,7 +227,7 @@ BOOL WINAPI FindActCtxSectionStringA(DWORD dwFlags, const GUID* lpExtGuid,
TRACE("%08x %s %u %s %p\n", dwFlags, debugstr_guid(lpExtGuid), TRACE("%08x %s %u %s %p\n", dwFlags, debugstr_guid(lpExtGuid),
ulId, debugstr_a(lpSearchStr), pInfo); ulId, debugstr_a(lpSearchStr), pInfo);
if (!lpSearchStr) if (!lpSearchStr || !pInfo)
{ {
SetLastError(ERROR_INVALID_PARAMETER); SetLastError(ERROR_INVALID_PARAMETER);
return FALSE; return FALSE;
...@@ -255,6 +255,12 @@ BOOL WINAPI FindActCtxSectionStringW(DWORD dwFlags, const GUID* lpExtGuid, ...@@ -255,6 +255,12 @@ BOOL WINAPI FindActCtxSectionStringW(DWORD dwFlags, const GUID* lpExtGuid,
UNICODE_STRING us; UNICODE_STRING us;
NTSTATUS status; NTSTATUS status;
if (!pInfo)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
RtlInitUnicodeString(&us, lpSearchStr); RtlInitUnicodeString(&us, lpSearchStr);
if ((status = RtlFindActivationContextSectionString(dwFlags, lpExtGuid, ulId, &us, pInfo))) if ((status = RtlFindActivationContextSectionString(dwFlags, lpExtGuid, ulId, &us, pInfo)))
{ {
......
...@@ -2148,9 +2148,13 @@ static void ntdll_find(ULONG section, const char *string_to_find, BOOL should_fi ...@@ -2148,9 +2148,13 @@ static void ntdll_find(ULONG section, const char *string_to_find, BOOL should_fi
"RtlFindActivationContextSectionString: unexpected status 0x%x\n", ret); "RtlFindActivationContextSectionString: unexpected status 0x%x\n", ret);
ret = pRtlFindActivationContextSectionString(0, NULL, section, &string_to_findW, NULL); ret = pRtlFindActivationContextSectionString(0, NULL, section, &string_to_findW, NULL);
if (todo)
todo_wine todo_wine
ok_(__FILE__, line)(ret == (should_find ? STATUS_SUCCESS : STATUS_SXS_KEY_NOT_FOUND), ok_(__FILE__, line)(ret == (should_find ? STATUS_SUCCESS : STATUS_SXS_KEY_NOT_FOUND),
"RtlFindActivationContextSectionString: unexpected status 0x%x\n", ret); "RtlFindActivationContextSectionString: unexpected status 0x%x\n", ret);
else
ok_(__FILE__, line)(ret == (should_find ? STATUS_SUCCESS : STATUS_SXS_KEY_NOT_FOUND),
"RtlFindActivationContextSectionString: unexpected status 0x%x\n", ret);
pRtlFreeUnicodeString(&string_to_findW); pRtlFreeUnicodeString(&string_to_findW);
} }
......
...@@ -3133,6 +3133,8 @@ static NTSTATUS find_dll_redirection(ACTIVATION_CONTEXT* actctx, const UNICODE_S ...@@ -3133,6 +3133,8 @@ static NTSTATUS find_dll_redirection(ACTIVATION_CONTEXT* actctx, const UNICODE_S
index = find_string_index(actctx->dllredirect_section, name); index = find_string_index(actctx->dllredirect_section, name);
if (!index) return STATUS_SXS_KEY_NOT_FOUND; if (!index) return STATUS_SXS_KEY_NOT_FOUND;
if (data)
{
dll = get_dllredirect_data(actctx, index); dll = get_dllredirect_data(actctx, index);
data->ulDataFormatVersion = 1; data->ulDataFormatVersion = 1;
...@@ -3146,6 +3148,7 @@ static NTSTATUS find_dll_redirection(ACTIVATION_CONTEXT* actctx, const UNICODE_S ...@@ -3146,6 +3148,7 @@ static NTSTATUS find_dll_redirection(ACTIVATION_CONTEXT* actctx, const UNICODE_S
if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG)) if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG))
data->ulAssemblyRosterIndex = index->rosterindex; data->ulAssemblyRosterIndex = index->rosterindex;
}
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
...@@ -3342,6 +3345,8 @@ static NTSTATUS find_window_class(ACTIVATION_CONTEXT* actctx, const UNICODE_STRI ...@@ -3342,6 +3345,8 @@ static NTSTATUS find_window_class(ACTIVATION_CONTEXT* actctx, const UNICODE_STRI
if (!index) return STATUS_SXS_KEY_NOT_FOUND; if (!index) return STATUS_SXS_KEY_NOT_FOUND;
if (data)
{
class = get_wndclass_data(actctx, index); class = get_wndclass_data(actctx, index);
data->ulDataFormatVersion = 1; data->ulDataFormatVersion = 1;
...@@ -3356,6 +3361,7 @@ static NTSTATUS find_window_class(ACTIVATION_CONTEXT* actctx, const UNICODE_STRI ...@@ -3356,6 +3361,7 @@ static NTSTATUS find_window_class(ACTIVATION_CONTEXT* actctx, const UNICODE_STRI
if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG)) if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG))
data->ulAssemblyRosterIndex = index->rosterindex; data->ulAssemblyRosterIndex = index->rosterindex;
}
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
...@@ -4397,6 +4403,8 @@ static NTSTATUS find_progid_redirection(ACTIVATION_CONTEXT* actctx, const UNICOD ...@@ -4397,6 +4403,8 @@ static NTSTATUS find_progid_redirection(ACTIVATION_CONTEXT* actctx, const UNICOD
index = find_string_index(actctx->progid_section, name); index = find_string_index(actctx->progid_section, name);
if (!index) return STATUS_SXS_KEY_NOT_FOUND; if (!index) return STATUS_SXS_KEY_NOT_FOUND;
if (data)
{
progid = get_progid_data(actctx, index); progid = get_progid_data(actctx, index);
data->ulDataFormatVersion = 1; data->ulDataFormatVersion = 1;
...@@ -4410,6 +4418,7 @@ static NTSTATUS find_progid_redirection(ACTIVATION_CONTEXT* actctx, const UNICOD ...@@ -4410,6 +4418,7 @@ static NTSTATUS find_progid_redirection(ACTIVATION_CONTEXT* actctx, const UNICOD
if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG)) if (data->cbSize >= FIELD_OFFSET(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) + sizeof(ULONG))
data->ulAssemblyRosterIndex = index->rosterindex; data->ulAssemblyRosterIndex = index->rosterindex;
}
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
...@@ -4441,7 +4450,7 @@ static NTSTATUS find_string(ACTIVATION_CONTEXT* actctx, ULONG section_kind, ...@@ -4441,7 +4450,7 @@ static NTSTATUS find_string(ACTIVATION_CONTEXT* actctx, ULONG section_kind,
if (status != STATUS_SUCCESS) return status; 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); actctx_addref(actctx);
data->hActCtx = actctx; data->hActCtx = actctx;
...@@ -5008,7 +5017,7 @@ NTSTATUS WINAPI RtlFindActivationContextSectionString( ULONG flags, const GUID * ...@@ -5008,7 +5017,7 @@ NTSTATUS WINAPI RtlFindActivationContextSectionString( ULONG flags, const GUID *
FIXME("unknown flags %08x\n", flags); FIXME("unknown flags %08x\n", flags);
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
} }
if (!data || data->cbSize < offsetof(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex) || if ((data && data->cbSize < offsetof(ACTCTX_SECTION_KEYED_DATA, ulAssemblyRosterIndex)) ||
!section_name || !section_name->Buffer) !section_name || !section_name->Buffer)
{ {
WARN("invalid parameter\n"); WARN("invalid parameter\n");
......
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