From a568ff2dddd3ef44f224d21b31afff8eb14b6d31 Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Mon, 26 Oct 2015 13:54:28 -0700 Subject: Fix a leak in CPDF_SyntaxParser::GetObject(). As seen in FPDFViewEmbeddertest.Crasher_451830. R=tsepez@chromium.org Review URL: https://codereview.chromium.org/1385803002 . --- core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp index d486cfe231..27cc8688cc 100644 --- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp +++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp @@ -2139,6 +2139,13 @@ CPDF_Object* CPDF_SyntaxParser::GetObject(CPDF_IndirectObjects* pObjList, ++nKeys; key = PDF_NameDecode(key); + if (key.IsEmpty()) + continue; + + CFX_ByteStringC keyNoSlash(key.c_str() + 1, key.GetLength() - 1); + if (keyNoSlash.IsEmpty()) + continue; + if (key == FX_BSTRC("/Contents")) dwSignValuePos = m_Pos; @@ -2146,14 +2153,12 @@ CPDF_Object* CPDF_SyntaxParser::GetObject(CPDF_IndirectObjects* pObjList, if (!pObj) continue; - if (key.GetLength() >= 1) { - if (nKeys < 32) { - pDict->SetAt(CFX_ByteStringC(key.c_str() + 1, key.GetLength() - 1), - pObj); - } else { - pDict->AddValue(CFX_ByteStringC(key.c_str() + 1, key.GetLength() - 1), - pObj); - } + // TODO(thestig): Remove this conditional once CPDF_Dictionary has a + // better underlying map implementation. + if (nKeys < 32) { + pDict->SetAt(keyNoSlash, pObj); + } else { + pDict->AddValue(keyNoSlash, pObj); } } -- cgit v1.2.3