From 957480c17682008ae2a14723868fcdcab89b6577 Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Tue, 13 Jun 2017 15:21:14 -0400 Subject: Allow zero length streams when parsing. It's possible to create a stream of length 0 in a PDF document. Currently the code will early exit and return a nullptr. This causes issues when you want to print the given PDF as the FPDF_ImportPages code ends up only generating up to the zero length object. This CL allows creating streams with length 0 and updates the PDF saving code to output a blank stream. Bug: chromium:732380 Change-Id: I44182ba4aaac7c51284b002ba01bbc34b6bcf9e0 Reviewed-on: https://pdfium-review.googlesource.com/6490 Reviewed-by: Lei Zhang Commit-Queue: dsinclair --- core/fpdfapi/edit/cpdf_creator.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'core/fpdfapi/edit') diff --git a/core/fpdfapi/edit/cpdf_creator.cpp b/core/fpdfapi/edit/cpdf_creator.cpp index 1c0cd69a4b..858d56cbaf 100644 --- a/core/fpdfapi/edit/cpdf_creator.cpp +++ b/core/fpdfapi/edit/cpdf_creator.cpp @@ -171,13 +171,21 @@ bool CPDF_Creator::WriteStream(const CPDF_Object* pStream, encoder.GetDict()->SetNewFor( "Length", static_cast(encryptor.GetSize())); } + if (!WriteDirectObj(objnum, encoder.GetDict(), true) || - !m_Archive->WriteString("stream\r\n") || - !m_Archive->WriteBlock(encryptor.GetData(), encryptor.GetSize()) || - !m_Archive->WriteString("\r\nendstream")) { + !m_Archive->WriteString("stream\r\n")) { + return false; + } + + // Allow for empty streams. + if (encryptor.GetSize() > 0 && + !m_Archive->WriteBlock(encryptor.GetData(), encryptor.GetSize())) { return false; } + if (!m_Archive->WriteString("\r\nendstream")) + return false; + return true; } -- cgit v1.2.3