summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLei Zhang <thestig@google.com>2014-12-18 16:29:55 -0800
committerLei Zhang <thestig@google.com>2014-12-18 16:29:55 -0800
commitef8fb8c4c3ab9b93421389b8399fce3923ead735 (patch)
tree220f74e119d0a4454640516b7ff583c4ca026856
parent8acddca10d927619f268576db8717cf405095a41 (diff)
downloadpdfium-ef8fb8c4c3ab9b93421389b8399fce3923ead735.tar.xz
Fix a bug that occurs when an object has the same object number with the root object
Before this fix, the root will be released when an indirect object has the same object number with the root. However, the root object is loaded when the trailer is parsed. It shall not be updated or replaced anymore. BUG=425040 R=tsepez@chromium.org Review URL: https://codereview.chromium.org/803103002 (cherry picked from commit dba5bfd174589ad08c4231b039297b59fa2ccc3b) Review URL: https://codereview.chromium.org/792013005
-rw-r--r--core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
index 85992a83e3..3612f64574 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
@@ -1007,7 +1007,15 @@ FX_BOOL CPDF_Parser::LoadCrossRefV5(FX_FILESIZE pos, FX_FILESIZE& prev, FX_BOOL
return FALSE;
}
if (m_pDocument) {
- m_pDocument->InsertIndirectObject(pStream->m_ObjNum, pStream);
+ CPDF_Dictionary * pDict = m_pDocument->GetRoot();
+ if (!pDict || pDict->GetObjNum() != pStream->m_ObjNum) {
+ m_pDocument->InsertIndirectObject(pStream->m_ObjNum, pStream);
+ } else {
+ if (pStream->GetType() == PDFOBJ_STREAM) {
+ pStream->Release();
+ }
+ return FALSE;
+ }
}
if (pStream->GetType() != PDFOBJ_STREAM) {
return FALSE;