Hans Leidekker : msi: Only use Windows platform-specific encoded strings from the font naming table .
Alexandre Julliard
julliard at winehq.org
Fri Sep 23 10:56:51 CDT 2011
Module: wine
Branch: master
Commit: ca741823ddb404d8b11131bca674e9791376a8e2
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ca741823ddb404d8b11131bca674e9791376a8e2
Author: Hans Leidekker <hans at codeweavers.com>
Date: Fri Sep 23 11:13:04 2011 +0200
msi: Only use Windows platform-specific encoded strings from the font naming table.
---
dlls/msi/font.c | 19 +++++++++++++++----
1 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/dlls/msi/font.c b/dlls/msi/font.c
index 528eab7..0b728a3 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;
}
More information about the wine-cvs
mailing list