diff --git a/src/ports/SkFontHost_win_dw.cpp b/src/ports/SkFontHost_win_dw.cpp index 00623623b..a6dd2b169 100644 --- a/src/ports/SkFontHost_win_dw.cpp +++ b/src/ports/SkFontHost_win_dw.cpp @@ -68,6 +68,15 @@ static HRESULT wchar_to_skstring(WCHAR* name, SkString* skname) { "Could not get length for utf-8 to wchar conversion."); } skname->resize(len - 1); + + // TODO: remove after https://code.google.com/p/skia/issues/detail?id=1989 is fixed. + // If we resize to 0 then the skname points to gEmptyRec (the unique empty SkString::Rec). + // gEmptyRec is static const and on Windows this means the value is in a read only page. + // Writing to it in the following call to WideCharToMultiByte will cause an access violation. + if (1 == len) { + return S_OK; + } + len = WideCharToMultiByte(CP_UTF8, 0, name, -1, skname->writable_str(), len, NULL, NULL); if (0 == len) { HRM(HRESULT_FROM_WIN32(GetLastError()), "Could not convert utf-8 to wchar.");