mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 00:45:24 +00:00
Improve security. CORE-11700
This commit is contained in:
parent
f7d068e2bd
commit
d519b11a28
1 changed files with 16 additions and 7 deletions
|
@ -654,7 +654,8 @@ NtUserGetKeyboardLayoutName(
|
|||
BOOL bRet = FALSE;
|
||||
PKL pKl;
|
||||
PTHREADINFO pti;
|
||||
UNICODE_STRING ustrTemp;
|
||||
UNICODE_STRING ustrNameSafe;
|
||||
NTSTATUS Status;
|
||||
|
||||
UserEnterShared();
|
||||
|
||||
|
@ -667,24 +668,32 @@ NtUserGetKeyboardLayoutName(
|
|||
_SEH2_TRY
|
||||
{
|
||||
ProbeForWriteUnicodeString(pustrName);
|
||||
ProbeForWrite(pustrName->Buffer, pustrName->MaximumLength, 1);
|
||||
ustrNameSafe = *pustrName;
|
||||
|
||||
ProbeForWrite(ustrNameSafe.Buffer, ustrNameSafe.MaximumLength, 1);
|
||||
|
||||
if (IS_IME_HKL(pKl->hkl))
|
||||
{
|
||||
RtlIntegerToUnicodeString((ULONG)(ULONG_PTR)pKl->hkl, 16, pustrName);
|
||||
Status = RtlIntegerToUnicodeString((ULONG)(ULONG_PTR)pKl->hkl, 16, &ustrNameSafe);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pustrName->MaximumLength < KL_NAMELENGTH * sizeof(WCHAR))
|
||||
if (ustrNameSafe.MaximumLength < KL_NAMELENGTH * sizeof(WCHAR))
|
||||
{
|
||||
EngSetLastError(ERROR_INVALID_PARAMETER);
|
||||
goto cleanup;
|
||||
}
|
||||
RtlInitUnicodeString(&ustrTemp, pKl->spkf->awchKF); /* FIXME: Do not use awchKF */
|
||||
RtlCopyUnicodeString(pustrName, &ustrTemp);
|
||||
|
||||
/* FIXME: Do not use awchKF */
|
||||
ustrNameSafe.Length = 0;
|
||||
Status = RtlAppendUnicodeToString(&ustrNameSafe, pKl->spkf->awchKF);
|
||||
}
|
||||
|
||||
bRet = TRUE;
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
*pustrName = ustrNameSafe;
|
||||
bRet = TRUE;
|
||||
}
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue