summaryrefslogtreecommitdiff
path: root/core/fpdfapi/parser/cpdf_syntax_parser.cpp
diff options
context:
space:
mode:
authorDan Sinclair <dsinclair@chromium.org>2017-06-14 13:50:05 -0400
committerdsinclair <dsinclair@chromium.org>2017-06-14 19:27:06 +0000
commit0c17bdac6ce07754402385720d3a0e70ce179949 (patch)
tree8aec5757fe6e3cf750e8a05abb12fd017f88d539 /core/fpdfapi/parser/cpdf_syntax_parser.cpp
parent4d46901fe4ef3491bdb4375519b488de0142398e (diff)
downloadpdfium-0c17bdac6ce07754402385720d3a0e70ce179949.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/parser/cpdf_syntax_parser.cpp')
-rw-r--r--core/fpdfapi/parser/cpdf_syntax_parser.cpp8
1 files changed, 4 insertions, 4 deletions
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;