summaryrefslogtreecommitdiff
path: root/core/fpdfapi/parser/cpdf_dictionary.cpp
diff options
context:
space:
mode:
authorArtem Strygin <art-snake@yandex-team.ru>2018-07-23 19:54:34 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-07-23 19:54:34 +0000
commit2bfa78540c375916ec9973f0ae11271b098180bd (patch)
tree4ec0b11e0014c95acda8a2e0b54e1bacd9f349d1 /core/fpdfapi/parser/cpdf_dictionary.cpp
parent9f53dc093a9d00342ea76ecc0b4c8c84357ffd6e (diff)
downloadpdfium-2bfa78540c375916ec9973f0ae11271b098180bd.tar.xz
Rework of CPDF_Object writing.
Move writing logic into implementation of related clases. Change-Id: If70dc418b352b562ee681ea34fa6595d6f52eee3 Reviewed-on: https://pdfium-review.googlesource.com/36350 Commit-Queue: Art Snake <art-snake@yandex-team.ru> Reviewed-by: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'core/fpdfapi/parser/cpdf_dictionary.cpp')
-rw-r--r--core/fpdfapi/parser/cpdf_dictionary.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/core/fpdfapi/parser/cpdf_dictionary.cpp b/core/fpdfapi/parser/cpdf_dictionary.cpp
index 78227ae70a..585930427c 100644
--- a/core/fpdfapi/parser/cpdf_dictionary.cpp
+++ b/core/fpdfapi/parser/cpdf_dictionary.cpp
@@ -269,10 +269,13 @@ ByteString CPDF_Dictionary::MaybeIntern(const ByteString& str) {
return m_pPool ? m_pPool->Intern(str) : str;
}
-bool CPDF_Dictionary::WriteTo(IFX_ArchiveStream* archive) const {
+bool CPDF_Dictionary::WriteTo(IFX_ArchiveStream* archive,
+ const CPDF_Encryptor* encryptor) const {
if (!archive->WriteString("<<"))
return false;
+ const bool is_signature = CPDF_CryptoHandler::IsSignatureDictionary(this);
+
for (const auto& it : *this) {
const ByteString& key = it.first;
CPDF_Object* pValue = it.second.get();
@@ -280,9 +283,11 @@ bool CPDF_Dictionary::WriteTo(IFX_ArchiveStream* archive) const {
!archive->WriteString(PDF_NameEncode(key).AsStringView())) {
return false;
}
-
- if (!pValue->WriteTo(archive))
+ if (!pValue->WriteTo(archive, !is_signature || key != "Contents"
+ ? encryptor
+ : nullptr)) {
return false;
+ }
}
return archive->WriteString(">>");
}