diff options
author | Lei Zhang <thestig@chromium.org> | 2015-04-13 14:19:09 -0700 |
---|---|---|
committer | Lei Zhang <thestig@chromium.org> | 2015-04-13 14:19:09 -0700 |
commit | fd736fa51d070c84d2f82dbf5cb6a6e7faf69b6b (patch) | |
tree | f500d5cb5ab5398173ce1c03156772805c5c1102 | |
parent | 490611c264fd55def262c701f76fade02a2ebcff (diff) | |
download | pdfium-fd736fa51d070c84d2f82dbf5cb6a6e7faf69b6b.tar.xz |
Fix a global buffer overflow in GCPDF_CIDFont::_CharCodeFromUnicode
There is not a code page (CP) used for converting unicode to mutli-bytes
if the coding scheme is CID coding. Only return 0 if CID can't be retrieved.
The difference on Windows and other platforms should be the function used
for converting rather than others.
BUG=466790
R=tsepez@chromium.org
Review URL: https://codereview.chromium.org/1074653002
(cherry picked from commit 1ed2ceb70476b135a3dedbb45549d6b3bc6ecdea)
Review URL: https://codereview.chromium.org/1082893002
-rw-r--r-- | core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp b/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp index cbfa19d084..1ce91f9ed6 100644 --- a/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp +++ b/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp @@ -830,6 +830,12 @@ FX_DWORD CPDF_CIDFont::_CharCodeFromUnicode(FX_WCHAR unicode) const break; } } + + if (unicode < 0x80) { + return static_cast<FX_DWORD>(unicode); + } else if (m_pCMap->m_Coding == CIDCODING_CID) { + return 0; + } #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ FX_BYTE buffer[32]; int ret = FXSYS_WideCharToMultiByte(g_CharsetCPs[m_pCMap->m_Coding], 0, &unicode, 1, (char*)buffer, 4, NULL, NULL); @@ -840,15 +846,10 @@ FX_DWORD CPDF_CIDFont::_CharCodeFromUnicode(FX_WCHAR unicode) const } return 0; #endif - if (unicode < 0x80) { - return (FX_DWORD)unicode; - } else { - if (m_pCMap->m_pEmbedMap) { - return _EmbeddedCharcodeFromUnicode(m_pCMap->m_pEmbedMap, m_pCMap->m_Charset, unicode); - } else { - return 0; - } + if (m_pCMap->m_pEmbedMap) { + return _EmbeddedCharcodeFromUnicode(m_pCMap->m_pEmbedMap, m_pCMap->m_Charset, unicode); } + return 0; } static void FT_UseCIDCharmap(FXFT_Face face, int coding) { |