From ca741823ddb404d8b11131bca674e9791376a8e2 Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Fri, 23 Sep 2011 11:13:04 +0200 Subject: [PATCH] msi: Only use Windows platform-specific encoded strings from the font naming table. --- dlls/msi/font.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/dlls/msi/font.c b/dlls/msi/font.c index 528eab740d0..0b728a35567 100644 --- a/dlls/msi/font.c +++ b/dlls/msi/font.c @@ -143,17 +143,28 @@ static WCHAR *load_ttf_name_id( const WCHAR *filename, DWORD id ) break; ttRecord.uNameID = SWAPWORD(ttRecord.uNameID); - if (ttRecord.uNameID == id) + ttRecord.uPlatformID = SWAPWORD(ttRecord.uPlatformID); + ttRecord.uEncodingID = SWAPWORD(ttRecord.uEncodingID); + if (ttRecord.uNameID == id && ttRecord.uPlatformID == 3 && + (ttRecord.uEncodingID == 0 || ttRecord.uEncodingID == 1)) { - LPSTR buf; + WCHAR *buf; + unsigned int i; ttRecord.uStringLength = SWAPWORD(ttRecord.uStringLength); ttRecord.uStringOffset = SWAPWORD(ttRecord.uStringOffset); SetFilePointer(handle, tblDir.uOffset + ttRecord.uStringOffset + ttNTHeader.uStorageOffset, NULL, FILE_BEGIN); - if (!(buf = msi_alloc_zero( ttRecord.uStringLength + 1 ))) goto end; + if (!(buf = msi_alloc_zero( ttRecord.uStringLength + sizeof(WCHAR) ))) goto end; + dwRead = 0; ReadFile(handle, buf, ttRecord.uStringLength, &dwRead, NULL); - ret = strdupAtoW(buf); + if (dwRead % sizeof(WCHAR)) + { + msi_free(buf); + goto end; + } + for (i = 0; i < dwRead / sizeof(WCHAR); i++) buf[i] = SWAPWORD(buf[i]); + ret = strdupW(buf); msi_free(buf); break; }