Index: core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
index 3ab44231721195b40e94339bd16a444776dbb23a..49d6760c6542fe92c5dfc21f875e59db6879da5d 100644 |
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
@@ -2163,12 +2163,13 @@ CPDF_Object* CPDF_SyntaxParser::GetObject(CPDF_IndirectObjects* pObjList, |
pDict->SetAt(keyNoSlash, pObj); |
} |
- if (IsSignatureDict(pDict.get())) { |
- FX_FILESIZE dwSavePos = m_Pos; |
+ // Only when this is a signature dictionary and has contents, we reset the |
+ // contents to the un-decrypted form. |
+ if (IsSignatureDict(pDict.get()) && dwSignValuePos) { |
+ CFX_AutoRestorer<FX_FILESIZE> save_pos(&m_Pos); |
m_Pos = dwSignValuePos; |
CPDF_Object* pObj = GetObject(pObjList, objnum, gennum, nullptr, FALSE); |
pDict->SetAt("Contents", pObj); |
- m_Pos = dwSavePos; |
} |
if (pContext) { |
pContext->m_DictEnd = m_Pos; |