Handle OOM in CPDF_ContentParser::PrepareContent().
While PDFium is not required to handle OOM in every case, failing
gracefully for extremely large documents early on in the parsing
seems reasonable.
Bug: pdfium:1614
Change-Id: Ibbfdf4120ddf916b2d862d7e8299ece6df955573
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/76170
Reviewed-by: Hui Yingst <nigi@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_contentparser.cpp b/core/fpdfapi/page/cpdf_contentparser.cpp
index b8f2fb9..8b4b5e1 100644
--- a/core/fpdfapi/page/cpdf_contentparser.cpp
+++ b/core/fpdfapi/page/cpdf_contentparser.cpp
@@ -167,7 +167,9 @@
m_Size = safeSize.ValueOrDie();
m_pData.Reset(
- std::unique_ptr<uint8_t, FxFreeDeleter>(FX_Alloc(uint8_t, m_Size)));
+ std::unique_ptr<uint8_t, FxFreeDeleter>(FX_TryAlloc(uint8_t, m_Size)));
+ if (!m_pData)
+ return Stage::kComplete;
uint32_t pos = 0;
for (const auto& stream : m_StreamArray) {