diff options
author | thestig <thestig@chromium.org> | 2016-05-19 14:36:00 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-05-19 14:36:00 -0700 |
commit | 80f25a5a8135933a405349ffc798d13273b3d690 (patch) | |
tree | db15a1e0c751f6fc0a648a991d744bc14e7bfadd /core/fpdfapi/fpdf_page/cpdf_clippathdata.cpp | |
parent | c7600f99490f83e544e37feb77d3b9e8428b0f68 (diff) | |
download | pdfium-80f25a5a8135933a405349ffc798d13273b3d690.tar.xz |
Fix leak in CPDF_StreamContentParser::AddTextObject().
... by using STL containers in more places.
Remove dead / duplicate code as well.
BUG=603904
Review-Url: https://codereview.chromium.org/1998583002
Diffstat (limited to 'core/fpdfapi/fpdf_page/cpdf_clippathdata.cpp')
-rw-r--r-- | core/fpdfapi/fpdf_page/cpdf_clippathdata.cpp | 67 |
1 files changed, 7 insertions, 60 deletions
diff --git a/core/fpdfapi/fpdf_page/cpdf_clippathdata.cpp b/core/fpdfapi/fpdf_page/cpdf_clippathdata.cpp index e6a5227269..9c84b4ae28 100644 --- a/core/fpdfapi/fpdf_page/cpdf_clippathdata.cpp +++ b/core/fpdfapi/fpdf_page/cpdf_clippathdata.cpp @@ -9,69 +9,16 @@ #include "core/fpdfapi/fpdf_page/include/cpdf_path.h" #include "core/fpdfapi/fpdf_page/include/cpdf_textobject.h" -CPDF_ClipPathData::CPDF_ClipPathData() - : m_PathCount(0), - m_pPathList(nullptr), - m_pTypeList(nullptr), - m_TextCount(0), - m_pTextList(nullptr) {} +CPDF_ClipPathData::CPDF_ClipPathData() {} -CPDF_ClipPathData::~CPDF_ClipPathData() { - delete[] m_pPathList; - FX_Free(m_pTypeList); - - for (int i = m_TextCount - 1; i > -1; i--) - delete m_pTextList[i]; - FX_Free(m_pTextList); -} +CPDF_ClipPathData::~CPDF_ClipPathData() {} CPDF_ClipPathData::CPDF_ClipPathData(const CPDF_ClipPathData& src) { - m_pPathList = nullptr; - m_pPathList = nullptr; - m_pTextList = nullptr; - - m_PathCount = src.m_PathCount; - if (m_PathCount) { - int alloc_size = m_PathCount; - if (alloc_size % 8) - alloc_size += 8 - (alloc_size % 8); - - m_pPathList = new CPDF_Path[alloc_size]; - for (int i = 0; i < m_PathCount; i++) - m_pPathList[i] = src.m_pPathList[i]; - - m_pTypeList = FX_Alloc(uint8_t, alloc_size); - FXSYS_memcpy(m_pTypeList, src.m_pTypeList, m_PathCount); - } else { - m_pPathList = nullptr; - m_pTypeList = nullptr; - } - - m_TextCount = src.m_TextCount; - if (m_TextCount) { - m_pTextList = FX_Alloc(CPDF_TextObject*, m_TextCount); - for (int i = 0; i < m_TextCount; i++) { - if (src.m_pTextList[i]) - m_pTextList[i] = src.m_pTextList[i]->Clone(); - else - m_pTextList[i] = nullptr; - } - } else { - m_pTextList = nullptr; - } -} - -void CPDF_ClipPathData::SetCount(int path_count, int text_count) { - ASSERT(m_TextCount == 0 && m_PathCount == 0); - if (path_count) { - m_PathCount = path_count; - int alloc_size = (path_count + 7) / 8 * 8; - m_pPathList = new CPDF_Path[alloc_size]; - m_pTypeList = FX_Alloc(uint8_t, alloc_size); - } + m_PathAndTypeList = src.m_PathAndTypeList; - if (text_count) { - m_TextCount = text_count; - m_pTextList = FX_Alloc(CPDF_TextObject*, text_count); + m_TextList.resize(src.m_TextList.size()); + for (size_t i = 0; i < src.m_TextList.size(); ++i) { + if (src.m_TextList[i]) + m_TextList[i].reset(src.m_TextList[i]->Clone()); } } |