Index: core/fpdfapi/fpdf_page/fpdf_page_parser.cpp |
diff --git a/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp b/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp |
index bf691f41d2f2053404d6ef5d4e0f90f88c37c3c3..a31ed8d5f2b63c5862078a158f14791ef2d009c3 100644 |
--- a/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp |
+++ b/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp |
@@ -41,42 +41,24 @@ const char kPathOperatorCubicBezier3 = 'y'; |
const char kPathOperatorClosePath = 'h'; |
const char kPathOperatorRectangle[] = "re"; |
-struct _FX_BSTR { |
- const FX_CHAR* m_Ptr; |
- int m_Size; |
+struct PDF_AbbrPair { |
+ const FX_CHAR* full_name; |
+ const FX_CHAR* abbr; |
}; |
-#define _FX_BSTRC(str) \ |
- { str, sizeof(str) - 1 } |
-struct PDF_AbbrPairs { |
- _FX_BSTR full_name; |
- _FX_BSTR abbr; |
+const PDF_AbbrPair PDF_InlineKeyAbbr[] = { |
+ {"BitsPerComponent", "BPC"}, {"ColorSpace", "CS"}, {"Decode", "D"}, |
+ {"DecodeParms", "DP"}, {"Filter", "F"}, {"Height", "H"}, |
+ {"ImageMask", "IM"}, {"Interpolate", "I"}, {"Width", "W"}, |
}; |
-const PDF_AbbrPairs PDF_InlineKeyAbbr[] = { |
- {_FX_BSTRC("BitsPerComponent"), _FX_BSTRC("BPC")}, |
- {_FX_BSTRC("ColorSpace"), _FX_BSTRC("CS")}, |
- {_FX_BSTRC("Decode"), _FX_BSTRC("D")}, |
- {_FX_BSTRC("DecodeParms"), _FX_BSTRC("DP")}, |
- {_FX_BSTRC("Filter"), _FX_BSTRC("F")}, |
- {_FX_BSTRC("Height"), _FX_BSTRC("H")}, |
- {_FX_BSTRC("ImageMask"), _FX_BSTRC("IM")}, |
- {_FX_BSTRC("Interpolate"), _FX_BSTRC("I")}, |
- {_FX_BSTRC("Width"), _FX_BSTRC("W")}, |
-}; |
- |
-const PDF_AbbrPairs PDF_InlineValueAbbr[] = { |
- {_FX_BSTRC("DeviceGray"), _FX_BSTRC("G")}, |
- {_FX_BSTRC("DeviceRGB"), _FX_BSTRC("RGB")}, |
- {_FX_BSTRC("DeviceCMYK"), _FX_BSTRC("CMYK")}, |
- {_FX_BSTRC("Indexed"), _FX_BSTRC("I")}, |
- {_FX_BSTRC("ASCIIHexDecode"), _FX_BSTRC("AHx")}, |
- {_FX_BSTRC("ASCII85Decode"), _FX_BSTRC("A85")}, |
- {_FX_BSTRC("LZWDecode"), _FX_BSTRC("LZW")}, |
- {_FX_BSTRC("FlateDecode"), _FX_BSTRC("Fl")}, |
- {_FX_BSTRC("RunLengthDecode"), _FX_BSTRC("RL")}, |
- {_FX_BSTRC("CCITTFaxDecode"), _FX_BSTRC("CCF")}, |
- {_FX_BSTRC("DCTDecode"), _FX_BSTRC("DCT")}, |
+const PDF_AbbrPair PDF_InlineValueAbbr[] = { |
+ {"DeviceGray", "G"}, {"DeviceRGB", "RGB"}, |
+ {"DeviceCMYK", "CMYK"}, {"Indexed", "I"}, |
+ {"ASCIIHexDecode", "AHx"}, {"ASCII85Decode", "A85"}, |
+ {"LZWDecode", "LZW"}, {"FlateDecode", "Fl"}, |
+ {"RunLengthDecode", "RL"}, {"CCITTFaxDecode", "CCF"}, |
+ {"DCTDecode", "DCT"}, |
}; |
struct AbbrReplacementOp { |
@@ -98,15 +80,15 @@ class CPDF_StreamParserAutoClearer { |
CPDF_StreamParser** scoped_variable_; |
}; |
-CFX_ByteStringC PDF_FindFullName(const PDF_AbbrPairs* table, |
+CFX_ByteStringC PDF_FindFullName(const PDF_AbbrPair* table, |
dsinclair
2016/04/02 00:13:33
What's your preference for testing something like
Tom Sepez
2016/04/02 18:11:54
Dunno. May not require a unit test, even, if we hi
dsinclair
2016/04/04 15:21:14
Done. Add ForTesting wrappers and some simple uni
|
size_t count, |
const CFX_ByteStringC& abbr) { |
for (size_t i = 0; i < count; ++i) { |
- if (abbr.GetLength() != table[i].abbr.m_Size) |
+ if (abbr.GetLength() < 0 || table[i].abbr[abbr.GetLength() + 1] != '\0') |
continue; |
- if (memcmp(abbr.GetPtr(), table[i].abbr.m_Ptr, abbr.GetLength())) |
+ if (memcmp(abbr.GetPtr(), table[i].abbr, abbr.GetLength())) |
continue; |
- return CFX_ByteStringC(table[i].full_name.m_Ptr, table[i].full_name.m_Size); |
+ return CFX_ByteStringC(table[i].full_name); |
} |
return CFX_ByteStringC(); |
} |