diff --git a/win32ss/gdi/ntgdi/freetype.c b/win32ss/gdi/ntgdi/freetype.c index 5fb58cf3e40..b8b3f74a03e 100644 --- a/win32ss/gdi/ntgdi/freetype.c +++ b/win32ss/gdi/ntgdi/freetype.c @@ -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); diff --git a/win32ss/gdi/ntgdi/text.c b/win32ss/gdi/ntgdi/text.c index b4130b6b2fc..4d8d8779df3 100644 --- a/win32ss/gdi/ntgdi/text.c +++ b/win32ss/gdi/ntgdi/text.c @@ -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 + * Timo Kreuzer + * James Tabor + * Hermes Belusca-Maito + * Katayama Hirofumi MZ */ /** 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 {