Chromium Code Reviews| 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..298b2f56e2846ea204755bc7ac8d839fa3c8a2e3 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; | 
| 
 
Tom Sepez
2016/04/04 15:57:30
If you'd like, you might consider flipping these a
 
dsinclair
2016/04/04 16:26:51
Done.
 
 | 
| + 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,21 +80,28 @@ class CPDF_StreamParserAutoClearer { | 
| CPDF_StreamParser** scoped_variable_; | 
| }; | 
| -CFX_ByteStringC PDF_FindFullName(const PDF_AbbrPairs* table, | 
| +CFX_ByteStringC PDF_FindFullName(const PDF_AbbrPair* table, | 
| size_t count, | 
| const CFX_ByteStringC& abbr) { | 
| - for (size_t i = 0; i < count; ++i) { | 
| - if (abbr.GetLength() != table[i].abbr.m_Size) | 
| - continue; | 
| - if (memcmp(abbr.GetPtr(), table[i].abbr.m_Ptr, abbr.GetLength())) | 
| - continue; | 
| - return CFX_ByteStringC(table[i].full_name.m_Ptr, table[i].full_name.m_Size); | 
| - } | 
| - return CFX_ByteStringC(); | 
| + auto it = std::find_if( | 
| + table, table + count, | 
| + [abbr](const PDF_AbbrPair& pair) { return pair.abbr == abbr; }); | 
| + return it != table + count ? CFX_ByteString(it->full_name) : CFX_ByteString(); | 
| 
 
Tom Sepez
2016/04/04 16:11:37
This should be ByteStringC, not ByteString. argh.
 
dsinclair
2016/04/04 16:26:52
Good catch. Didn't notice the missing C even revie
 
 | 
| } | 
| } // namespace | 
| +CFX_ByteStringC PDF_FindKeyAbbreviationForTesting(const CFX_ByteStringC& abbr) { | 
| + return PDF_FindFullName(PDF_InlineKeyAbbr, FX_ArraySize(PDF_InlineKeyAbbr), | 
| + abbr); | 
| +} | 
| + | 
| +CFX_ByteStringC PDF_FindValueAbbreviationForTesting( | 
| + const CFX_ByteStringC& abbr) { | 
| + return PDF_FindFullName(PDF_InlineValueAbbr, | 
| + FX_ArraySize(PDF_InlineValueAbbr), abbr); | 
| +} | 
| + | 
| bool IsPathOperator(const uint8_t* buf, size_t len) { | 
| if (len == 1) { | 
| uint8_t op = buf[0]; |