diff options
author | Tom Sepez <tsepez@chromium.org> | 2018-07-16 16:54:02 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-07-16 16:54:02 +0000 |
commit | 481749905d444745ee0ba76d9bcf42b3b009bb27 (patch) | |
tree | 630037bdc9e9d03bcc0382da3e6718bf0456c0aa /core/fpdfapi/parser | |
parent | bfeb9343ee794a48b70c2f638c3d74f96e9afab2 (diff) | |
download | pdfium-481749905d444745ee0ba76d9bcf42b3b009bb27.tar.xz |
Get rid of some loose allocs/free in CPDF_Document.chromium/3494
Use std::vector<> as a manager for contiguous buffers.
Change-Id: Icaacbd4b7010b928237aa71485411ade7539412a
Reviewed-on: https://pdfium-review.googlesource.com/37012
Reviewed-by: dsinclair <dsinclair@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'core/fpdfapi/parser')
-rw-r--r-- | core/fpdfapi/parser/cpdf_document.cpp | 39 |
1 files changed, 18 insertions, 21 deletions
diff --git a/core/fpdfapi/parser/cpdf_document.cpp b/core/fpdfapi/parser/cpdf_document.cpp index 4f699139a3..311e017148 100644 --- a/core/fpdfapi/parser/cpdf_document.cpp +++ b/core/fpdfapi/parser/cpdf_document.cpp @@ -39,30 +39,29 @@ namespace { const int FX_MAX_PAGE_LEVEL = 1024; -void InsertWidthArrayImpl(int* widths, int size, CPDF_Array* pWidthArray) { - int i; - for (i = 1; i < size; i++) { - if (widths[i] != *widths) +void InsertWidthArrayImpl(std::vector<int> widths, CPDF_Array* pWidthArray) { + size_t i; + for (i = 1; i < widths.size(); i++) { + if (widths[i] != widths[0]) break; } - if (i == size) { + if (i == widths.size()) { int first = pWidthArray->GetIntegerAt(pWidthArray->GetCount() - 1); - pWidthArray->AddNew<CPDF_Number>(first + size - 1); - pWidthArray->AddNew<CPDF_Number>(*widths); - } else { - CPDF_Array* pWidthArray1 = pWidthArray->AddNew<CPDF_Array>(); - for (i = 0; i < size; i++) - pWidthArray1->AddNew<CPDF_Number>(widths[i]); + pWidthArray->AddNew<CPDF_Number>(first + static_cast<int>(widths.size()) - + 1); + pWidthArray->AddNew<CPDF_Number>(widths[0]); + return; } - FX_Free(widths); + CPDF_Array* pWidthArray1 = pWidthArray->AddNew<CPDF_Array>(); + for (int w : widths) + pWidthArray1->AddNew<CPDF_Number>(w); } #if _FX_PLATFORM_ == _FX_PLATFORM_WINDOWS_ void InsertWidthArray(HDC hDC, int start, int end, CPDF_Array* pWidthArray) { - int size = end - start + 1; - int* widths = FX_Alloc(int, size); - GetCharWidth(hDC, start, end, widths); - InsertWidthArrayImpl(widths, size, pWidthArray); + std::vector<int> widths(end - start + 1); + GetCharWidth(hDC, start, end, widths.data()); + InsertWidthArrayImpl(std::move(widths), pWidthArray); } ByteString FPDF_GetPSNameFromTT(HDC hDC) { @@ -83,14 +82,12 @@ void InsertWidthArray1(CFX_Font* pFont, wchar_t start, wchar_t end, CPDF_Array* pWidthArray) { - int size = end - start + 1; - int* widths = FX_Alloc(int, size); - int i; - for (i = 0; i < size; i++) { + std::vector<int> widths(end - start + 1); + for (size_t i = 0; i < widths.size(); ++i) { int glyph_index = pEncoding->GlyphFromCharCode(start + i); widths[i] = pFont->GetGlyphWidth(glyph_index); } - InsertWidthArrayImpl(widths, size, pWidthArray); + InsertWidthArrayImpl(std::move(widths), pWidthArray); } int CountPages(CPDF_Dictionary* pPages, |