summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJun Fang <jun_fang@foxitsoftware.com>2015-04-09 09:59:41 -0700
committerJUN FANG <jun_fang@foxitsoftware.com>2015-04-09 10:18:48 -0700
commite081aa0ffc57b70b8ff6581e956617f898c7b9e0 (patch)
tree82221323df6be5f6fecede9295b078dc4e2fe4f6
parent245c80e410deff6ee35f62adce42dd0fcf46845a (diff)
downloadpdfium-e081aa0ffc57b70b8ff6581e956617f898c7b9e0.tar.xz
Merge to XFA: 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
-rw-r--r--core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp17
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)
{