From 5de481e71bcde25d31452b23a017bb783163a204 Mon Sep 17 00:00:00 2001 From: Nicolas Pena Date: Tue, 8 May 2018 19:13:28 +0000 Subject: Remove almost all usages of CFX_FixedBufGrow with std::vector MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tested by running safetynet_compare.py on this patch vs master. The results were 0 regressions and 0 improvements. The two remaining usages cannot be replaced because they would cause a regression. Bug: pdfium:177 Change-Id: I43eddf4ffaac2eb063f2004d6606bc3cd6e627ac Reviewed-on: https://pdfium-review.googlesource.com/32159 Reviewed-by: dsinclair Reviewed-by: Tom Sepez Commit-Queue: Nicolás Peña Moreno --- core/fpdfapi/page/cpdf_colorspace.cpp | 47 ++++++++++---------------- core/fpdfapi/render/cpdf_dibsource.cpp | 12 +++---- core/fpdfapi/render/cpdf_renderstatus.cpp | 56 +++++++++++-------------------- core/fxcodec/codec/fx_codec_icc.cpp | 19 +++++------ core/fxge/apple/fx_apple_platform.cpp | 17 +++++----- 5 files changed, 59 insertions(+), 92 deletions(-) diff --git a/core/fpdfapi/page/cpdf_colorspace.cpp b/core/fpdfapi/page/cpdf_colorspace.cpp index 3cdc96a000..d7fb18edd7 100644 --- a/core/fpdfapi/page/cpdf_colorspace.cpp +++ b/core/fpdfapi/page/cpdf_colorspace.cpp @@ -31,7 +31,6 @@ #include "core/fpdfdoc/cpdf_action.h" #include "core/fxcodec/codec/ccodec_iccmodule.h" #include "core/fxcodec/fx_codec.h" -#include "core/fxcrt/cfx_fixedbufgrow.h" #include "core/fxcrt/fx_memory.h" #include "core/fxcrt/maybe_owned.h" #include "third_party/base/stl_util.h" @@ -574,8 +573,7 @@ void CPDF_ColorSpace::TranslateImageLine(uint8_t* dest_buf, int image_width, int image_height, bool bTransMask) const { - CFX_FixedBufGrow srcbuf(m_nComponents); - float* src = srcbuf; + std::vector src(m_nComponents); float R; float G; float B; @@ -583,7 +581,7 @@ void CPDF_ColorSpace::TranslateImageLine(uint8_t* dest_buf, for (int i = 0; i < pixels; i++) { for (uint32_t j = 0; j < m_nComponents; j++) src[j] = static_cast(*src_buf++) / divisor; - GetRGB(src, &R, &G, &B); + GetRGB(src.data(), &R, &G, &B); *dest_buf++ = static_cast(B * 255); *dest_buf++ = static_cast(G * 255); *dest_buf++ = static_cast(R * 255); @@ -1151,15 +1149,15 @@ bool CPDF_IndexedCS::GetRGB(const float* pBuf, return false; } } - CFX_FixedBufGrow Comps(m_nBaseComponents); - float* comps = Comps; + std::vector comps; + comps.reserve(m_nBaseComponents); const uint8_t* pTable = m_Table.raw_str(); for (uint32_t i = 0; i < m_nBaseComponents; i++) { - comps[i] = - m_pCompMinMax[i * 2] + - m_pCompMinMax[i * 2 + 1] * pTable[index * m_nBaseComponents + i] / 255; + comps.push_back(m_pCompMinMax[i * 2] + + m_pCompMinMax[i * 2 + 1] * + pTable[index * m_nBaseComponents + i] / 255); } - return m_pBaseCS->GetRGB(comps, R, G, B); + return m_pBaseCS->GetRGB(comps.data(), R, G, B); } void CPDF_IndexedCS::EnableStdConversion(bool bEnabled) { @@ -1216,32 +1214,21 @@ bool CPDF_SeparationCS::GetRGB(const float* pBuf, float* R, float* G, float* B) const { - if (m_Type == None) + if (m_Type == None || !m_pAltCS) return false; if (!m_pFunc) { - if (!m_pAltCS) - return false; - int nComps = m_pAltCS->CountComponents(); - CFX_FixedBufGrow results(nComps); - for (int i = 0; i < nComps; i++) - results[i] = *pBuf; - return m_pAltCS->GetRGB(results, R, G, B); + std::vector results(nComps, *pBuf); + return m_pAltCS->GetRGB(results.data(), R, G, B); } - CFX_FixedBufGrow results(m_pFunc->CountOutputs()); + std::vector results2(m_pFunc->CountOutputs()); int nresults = 0; - if (!m_pFunc->Call(pBuf, 1, results, &nresults) || nresults == 0) + if (!m_pFunc->Call(pBuf, 1, results2.data(), &nresults) || nresults == 0) return false; - if (m_pAltCS) - return m_pAltCS->GetRGB(results, R, G, B); - - R = 0; - G = 0; - B = 0; - return false; + return m_pAltCS->GetRGB(results2.data(), R, G, B); } void CPDF_SeparationCS::EnableStdConversion(bool bEnabled) { @@ -1296,14 +1283,14 @@ bool CPDF_DeviceNCS::GetRGB(const float* pBuf, if (!m_pFunc) return false; - CFX_FixedBufGrow results(m_pFunc->CountOutputs()); + std::vector results(m_pFunc->CountOutputs()); int nresults = 0; - if (!m_pFunc->Call(pBuf, CountComponents(), results, &nresults) || + if (!m_pFunc->Call(pBuf, CountComponents(), results.data(), &nresults) || nresults == 0) { return false; } - return m_pAltCS->GetRGB(results, R, G, B); + return m_pAltCS->GetRGB(results.data(), R, G, B); } void CPDF_DeviceNCS::EnableStdConversion(bool bEnabled) { diff --git a/core/fpdfapi/render/cpdf_dibsource.cpp b/core/fpdfapi/render/cpdf_dibsource.cpp index 153491aa06..b8b91d2fe6 100644 --- a/core/fpdfapi/render/cpdf_dibsource.cpp +++ b/core/fpdfapi/render/cpdf_dibsource.cpp @@ -764,8 +764,7 @@ void CPDF_DIBSource::LoadPalette() { } int palette_count = 1 << (m_bpc * m_nComponents); - CFX_FixedBufGrow color_values(m_nComponents); - float* color_value = color_values; + std::vector color_value(m_nComponents); for (int i = 0; i < palette_count; i++) { int color_data = i; for (uint32_t j = 0; j < m_nComponents; j++) { @@ -782,11 +781,11 @@ void CPDF_DIBSource::LoadPalette() { int nComponents = m_pColorSpace->CountComponents(); std::vector temp_buf(nComponents); for (int k = 0; k < nComponents; k++) { - temp_buf[k] = *color_value; + temp_buf[k] = color_value[0]; } m_pColorSpace->GetRGB(temp_buf.data(), &R, &G, &B); } else { - m_pColorSpace->GetRGB(color_value, &R, &G, &B); + m_pColorSpace->GetRGB(color_value.data(), &R, &G, &B); } SetPaletteArgb(i, ArgbEncode(255, FXSYS_round(R * 255), FXSYS_round(G * 255), FXSYS_round(B * 255))); @@ -834,8 +833,7 @@ void CPDF_DIBSource::TranslateScanline24bpp(uint8_t* dest_scan, if (TranslateScanline24bppDefaultDecode(dest_scan, src_scan)) return; - CFX_FixedBufGrow color_values1(m_nComponents); - float* color_values = color_values1; + std::vector color_values(m_nComponents); float R = 0.0f; float G = 0.0f; float B = 0.0f; @@ -863,7 +861,7 @@ void CPDF_DIBSource::TranslateScanline24bpp(uint8_t* dest_scan, G = (1.0f - color_values[1]) * k; B = (1.0f - color_values[2]) * k; } else if (m_Family != PDFCS_PATTERN) { - m_pColorSpace->GetRGB(color_values, &R, &G, &B); + m_pColorSpace->GetRGB(color_values.data(), &R, &G, &B); } R = pdfium::clamp(R, 0.0f, 1.0f); G = pdfium::clamp(G, 0.0f, 1.0f); diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp index f9261570fe..708d7076c1 100644 --- a/core/fpdfapi/render/cpdf_renderstatus.cpp +++ b/core/fpdfapi/render/cpdf_renderstatus.cpp @@ -48,7 +48,6 @@ #include "core/fpdfapi/render/cpdf_type3cache.h" #include "core/fpdfdoc/cpdf_occontext.h" #include "core/fxcrt/autorestorer.h" -#include "core/fxcrt/cfx_fixedbufgrow.h" #include "core/fxcrt/fx_fallthrough.h" #include "core/fxcrt/fx_safe_types.h" #include "core/fxcrt/maybe_owned.h" @@ -151,9 +150,7 @@ void DrawAxialShading(const RetainPtr& pBitmap, float y_span = end_y - start_y; float axis_len_square = (x_span * x_span) + (y_span * y_span); - CFX_FixedBufGrow result_array(total_results); - float* pResults = result_array; - memset(pResults, 0, total_results * sizeof(float)); + std::vector results(total_results); uint32_t rgb_array[kShadingSteps]; for (int i = 0; i < kShadingSteps; i++) { float input = (t_max - t_min) * i / kShadingSteps + t_min; @@ -161,14 +158,14 @@ void DrawAxialShading(const RetainPtr& pBitmap, for (const auto& func : funcs) { if (func) { int nresults = 0; - if (func->Call(&input, 1, pResults + offset, &nresults)) + if (func->Call(&input, 1, results.data() + offset, &nresults)) offset += nresults; } } float R = 0.0f; float G = 0.0f; float B = 0.0f; - pCS->GetRGB(pResults, &R, &G, &B); + pCS->GetRGB(results.data(), &R, &G, &B); rgb_array[i] = FXARGB_TODIB(FXARGB_MAKE(alpha, FXSYS_round(R * 255), FXSYS_round(G * 255), FXSYS_round(B * 255))); @@ -237,9 +234,7 @@ void DrawRadialShading(const RetainPtr& pBitmap, bEndExtend = !!pArray->GetIntegerAt(1); } - CFX_FixedBufGrow result_array(total_results); - float* pResults = result_array; - memset(pResults, 0, total_results * sizeof(float)); + std::vector results(total_results); uint32_t rgb_array[kShadingSteps]; for (int i = 0; i < kShadingSteps; i++) { float input = (t_max - t_min) * i / kShadingSteps + t_min; @@ -247,14 +242,14 @@ void DrawRadialShading(const RetainPtr& pBitmap, for (const auto& func : funcs) { if (func) { int nresults; - if (func->Call(&input, 1, pResults + offset, &nresults)) + if (func->Call(&input, 1, results.data() + offset, &nresults)) offset += nresults; } } float R = 0.0f; float G = 0.0f; float B = 0.0f; - pCS->GetRGB(pResults, &R, &G, &B); + pCS->GetRGB(results.data(), &R, &G, &B); rgb_array[i] = FXARGB_TODIB(FXARGB_MAKE(alpha, FXSYS_round(R * 255), FXSYS_round(G * 255), FXSYS_round(B * 255))); @@ -366,9 +361,7 @@ void DrawFuncShading(const RetainPtr& pBitmap, int height = pBitmap->GetHeight(); int pitch = pBitmap->GetPitch(); - CFX_FixedBufGrow result_array(total_results); - float* pResults = result_array; - memset(pResults, 0, total_results * sizeof(float)); + std::vector results(total_results); for (int row = 0; row < height; row++) { uint32_t* dib_buf = (uint32_t*)(pBitmap->GetBuffer() + row * pitch); for (int column = 0; column < width; column++) { @@ -382,7 +375,7 @@ void DrawFuncShading(const RetainPtr& pBitmap, for (const auto& func : funcs) { if (func) { int nresults; - if (func->Call(input, 2, pResults + offset, &nresults)) + if (func->Call(input, 2, results.data() + offset, &nresults)) offset += nresults; } } @@ -390,7 +383,7 @@ void DrawFuncShading(const RetainPtr& pBitmap, float R = 0.0f; float G = 0.0f; float B = 0.0f; - pCS->GetRGB(pResults, &R, &G, &B); + pCS->GetRGB(results.data(), &R, &G, &B); dib_buf[column] = FXARGB_TODIB(FXARGB_MAKE( alpha, (int32_t)(R * 255), (int32_t)(G * 255), (int32_t)(B * 255))); } @@ -2054,13 +2047,14 @@ void CPDF_RenderStatus::DrawShading(const CPDF_ShadingPattern* pPattern, CPDF_Array* pBackColor = pDict->GetArrayFor("Background"); if (pBackColor && pBackColor->GetCount() >= pColorSpace->CountComponents()) { - CFX_FixedBufGrow comps(pColorSpace->CountComponents()); + std::vector comps; + comps.reserve(pColorSpace->CountComponents()); for (uint32_t i = 0; i < pColorSpace->CountComponents(); i++) - comps[i] = pBackColor->GetNumberAt(i); + comps.push_back(pBackColor->GetNumberAt(i)); float R = 0.0f; float G = 0.0f; float B = 0.0f; - pColorSpace->GetRGB(comps, &R, &G, &B); + pColorSpace->GetRGB(comps.data(), &R, &G, &B); background = ArgbEncode(255, (int32_t)(R * 255), (int32_t)(G * 255), (int32_t)(B * 255)); } @@ -2584,23 +2578,13 @@ RetainPtr CPDF_RenderStatus::LoadSMask( color_space_family = pCS->GetFamily(); float R, G, B; - uint32_t comps = 8; - if (pCS->CountComponents() > comps) { - comps = pCS->CountComponents(); - } - CFX_FixedBufGrow float_array(comps); - float* pFloats = float_array; - FX_SAFE_UINT32 num_floats = comps; - num_floats *= sizeof(float); - if (!num_floats.IsValid()) { - return nullptr; - } - memset(pFloats, 0, num_floats.ValueOrDie()); - size_t count = pBC->GetCount() > 8 ? 8 : pBC->GetCount(); + uint32_t comps = std::max(8u, pCS->CountComponents()); + std::vector floats(comps); + size_t count = std::min(8, pBC->GetCount()); for (size_t i = 0; i < count; i++) { - pFloats[i] = pBC->GetNumberAt(i); + floats[i] = pBC->GetNumberAt(i); } - pCS->GetRGB(pFloats, &R, &G, &B); + pCS->GetRGB(floats.data(), &R, &G, &B); back_color = 0xff000000 | ((int32_t)(R * 255) << 16) | ((int32_t)(G * 255) << 8) | (int32_t)(B * 255); m_pContext->GetDocument()->GetPageData()->ReleaseColorSpace(pCSObj); @@ -2633,11 +2617,11 @@ RetainPtr CPDF_RenderStatus::LoadSMask( int src_pitch = bitmap.GetPitch(); std::vector transfers(256); if (pFunc) { - CFX_FixedBufGrow results(pFunc->CountOutputs()); + std::vector results(pFunc->CountOutputs()); for (int i = 0; i < 256; i++) { float input = (float)i / 255.0f; int nresult; - pFunc->Call(&input, 1, results, &nresult); + pFunc->Call(&input, 1, results.data(), &nresult); transfers[i] = FXSYS_round(results[0] * 255); } } else { diff --git a/core/fxcodec/codec/fx_codec_icc.cpp b/core/fxcodec/codec/fx_codec_icc.cpp index 29b37d19ac..458816e77e 100644 --- a/core/fxcodec/codec/fx_codec_icc.cpp +++ b/core/fxcodec/codec/fx_codec_icc.cpp @@ -5,10 +5,10 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #include +#include #include "core/fxcodec/codec/ccodec_iccmodule.h" #include "core/fxcodec/codec/codec_int.h" -#include "core/fxcrt/cfx_fixedbufgrow.h" namespace { @@ -124,19 +124,16 @@ void CCodec_IccModule::Translate(CLcmsCmm* pTransform, uint32_t nSrcComponents = m_nComponents; uint8_t output[4]; if (pTransform->m_bLab) { - CFX_FixedBufGrow inputs(nSrcComponents); - double* input = inputs; - for (uint32_t i = 0; i < nSrcComponents; ++i) - input[i] = pSrcValues[i]; - cmsDoTransform(pTransform->m_hTransform, input, output, 1); + std::vector input(pSrcValues, pSrcValues + nSrcComponents); + cmsDoTransform(pTransform->m_hTransform, input.data(), output, 1); } else { - CFX_FixedBufGrow inputs(nSrcComponents); - uint8_t* input = inputs; + std::vector input; + input.reserve(nSrcComponents); for (uint32_t i = 0; i < nSrcComponents; ++i) { - input[i] = - pdfium::clamp(static_cast(pSrcValues[i] * 255.0f), 0, 255); + input.push_back( + pdfium::clamp(static_cast(pSrcValues[i] * 255.0f), 0, 255)); } - cmsDoTransform(pTransform->m_hTransform, input, output, 1); + cmsDoTransform(pTransform->m_hTransform, input.data(), output, 1); } pDestValues[0] = output[2] / 255.0f; pDestValues[1] = output[1] / 255.0f; diff --git a/core/fxge/apple/fx_apple_platform.cpp b/core/fxge/apple/fx_apple_platform.cpp index 1801814e66..013be8f414 100644 --- a/core/fxge/apple/fx_apple_platform.cpp +++ b/core/fxge/apple/fx_apple_platform.cpp @@ -5,8 +5,8 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #include +#include -#include "core/fxcrt/cfx_fixedbufgrow.h" #include "core/fxcrt/fx_system.h" #ifndef _SKIA_SUPPORT_ @@ -57,11 +57,12 @@ bool CGDrawGlyphRun(CGContextRef pContext, if (!pFont->GetPlatformFont()) return false; } - CFX_FixedBufGrow glyph_indices(nChars); - CFX_FixedBufGrow glyph_positions(nChars); + std::vector glyph_indices; + glyph_indices.reserve(nChars); + std::vector glyph_positions(nChars); for (int i = 0; i < nChars; i++) { - glyph_indices[i] = - pCharPos[i].m_ExtGID ? pCharPos[i].m_ExtGID : pCharPos[i].m_GlyphIndex; + glyph_indices.push_back(pCharPos[i].m_ExtGID ? pCharPos[i].m_ExtGID + : pCharPos[i].m_GlyphIndex); if (bNegSize) glyph_positions[i].x = -pCharPos[i].m_Origin.x; else @@ -76,9 +77,9 @@ bool CGDrawGlyphRun(CGContextRef pContext, new_matrix.d = -new_matrix.d; } quartz2d.setGraphicsTextMatrix(pContext, &new_matrix); - return quartz2d.drawGraphicsString(pContext, pFont->GetPlatformFont(), - font_size, glyph_indices, glyph_positions, - nChars, argb, nullptr); + return quartz2d.drawGraphicsString( + pContext, pFont->GetPlatformFont(), font_size, glyph_indices.data(), + glyph_positions.data(), nChars, argb, nullptr); } } // namespace -- cgit v1.2.3