summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Pena <npm@chromium.org>2017-05-16 17:01:30 -0400
committerChromium commit bot <commit-bot@chromium.org>2017-05-16 22:02:47 +0000
commitdde95d8be9bc2817e34429fc38ee6d89d6d5ab75 (patch)
treee901763a96a94d430f26b4895ec19dd6d1304d01
parent9792f16f3ef27a1e0c7f0526cc69637a158e3010 (diff)
downloadpdfium-dde95d8be9bc2817e34429fc38ee6d89d6d5ab75.tar.xz
Small fix in CPDF_TrueTypeFont load
The ToUnicode map should not be ignored when it exists. Doing so can cause a charcode to be assigned an incorrect glyph index, and will result in garbled text. Bug: chromium:665467 Change-Id: I21c1bf560a0731d974191d4189ea730ef9868334 Reviewed-on: https://pdfium-review.googlesource.com/5512 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Nicolás Peña <npm@chromium.org>
-rw-r--r--core/fpdfapi/font/cpdf_truetypefont.cpp40
-rw-r--r--testing/resources/pixel/bug_665467.in93
-rw-r--r--testing/resources/pixel/bug_665467.pdf106
-rw-r--r--testing/resources/pixel/bug_665467_expected.pdf.0.pngbin0 -> 467 bytes
-rw-r--r--testing/resources/pixel/bug_665467_expected_mac.pdf.0.pngbin0 -> 509 bytes
5 files changed, 217 insertions, 22 deletions
diff --git a/core/fpdfapi/font/cpdf_truetypefont.cpp b/core/fpdfapi/font/cpdf_truetypefont.cpp
index d78a5e0eb2..7f4512da05 100644
--- a/core/fpdfapi/font/cpdf_truetypefont.cpp
+++ b/core/fpdfapi/font/cpdf_truetypefont.cpp
@@ -125,28 +125,24 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
}
}
}
- if ((m_GlyphIndex[charcode] == 0 || m_GlyphIndex[charcode] == 0xffff) &&
- name) {
- if (name[0] == '.' && strcmp(name, ".notdef") == 0) {
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.GetFace(), 32);
- } else {
- m_GlyphIndex[charcode] =
- FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name);
- if (m_GlyphIndex[charcode] == 0) {
- if (bToUnicode) {
- CFX_WideString wsUnicode = UnicodeFromCharCode(charcode);
- if (!wsUnicode.IsEmpty()) {
- m_GlyphIndex[charcode] =
- FXFT_Get_Char_Index(m_Font.GetFace(), wsUnicode[0]);
- m_Encoding.m_Unicodes[charcode] = wsUnicode[0];
- }
- }
- if (m_GlyphIndex[charcode] == 0) {
- m_GlyphIndex[charcode] =
- FXFT_Get_Char_Index(m_Font.GetFace(), charcode);
- }
- }
- }
+ if ((m_GlyphIndex[charcode] != 0 && m_GlyphIndex[charcode] != 0xffff) ||
+ !name) {
+ continue;
+ }
+ if (strcmp(name, ".notdef") == 0) {
+ m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.GetFace(), 32);
+ continue;
+ }
+ m_GlyphIndex[charcode] =
+ FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name);
+ if (m_GlyphIndex[charcode] != 0 || !bToUnicode)
+ continue;
+
+ CFX_WideString wsUnicode = UnicodeFromCharCode(charcode);
+ if (!wsUnicode.IsEmpty()) {
+ m_GlyphIndex[charcode] =
+ FXFT_Get_Char_Index(m_Font.GetFace(), wsUnicode[0]);
+ m_Encoding.m_Unicodes[charcode] = wsUnicode[0];
}
}
return;
diff --git a/testing/resources/pixel/bug_665467.in b/testing/resources/pixel/bug_665467.in
new file mode 100644
index 0000000000..0166ee4c67
--- /dev/null
+++ b/testing/resources/pixel/bug_665467.in
@@ -0,0 +1,93 @@
+{{header}}
+{{object 1 0}}
+<<
+ /Type /Catalog
+ /Pages 2 0 R
+>>
+{{object 2 0}}
+<<
+ /Type /Pages
+ /MediaBox [ 0 0 100 100 ]
+ /Count 1
+ /Kids [ 3 0 R ]
+>>
+endobj
+{{object 3 0}}
+<<
+ /Type /Page
+ /Parent 2 0 R
+ /Resources
+ <<
+ /Font << /F1 4 0 R >>
+ >>
+ /Contents 9 0 R
+>>
+endobj
+{{object 4 0}}
+<<
+ /Type /Font
+ /Subtype /TrueType
+ /BaseFont /ChromeSansMM
+ /Encoding 6 0 R
+ /FirstChar 32
+ /LastChar 255
+ /Name /F1
+ /ToUnicode 7 0 R
+ /FontDescriptor 8 0 R
+>>
+endobj
+{{object 6 0}}
+<<
+ /Differences [ 161 /someunknownname ]
+ /Type /Encoding
+>>
+{{object 7 0}} <<
+>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<</Registry (Adobe)
+/Ordering (Identity)
+/Supplement 0
+>> def
+/CMapName /Adobe-Identity-H def
+CMapType 2 def
+1 begincodespacerange
+<00> <FF>
+endcodespacerange
+1 beginbfchar
+<A1> <043B>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+endobj
+{{object 8 0}}
+<<
+ << /Ascent 1000
+ /CapHeight 0
+ /Descent -200
+ /Flags 32
+ /FontBBox [ -599 -207 1338 1034 ]
+ /FontName /ChromeSansMM
+ /ItalicAngle 0
+ /StemV 0
+ /Type /FontDescriptor
+>>
+{{object 9 0}} <<
+>>
+stream
+BT
+50 50 Td /F1 15 Tf <A1> Tj
+ET
+endstream
+endobj
+{{xref}}
+trailer <<
+ /Root 1 0 R
+>>
+{{startxref}}
+%%EOF
diff --git a/testing/resources/pixel/bug_665467.pdf b/testing/resources/pixel/bug_665467.pdf
new file mode 100644
index 0000000000..e0ec6ea28d
--- /dev/null
+++ b/testing/resources/pixel/bug_665467.pdf
@@ -0,0 +1,106 @@
+%PDF-1.7
+% ò¤ô
+1 0 obj
+<<
+ /Type /Catalog
+ /Pages 2 0 R
+>>
+2 0 obj
+<<
+ /Type /Pages
+ /MediaBox [ 0 0 100 100 ]
+ /Count 1
+ /Kids [ 3 0 R ]
+>>
+endobj
+3 0 obj
+<<
+ /Type /Page
+ /Parent 2 0 R
+ /Resources
+ <<
+ /Font << /F1 4 0 R >>
+ >>
+ /Contents 9 0 R
+>>
+endobj
+4 0 obj
+<<
+ /Type /Font
+ /Subtype /TrueType
+ /BaseFont /ChromeSansMM
+ /Encoding 6 0 R
+ /FirstChar 32
+ /LastChar 255
+ /Name /F1
+ /ToUnicode 7 0 R
+ /FontDescriptor 8 0 R
+>>
+endobj
+6 0 obj
+<<
+ /Differences [ 161 /someunknownname ]
+ /Type /Encoding
+>>
+7 0 obj <<
+>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<</Registry (Adobe)
+/Ordering (Identity)
+/Supplement 0
+>> def
+/CMapName /Adobe-Identity-H def
+CMapType 2 def
+1 begincodespacerange
+<00> <FF>
+endcodespacerange
+1 beginbfchar
+<A1> <043B>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+endobj
+8 0 obj
+<<
+ << /Ascent 1000
+ /CapHeight 0
+ /Descent -200
+ /Flags 32
+ /FontBBox [ -599 -207 1338 1034 ]
+ /FontName /ChromeSansMM
+ /ItalicAngle 0
+ /StemV 0
+ /Type /FontDescriptor
+>>
+9 0 obj <<
+>>
+stream
+BT
+50 50 Td /F1 15 Tf <A1> Tj
+ET
+endstream
+endobj
+xref
+0 10
+0000000000 65535 f
+0000000015 00000 n
+0000000061 00000 n
+0000000154 00000 n
+0000000272 00000 n
+0000000000 65535 f
+0000000459 00000 n
+0000000531 00000 n
+0000000892 00000 n
+0000001081 00000 n
+trailer <<
+ /Root 1 0 R
+>>
+startxref
+1152
+%%EOF
diff --git a/testing/resources/pixel/bug_665467_expected.pdf.0.png b/testing/resources/pixel/bug_665467_expected.pdf.0.png
new file mode 100644
index 0000000000..617cb0a916
--- /dev/null
+++ b/testing/resources/pixel/bug_665467_expected.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_665467_expected_mac.pdf.0.png b/testing/resources/pixel/bug_665467_expected_mac.pdf.0.png
new file mode 100644
index 0000000000..9f51dcb855
--- /dev/null
+++ b/testing/resources/pixel/bug_665467_expected_mac.pdf.0.png
Binary files differ