Return retained objects frm CPDF_Image methods
Change-Id: If9a5086ceadeb8700a50da5e774ad778f36eb3c4
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/98594
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
index 9afda3f..03e16cb 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
@@ -313,7 +313,7 @@
if (pImage->IsInline())
return;
- const CPDF_Stream* pStream = pImage->GetStream();
+ RetainPtr<const CPDF_Stream> pStream = pImage->GetStream();
if (!pStream)
return;
diff --git a/core/fpdfapi/page/cpdf_dib.cpp b/core/fpdfapi/page/cpdf_dib.cpp
index a11307c..ae0c257 100644
--- a/core/fpdfapi/page/cpdf_dib.cpp
+++ b/core/fpdfapi/page/cpdf_dib.cpp
@@ -154,8 +154,8 @@
} // namespace
-CPDF_DIB::CPDF_DIB(CPDF_Document* pDoc, const CPDF_Stream* pStream)
- : m_pDocument(pDoc), m_pStream(pStream) {}
+CPDF_DIB::CPDF_DIB(CPDF_Document* pDoc, RetainPtr<const CPDF_Stream> pStream)
+ : m_pDocument(pDoc), m_pStream(std::move(pStream)) {}
CPDF_DIB::~CPDF_DIB() = default;
@@ -802,7 +802,8 @@
CPDF_DIB::LoadState CPDF_DIB::StartLoadMaskDIB(
RetainPtr<const CPDF_Stream> mask_stream) {
- m_pMask = pdfium::MakeRetain<CPDF_DIB>(m_pDocument.Get(), mask_stream.Get());
+ m_pMask =
+ pdfium::MakeRetain<CPDF_DIB>(m_pDocument.Get(), std::move(mask_stream));
LoadState ret = m_pMask->StartLoadDIBBase(
false, nullptr, nullptr, true, CPDF_ColorSpace::Family::kUnknown, false);
if (ret == LoadState::kContinue) {
diff --git a/core/fpdfapi/page/cpdf_dib.h b/core/fpdfapi/page/cpdf_dib.h
index 155a1f9..7b99d0c 100644
--- a/core/fpdfapi/page/cpdf_dib.h
+++ b/core/fpdfapi/page/cpdf_dib.h
@@ -65,7 +65,7 @@
RetainPtr<CPDF_DIB> DetachMask();
private:
- CPDF_DIB(CPDF_Document* pDoc, const CPDF_Stream* pStream);
+ CPDF_DIB(CPDF_Document* pDoc, RetainPtr<const CPDF_Stream> pStream);
~CPDF_DIB() override;
struct JpxSMaskInlineData {
diff --git a/core/fpdfapi/page/cpdf_image.cpp b/core/fpdfapi/page/cpdf_image.cpp
index 0f90145..5f7283f 100644
--- a/core/fpdfapi/page/cpdf_image.cpp
+++ b/core/fpdfapi/page/cpdf_image.cpp
@@ -84,6 +84,14 @@
return m_pStream ? m_pStream->GetDict() : nullptr;
}
+RetainPtr<const CPDF_Stream> CPDF_Image::GetStream() const {
+ return m_pStream;
+}
+
+RetainPtr<const CPDF_Dictionary> CPDF_Image::GetOC() const {
+ return m_pOC;
+}
+
RetainPtr<CPDF_Dictionary> CPDF_Image::InitJPEG(
pdfium::span<uint8_t> src_span) {
absl::optional<JpegModule::ImageInfo> info_opt =
diff --git a/core/fpdfapi/page/cpdf_image.h b/core/fpdfapi/page/cpdf_image.h
index 471d010..30f406c 100644
--- a/core/fpdfapi/page/cpdf_image.h
+++ b/core/fpdfapi/page/cpdf_image.h
@@ -34,8 +34,8 @@
void ConvertStreamToIndirectObject();
RetainPtr<const CPDF_Dictionary> GetDict() const;
- const CPDF_Stream* GetStream() const { return m_pStream.Get(); }
- const CPDF_Dictionary* GetOC() const { return m_pOC.Get(); }
+ RetainPtr<const CPDF_Stream> GetStream() const;
+ RetainPtr<const CPDF_Dictionary> GetOC() const;
CPDF_Document* GetDocument() const { return m_pDocument.Get(); }
int32_t GetPixelHeight() const { return m_Height; }
diff --git a/core/fpdfapi/page/cpdf_imageobject.cpp b/core/fpdfapi/page/cpdf_imageobject.cpp
index 0633ed1..636f2cb 100644
--- a/core/fpdfapi/page/cpdf_imageobject.cpp
+++ b/core/fpdfapi/page/cpdf_imageobject.cpp
@@ -86,7 +86,7 @@
if (!pPageData)
return;
- const CPDF_Stream* pStream = m_pImage->GetStream();
+ RetainPtr<const CPDF_Stream> pStream = m_pImage->GetStream();
if (!pStream)
return;
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index 79164a2..8b4f5ca 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -196,7 +196,7 @@
m_pImageObject = pImageObject;
m_BlendType = blendType;
m_mtObj2Device = mtObj2Device;
- const CPDF_Dictionary* pOC = m_pImageObject->GetImage()->GetOC();
+ RetainPtr<const CPDF_Dictionary> pOC = m_pImageObject->GetImage()->GetOC();
if (pOC && GetRenderOptions().GetOCContext() &&
!GetRenderOptions().GetOCContext()->CheckOCGVisible(pOC)) {
return false;
diff --git a/core/fpdfapi/render/cpdf_pagerendercache.cpp b/core/fpdfapi/render/cpdf_pagerendercache.cpp
index d7497de..687f51a 100644
--- a/core/fpdfapi/render/cpdf_pagerendercache.cpp
+++ b/core/fpdfapi/render/cpdf_pagerendercache.cpp
@@ -24,10 +24,11 @@
namespace {
struct CacheInfo {
- CacheInfo(uint32_t t, const CPDF_Stream* stream) : time(t), pStream(stream) {}
+ CacheInfo(uint32_t t, RetainPtr<const CPDF_Stream> stream)
+ : time(t), pStream(std::move(stream)) {}
uint32_t time;
- const CPDF_Stream* pStream;
+ RetainPtr<const CPDF_Stream> pStream;
bool operator<(const CacheInfo& other) const { return time < other.time; }
};
@@ -56,7 +57,7 @@
uint32_t nTimeCount = m_nTimeCount;
if (nTimeCount + 1 < nTimeCount) {
for (uint32_t i = 0; i < nCount; i++)
- m_ImageCache[pdfium::WrapRetain(cache_info[i].pStream)]->SetTimeCount(i);
+ m_ImageCache[cache_info[i].pStream]->SetTimeCount(i);
m_nTimeCount = nCount;
}
@@ -81,7 +82,7 @@
RetainPtr<CPDF_Image> pImage,
const CPDF_RenderStatus* pRenderStatus,
bool bStdCS) {
- const CPDF_Stream* pStream = pImage->GetStream();
+ RetainPtr<const CPDF_Stream> pStream = pImage->GetStream();
const auto it = m_ImageCache.find(pStream);
m_bCurFindCache = it != m_ImageCache.end();
if (m_bCurFindCache) {
@@ -97,7 +98,7 @@
m_nTimeCount++;
if (!m_bCurFindCache)
- m_ImageCache[pdfium::WrapRetain(pStream)] = m_pCurImageCacheEntry.Release();
+ m_ImageCache[pStream] = m_pCurImageCacheEntry.Release();
if (ret == CPDF_DIB::LoadState::kFail)
m_nCacheSize += m_pCurImageCacheEntry->EstimateSize();
@@ -113,9 +114,7 @@
m_nTimeCount++;
if (!m_bCurFindCache) {
- // TODO(tsepez): GetStream() should return retained reference.
- m_ImageCache[pdfium::WrapRetain(
- m_pCurImageCacheEntry->GetImage()->GetStream())] =
+ m_ImageCache[m_pCurImageCacheEntry->GetImage()->GetStream()] =
m_pCurImageCacheEntry.Release();
}
m_nCacheSize += m_pCurImageCacheEntry->EstimateSize();
@@ -123,7 +122,7 @@
}
void CPDF_PageRenderCache::ResetBitmapForImage(RetainPtr<CPDF_Image> pImage) {
- const CPDF_Stream* pStream = pImage->GetStream();
+ RetainPtr<const CPDF_Stream> pStream = pImage->GetStream();
const auto it = m_ImageCache.find(pStream);
if (it == m_ImageCache.end())
return;
diff --git a/core/fxge/dib/cstretchengine_unittest.cpp b/core/fxge/dib/cstretchengine_unittest.cpp
index 26c550a..7308410 100644
--- a/core/fxge/dib/cstretchengine_unittest.cpp
+++ b/core/fxge/dib/cstretchengine_unittest.cpp
@@ -75,7 +75,7 @@
dict_obj->SetNewFor<CPDF_Number>("Height", 12500);
RetainPtr<CPDF_Stream> stream =
pdfium::MakeRetain<CPDF_Stream>(nullptr, 0, std::move(dict_obj));
- auto dib_source = pdfium::MakeRetain<CPDF_DIB>(nullptr, stream.Get());
+ auto dib_source = pdfium::MakeRetain<CPDF_DIB>(nullptr, stream);
dib_source->Load();
CStretchEngine engine(nullptr, FXDIB_Format::k8bppRgb, 500, 500, clip_rect,
dib_source, FXDIB_ResampleOptions());
diff --git a/fpdfsdk/fpdf_editimg.cpp b/fpdfsdk/fpdf_editimg.cpp
index 3c41243..85bc686 100644
--- a/fpdfsdk/fpdf_editimg.cpp
+++ b/fpdfsdk/fpdf_editimg.cpp
@@ -17,6 +17,7 @@
#include "core/fpdfapi/parser/cpdf_array.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "core/fpdfapi/parser/cpdf_name.h"
+#include "core/fpdfapi/parser/cpdf_stream.h"
#include "core/fpdfapi/parser/cpdf_stream_acc.h"
#include "core/fpdfapi/render/cpdf_imagerenderer.h"
#include "core/fpdfapi/render/cpdf_rendercontext.h"
@@ -276,11 +277,11 @@
if (!pImg)
return 0;
- const CPDF_Stream* pImgStream = pImg->GetStream();
+ RetainPtr<const CPDF_Stream> pImgStream = pImg->GetStream();
if (!pImgStream)
return 0;
- return DecodeStreamMaybeCopyAndReturnLength(pImgStream, buffer, buflen);
+ return DecodeStreamMaybeCopyAndReturnLength(pImgStream.Get(), buffer, buflen);
}
FPDF_EXPORT unsigned long FPDF_CALLCONV
@@ -295,11 +296,11 @@
if (!pImg)
return 0;
- const CPDF_Stream* pImgStream = pImg->GetStream();
+ RetainPtr<const CPDF_Stream> pImgStream = pImg->GetStream();
if (!pImgStream)
return 0;
- return GetRawStreamMaybeCopyAndReturnLength(pImgStream, buffer, buflen);
+ return GetRawStreamMaybeCopyAndReturnLength(pImgStream.Get(), buffer, buflen);
}
FPDF_EXPORT int FPDF_CALLCONV
diff --git a/fpdfsdk/fpdf_thumbnail.cpp b/fpdfsdk/fpdf_thumbnail.cpp
index eaef5ae..c09ac2d 100644
--- a/fpdfsdk/fpdf_thumbnail.cpp
+++ b/fpdfsdk/fpdf_thumbnail.cpp
@@ -4,6 +4,8 @@
#include "public/fpdf_thumbnail.h"
+#include <utility>
+
#include "core/fpdfapi/page/cpdf_dib.h"
#include "core/fpdfapi/page/cpdf_page.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
@@ -54,14 +56,15 @@
FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV
FPDFPage_GetThumbnailAsBitmap(FPDF_PAGE page) {
- const CPDF_Stream* thumb_stream = CPDFStreamForThumbnailFromPage(page);
+ RetainPtr<const CPDF_Stream> thumb_stream =
+ pdfium::WrapRetain(CPDFStreamForThumbnailFromPage(page));
if (!thumb_stream)
return nullptr;
const CPDF_Page* p_page = CPDFPageFromFPDFPage(page);
- auto p_source =
- pdfium::MakeRetain<CPDF_DIB>(p_page->GetDocument(), thumb_stream);
+ auto p_source = pdfium::MakeRetain<CPDF_DIB>(p_page->GetDocument(),
+ std::move(thumb_stream));
const CPDF_DIB::LoadState start_status = p_source->StartLoadDIBBase(
false, nullptr, p_page->GetPageResources(), false,
CPDF_ColorSpace::Family::kUnknown, false);