| Index: core/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp | 
| diff --git a/core/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp b/core/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp | 
| index eab0ee595b3a0a5df0e88d4f3358604f778d7e7e..0e9cd3b55d0e3addcaa98c6b7fa95e7b36d08f0c 100644 | 
| --- a/core/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp | 
| +++ b/core/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp | 
| @@ -41,12 +41,22 @@ const FX_STRSIZE kMaxStringLength = 32767; | 
|  | 
| }  // namespace | 
|  | 
| -CPDF_StreamParser::CPDF_StreamParser(const uint8_t* pData, uint32_t dwSize) { | 
| -  m_pBuf = pData; | 
| -  m_Size = dwSize; | 
| -  m_Pos = 0; | 
| -  m_pLastObj = nullptr; | 
| -} | 
| +CPDF_StreamParser::CPDF_StreamParser(const uint8_t* pData, uint32_t dwSize) | 
| +    : m_pBuf(pData), | 
| +      m_Size(dwSize), | 
| +      m_Pos(0), | 
| +      m_pLastObj(nullptr), | 
| +      m_pPool(nullptr) {} | 
| + | 
| +CPDF_StreamParser::CPDF_StreamParser( | 
| +    const uint8_t* pData, | 
| +    uint32_t dwSize, | 
| +    const CFX_WeakPtr<CFX_ByteStringPool>& pPool) | 
| +    : m_pBuf(pData), | 
| +      m_Size(dwSize), | 
| +      m_Pos(0), | 
| +      m_pLastObj(nullptr), | 
| +      m_pPool(pPool) {} | 
|  | 
| CPDF_StreamParser::~CPDF_StreamParser() { | 
| if (m_pLastObj) { | 
| @@ -336,18 +346,21 @@ CPDF_Object* CPDF_StreamParser::ReadNextObject(bool bAllowNestedArray, | 
|  | 
| int first_char = m_WordBuffer[0]; | 
| if (first_char == '/') { | 
| -    return new CPDF_Name( | 
| -        PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1))); | 
| +    CFX_ByteString name = | 
| +        PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1)); | 
| +    return new CPDF_Name(m_pPool ? m_pPool->Intern(name) : name); | 
| } | 
|  | 
| -  if (first_char == '(') | 
| -    return new CPDF_String(ReadString(), FALSE); | 
| +  if (first_char == '(') { | 
| +    CFX_ByteString str = ReadString(); | 
| +    return new CPDF_String(m_pPool ? m_pPool->Intern(str) : str, FALSE); | 
| +  } | 
|  | 
| if (first_char == '<') { | 
| if (m_WordSize == 1) | 
| return new CPDF_String(ReadHexString(), TRUE); | 
|  | 
| -    CPDF_Dictionary* pDict = new CPDF_Dictionary; | 
| +    CPDF_Dictionary* pDict = new CPDF_Dictionary(m_pPool); | 
| while (1) { | 
| GetNextWord(bIsNumber); | 
| if (m_WordSize == 2 && m_WordBuffer[0] == '>') | 
|  |