[4/4] msi: Only use Windows platform-specific encoded strings from the font naming table.
Hans Leidekker
hans at codeweavers.com
Fri Sep 23 04:13:04 CDT 2011
See http://bugs.winehq.org/show_bug.cgi?id=28443
---
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;
}
--
1.7.5.4
More information about the wine-patches
mailing list