diff options
author | Dan Sinclair <dsinclair@chromium.org> | 2017-06-14 13:50:05 -0400 |
---|---|---|
committer | dsinclair <dsinclair@chromium.org> | 2017-06-14 19:27:06 +0000 |
commit | 0c17bdac6ce07754402385720d3a0e70ce179949 (patch) | |
tree | 8aec5757fe6e3cf750e8a05abb12fd017f88d539 /core/fpdfapi/edit/fpdf_edit_create.cpp | |
parent | 4d46901fe4ef3491bdb4375519b488de0142398e (diff) | |
download | pdfium-chromium/3071.tar.xz |
[Merge M59] Allow zero length streams when parsing.chromium/3071
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 <thestig@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
(cherry picked from commit 957480c17682008ae2a14723868fcdcab89b6577)
Reviewed-on: https://pdfium-review.googlesource.com/6556
Reviewed-by: Nicolás Peña <npm@chromium.org>
Diffstat (limited to 'core/fpdfapi/edit/fpdf_edit_create.cpp')
-rw-r--r-- | core/fpdfapi/edit/fpdf_edit_create.cpp | 13 |
1 files changed, 8 insertions, 5 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; } |