diff options
author | tsepez <tsepez@chromium.org> | 2016-11-16 17:31:18 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-11-16 17:31:18 -0800 |
commit | 5913a6ca71c85401e3f5317758d44a9fc4a667b2 (patch) | |
tree | 388ad0bd98b44a47c251568e198e2c3c231c7d30 /core/fpdfapi/parser/cpdf_syntax_parser.cpp | |
parent | cc4d0a44f3025821f88f3ed1ee78dfdc416487c7 (diff) | |
download | pdfium-5913a6ca71c85401e3f5317758d44a9fc4a667b2.tar.xz |
Make CPDF_Object subclass constructors intern strings
Make CDPF_Arrays intern the object they create.
Allow passing nullptr as a CFX_WeakPtr shortcut as well.
Review-Url: https://codereview.chromium.org/2509123002
Diffstat (limited to 'core/fpdfapi/parser/cpdf_syntax_parser.cpp')
-rw-r--r-- | core/fpdfapi/parser/cpdf_syntax_parser.cpp | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.cpp b/core/fpdfapi/parser/cpdf_syntax_parser.cpp index 6a3db60286..6a38ce8c45 100644 --- a/core/fpdfapi/parser/cpdf_syntax_parser.cpp +++ b/core/fpdfapi/parser/cpdf_syntax_parser.cpp @@ -402,13 +402,13 @@ std::unique_ptr<CPDF_Object> CPDF_SyntaxParser::GetObject( CFX_ByteString str = ReadString(); if (m_pCryptoHandler && bDecrypt) m_pCryptoHandler->Decrypt(objnum, gennum, str); - return pdfium::MakeUnique<CPDF_String>(MaybeIntern(str), false); + return pdfium::MakeUnique<CPDF_String>(m_pPool, str, false); } if (word == "<") { CFX_ByteString str = ReadHexString(); if (m_pCryptoHandler && bDecrypt) m_pCryptoHandler->Decrypt(objnum, gennum, str); - return pdfium::MakeUnique<CPDF_String>(MaybeIntern(str), true); + return pdfium::MakeUnique<CPDF_String>(m_pPool, str, true); } if (word == "[") { std::unique_ptr<CPDF_Array> pArray = pdfium::MakeUnique<CPDF_Array>(); @@ -419,8 +419,9 @@ std::unique_ptr<CPDF_Object> CPDF_SyntaxParser::GetObject( return std::move(pArray); } if (word[0] == '/') { - return pdfium::MakeUnique<CPDF_Name>(MaybeIntern( - PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1)))); + return pdfium::MakeUnique<CPDF_Name>( + m_pPool, + PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1))); } if (word == "<<") { int32_t nKeys = 0; @@ -522,13 +523,13 @@ std::unique_ptr<CPDF_Object> CPDF_SyntaxParser::GetObjectForStrict( CFX_ByteString str = ReadString(); if (m_pCryptoHandler) m_pCryptoHandler->Decrypt(objnum, gennum, str); - return pdfium::MakeUnique<CPDF_String>(MaybeIntern(str), false); + return pdfium::MakeUnique<CPDF_String>(m_pPool, str, false); } if (word == "<") { CFX_ByteString str = ReadHexString(); if (m_pCryptoHandler) m_pCryptoHandler->Decrypt(objnum, gennum, str); - return pdfium::MakeUnique<CPDF_String>(MaybeIntern(str), true); + return pdfium::MakeUnique<CPDF_String>(m_pPool, str, true); } if (word == "[") { std::unique_ptr<CPDF_Array> pArray = pdfium::MakeUnique<CPDF_Array>(); @@ -539,8 +540,9 @@ std::unique_ptr<CPDF_Object> CPDF_SyntaxParser::GetObjectForStrict( return m_WordBuffer[0] == ']' ? std::move(pArray) : nullptr; } if (word[0] == '/') { - return pdfium::MakeUnique<CPDF_Name>(MaybeIntern( - PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1)))); + return pdfium::MakeUnique<CPDF_Name>( + m_pPool, + PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1))); } if (word == "<<") { std::unique_ptr<CPDF_Dictionary> pDict = @@ -916,7 +918,3 @@ void CPDF_SyntaxParser::SetEncrypt( std::unique_ptr<CPDF_CryptoHandler> pCryptoHandler) { m_pCryptoHandler = std::move(pCryptoHandler); } - -CFX_ByteString CPDF_SyntaxParser::MaybeIntern(const CFX_ByteString& str) { - return m_pPool ? m_pPool->Intern(str) : str; -} |