Index: core/fxge/dib/fx_dib_engine.cpp |
diff --git a/core/fxge/dib/fx_dib_engine.cpp b/core/fxge/dib/fx_dib_engine.cpp |
index 389cf239098f5a467dc20d5baabb255acf495b9b..4923237c7885b55a0454f6dde66581c3b982b032 100644 |
--- a/core/fxge/dib/fx_dib_engine.cpp |
+++ b/core/fxge/dib/fx_dib_engine.cpp |
@@ -42,8 +42,10 @@ CWeightTable::~CWeightTable() { |
FX_Free(m_pWeightTables); |
} |
-size_t CWeightTable::GetPixelWeightSize() const { |
- return m_dwWeightTablesSize / sizeof(int); |
Lei Zhang
2016/10/10 18:30:51
Should we instead just check for:
return m_ItemSi
|
+size_t CWeightTable::GetMaximumPixelWeightSize(PixelWeight* pWeight) const { |
+ uint8_t* end_addr = m_pWeightTables + m_dwWeightTablesSize; |
+ uint8_t* begin_addr = reinterpret_cast<uint8_t*>(&pWeight->m_Weights); |
+ return (end_addr - begin_addr) / sizeof(pWeight->m_Weights[0]); |
} |
bool CWeightTable::Calc(int dest_len, |
@@ -240,7 +242,7 @@ bool CWeightTable::Calc(int dest_len, |
break; |
} |
size_t idx = j - start_i; |
- if (idx >= GetPixelWeightSize()) |
+ if (idx >= GetMaximumPixelWeightSize(&pixel_weights)) |
return false; |
pixel_weights.m_Weights[idx] = FXSYS_round((FX_FLOAT)(weight * 65536)); |
} |
@@ -260,7 +262,7 @@ int* CWeightTable::GetValueFromPixelWeight(PixelWeight* pWeight, |
return nullptr; |
size_t idx = index - pWeight->m_SrcStart; |
- return idx < GetPixelWeightSize() ? &pWeight->m_Weights[idx] : nullptr; |
+ return idx < GetMaximumPixelWeightSize(pWeight) ? &pWeight->m_Weights[idx] : nullptr; |
} |
CStretchEngine::CStretchEngine(IFX_ScanlineComposer* pDestBitmap, |