summaryrefslogtreecommitdiff
path: root/core/fpdfapi
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi')
-rw-r--r--core/fpdfapi/edit/fpdf_edit_create.cpp13
-rw-r--r--core/fpdfapi/parser/cpdf_syntax_parser.cpp8
2 files changed, 12 insertions, 9 deletions
diff --git a/core/fpdfapi/edit/fpdf_edit_create.cpp b/core/fpdfapi/edit/fpdf_edit_create.cpp
index f643d3f24e..4bdb63cb3c 100644
--- a/core/fpdfapi/edit/fpdf_edit_create.cpp
+++ b/core/fpdfapi/edit/fpdf_edit_create.cpp
@@ -182,12 +182,15 @@ int32_t PDF_CreatorAppendObject(const CPDF_Object* pObj,
return -1;
}
offset += 8;
- auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(p);
- pAcc->LoadAllData(true);
- if (pFile->AppendBlock(pAcc->GetData(), pAcc->GetSize()) < 0) {
- return -1;
+ if (p->GetRawSize() > 0) {
+ auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(p);
+ pAcc->LoadAllData(true);
+
+ if (pFile->AppendBlock(pAcc->GetData(), pAcc->GetSize()) < 0) {
+ return -1;
+ }
+ offset += pAcc->GetSize();
}
- offset += pAcc->GetSize();
if ((len = pFile->AppendString("\r\nendstream")) < 0) {
return -1;
}
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.cpp b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
index ecf2cf6e5b..7b7495dfc6 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
@@ -724,10 +724,11 @@ std::unique_ptr<CPDF_Stream> CPDF_SyntaxParser::ReadStream(
}
m_Pos = streamStartPos;
}
-
- // Read up to the end of the buffer.
+ // Read up to the end of the buffer. Note, we allow zero length streams as
+ // we need to pass them through when we are importing pages into a new
+ // document.
len = std::min(len, m_FileLen - m_Pos - m_HeaderOffset);
- if (len <= 0)
+ if (len < 0)
return nullptr;
std::unique_ptr<uint8_t, FxFreeDeleter> pData;
@@ -745,7 +746,6 @@ std::unique_ptr<CPDF_Stream> CPDF_SyntaxParser::ReadStream(
pData = dest_buf.DetachBuffer();
}
}
-
auto pStream =
pdfium::MakeUnique<CPDF_Stream>(std::move(pData), len, std::move(pDict));
streamStartPos = m_Pos;