[WIN32K] Fix NtGdiGetTextFaceW to report face name correctly (#173)

Initialize TEXTOBJ.FaceName member in TextIntRealizeFont and use it in NtGdiGetTextFaceW 
CORE-14071
This commit is contained in:
Katayama Hirofumi MZ 2017-12-09 19:06:51 +09:00 committed by Giannis Adamopoulos
parent e95751ab78
commit ea4daf8b68
2 changed files with 33 additions and 7 deletions

View file

@ -4504,6 +4504,7 @@ TextIntRealizeFont(HFONT FontHandle, PTEXTOBJ pTextObj)
}
else
{
UNICODE_STRING NameW;
PFONTGDI FontGdi = ObjToGDI(TextObj->Font, FONT);
// Need hdev, when freetype is loaded need to create DEVOBJ for
// Consumer and Producer.
@ -4518,6 +4519,17 @@ TextIntRealizeFont(HFONT FontHandle, PTEXTOBJ pTextObj)
else
FontGdi->RequestWeight = FW_NORMAL;
/* store the localized family name */
RtlInitUnicodeString(&NameW, NULL);
Status = IntGetFontLocalizedName(&NameW, FontGdi->SharedFace,
TT_NAME_ID_FONT_FAMILY, gusLanguageID);
if (NT_SUCCESS(Status))
{
RtlCopyMemory(TextObj->FaceName, NameW.Buffer, NameW.Length);
TextObj->FaceName[NameW.Length / sizeof(WCHAR)] = UNICODE_NULL;
RtlFreeUnicodeString(&NameW);
}
Face = FontGdi->SharedFace->Face;
//FontGdi->OriginalWeight = WeightFromStyle(Face->style_name);

View file

@ -3,7 +3,11 @@
* LICENSE: GPL - See COPYING in the top level directory
* FILE: win32ss/gdi/ntgdi/text.c
* PURPOSE: Text/Font
* PROGRAMMER:
* PROGRAMMERS: Amine Khaldi <amine.khaldi@reactos.org>
* Timo Kreuzer <timo.kreuzer@reactos.org>
* James Tabor <james.tabor@reactos.org>
* Hermes Belusca-Maito <hermes.belusca@sfr.fr>
* Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
*/
/** Includes ******************************************************************/
@ -512,12 +516,14 @@ NtGdiGetTextFaceW(
TextObj = RealizeFontInit(hFont);
ASSERT(TextObj != NULL);
fLen = wcslen(TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfFaceName) + 1;
fLen = wcslen(TextObj->FaceName) + 1;
if (fLen > LF_FACESIZE)
fLen = LF_FACESIZE;
if (FaceName != NULL)
{
Count = min(Count, fLen);
Status = MmCopyToCaller(FaceName, TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfFaceName, Count * sizeof(WCHAR));
Status = MmCopyToCaller(FaceName, TextObj->FaceName, Count * sizeof(WCHAR));
if (!NT_SUCCESS(Status))
{
TEXTOBJ_UnlockText(TextObj);
@ -525,11 +531,19 @@ NtGdiGetTextFaceW(
return 0;
}
/* Terminate if we copied only part of the font name */
if (Count > 0 && Count < fLen)
{
FaceName[Count - 1] = '\0';
}
ret = Count;
if (Count > 0 && Count <= fLen)
{
_SEH2_TRY
{
FaceName[Count - 1] = '\0';
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
ret = 0;
}
_SEH2_END;
}
}
else
{