From c1dde5d9b3da2af6e6f81df09ed41ab9c34bbde4 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Thu, 23 Aug 2018 23:47:03 +0000 Subject: Pass unique_ptr<> to CFX_MemoryStream constructor Proves we own the memory that the class will eventually free. Change-Id: Ie9523da8db738e7478a1c73e3e1a6b24aed38442 Reviewed-on: https://pdfium-review.googlesource.com/41290 Reviewed-by: Lei Zhang Commit-Queue: Tom Sepez --- core/fpdfapi/parser/cpdf_object_stream.cpp | 2 +- core/fxcrt/cfx_memorystream.cpp | 7 +++++-- core/fxcrt/cfx_memorystream.h | 5 ++--- xfa/fgas/font/cfgas_fontmgr.cpp | 9 +++++---- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/core/fpdfapi/parser/cpdf_object_stream.cpp b/core/fpdfapi/parser/cpdf_object_stream.cpp index d6b3d365f6..7e4b4ae81c 100644 --- a/core/fpdfapi/parser/cpdf_object_stream.cpp +++ b/core/fpdfapi/parser/cpdf_object_stream.cpp @@ -97,7 +97,7 @@ void CPDF_ObjectStream::Init(const CPDF_Stream* stream) { stream_acc->LoadAllDataFiltered(); const uint32_t data_size = stream_acc->GetSize(); data_stream_ = pdfium::MakeRetain( - stream_acc->DetachData().release(), data_size); + stream_acc->DetachData(), data_size); } CPDF_SyntaxParser syntax(data_stream_); diff --git a/core/fxcrt/cfx_memorystream.cpp b/core/fxcrt/cfx_memorystream.cpp index d64d2a0b43..ac04dcc301 100644 --- a/core/fxcrt/cfx_memorystream.cpp +++ b/core/fxcrt/cfx_memorystream.cpp @@ -7,13 +7,16 @@ #include "core/fxcrt/cfx_memorystream.h" #include +#include #include "core/fxcrt/fx_safe_types.h" CFX_MemoryStream::CFX_MemoryStream() : m_nTotalSize(0), m_nCurSize(0) {} -CFX_MemoryStream::CFX_MemoryStream(uint8_t* pBuffer, size_t nSize) - : m_data(pBuffer), m_nTotalSize(nSize), m_nCurSize(nSize) {} +CFX_MemoryStream::CFX_MemoryStream( + std::unique_ptr pBuffer, + size_t nSize) + : m_data(std::move(pBuffer)), m_nTotalSize(nSize), m_nCurSize(nSize) {} CFX_MemoryStream::~CFX_MemoryStream() = default; diff --git a/core/fxcrt/cfx_memorystream.h b/core/fxcrt/cfx_memorystream.h index 47e491275c..99e39a8ef3 100644 --- a/core/fxcrt/cfx_memorystream.h +++ b/core/fxcrt/cfx_memorystream.h @@ -31,9 +31,8 @@ class CFX_MemoryStream : public IFX_SeekableStream { private: CFX_MemoryStream(); - - // Takes ownership of |pBuffer|. - CFX_MemoryStream(uint8_t* pBuffer, size_t nSize); + CFX_MemoryStream(std::unique_ptr pBuffer, + size_t nSize); ~CFX_MemoryStream() override; std::unique_ptr m_data; diff --git a/xfa/fgas/font/cfgas_fontmgr.cpp b/xfa/fgas/font/cfgas_fontmgr.cpp index f6b168c89d..d0a6127bbc 100644 --- a/xfa/fgas/font/cfgas_fontmgr.cpp +++ b/xfa/fgas/font/cfgas_fontmgr.cpp @@ -626,10 +626,11 @@ RetainPtr CFGAS_FontMgr::CreateFontStream( if (dwFileSize == 0) return nullptr; - uint8_t* pBuffer = FX_Alloc(uint8_t, dwFileSize + 1); - dwFileSize = pSystemFontInfo->GetFontData(hFont, 0, pBuffer, dwFileSize); - - return pdfium::MakeRetain(pBuffer, dwFileSize); + std::unique_ptr pBuffer( + FX_Alloc(uint8_t, dwFileSize + 1)); + dwFileSize = + pSystemFontInfo->GetFontData(hFont, 0, pBuffer.get(), dwFileSize); + return pdfium::MakeRetain(std::move(pBuffer), dwFileSize); } RetainPtr CFGAS_FontMgr::CreateFontStream( -- cgit v1.2.3