| Index: core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp
|
| diff --git a/core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp b/core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp
|
| index 7ffd186f72d5d4dec16fd7193e3f03692d039017..b54f27a4c9b2c0bc13cb50f0b7d6d7ed16d0d835 100644
|
| --- a/core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp
|
| +++ b/core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp
|
| @@ -662,6 +662,32 @@ struct CPDF_PatchDrawer {
|
| }
|
| }
|
| };
|
| +
|
| +FX_BOOL _CheckCoonTensorPara(const CPDF_MeshStream &stream)
|
| +{
|
| + FX_BOOL bCoorBits = ( stream.m_nCoordBits== 1 ||
|
| + stream.m_nCoordBits == 2 ||
|
| + stream.m_nCoordBits == 4 ||
|
| + stream.m_nCoordBits == 8 ||
|
| + stream.m_nCoordBits == 12 ||
|
| + stream.m_nCoordBits == 16 ||
|
| + stream.m_nCoordBits == 24 ||
|
| + stream.m_nCoordBits == 32 );
|
| +
|
| + FX_BOOL bCompBits = ( stream.m_nCompBits == 1 ||
|
| + stream.m_nCompBits == 2 ||
|
| + stream.m_nCompBits == 4 ||
|
| + stream.m_nCompBits == 8 ||
|
| + stream.m_nCompBits == 12 ||
|
| + stream.m_nCompBits == 16 );
|
| +
|
| + FX_BOOL bFlagBits = ( stream.m_nFlagBits == 2 ||
|
| + stream.m_nFlagBits == 4 ||
|
| + stream.m_nFlagBits == 8 );
|
| +
|
| + return bCoorBits && bCompBits && bFlagBits;
|
| +}
|
| +
|
| static void _DrawCoonPatchMeshes(FX_BOOL bTensor, CFX_DIBitmap* pBitmap, CFX_AffineMatrix* pObject2Bitmap,
|
| CPDF_Stream* pShadingStream, CPDF_Function** pFuncs, int nFuncs,
|
| CPDF_ColorSpace* pCS, int fill_mode, int alpha)
|
| @@ -676,6 +702,11 @@ static void _DrawCoonPatchMeshes(FX_BOOL bTensor, CFX_DIBitmap* pBitmap, CFX_Aff
|
| if (!stream.Load(pShadingStream, pFuncs, nFuncs, pCS)) {
|
| return;
|
| }
|
| +
|
| + if (!_CheckCoonTensorPara(stream)) {
|
| + return;
|
| + }
|
| +
|
| CPDF_PatchDrawer patch;
|
| patch.alpha = alpha;
|
| patch.pDevice = &device;
|
| @@ -687,20 +718,19 @@ static void _DrawCoonPatchMeshes(FX_BOOL bTensor, CFX_DIBitmap* pBitmap, CFX_Aff
|
| pPoints[i].m_Flag = FXPT_BEZIERTO;
|
| }
|
| CFX_FloatPoint coords[16];
|
| - for (int i = 0; i < 16; i ++)
|
| - {
|
| + for (int i = 0; i < 16; i ++) {
|
| coords[i].Set(0.0f, 0.0f);
|
| }
|
|
|
| int point_count = bTensor ? 16 : 12;
|
| while (!stream.m_BitStream.IsEOF()) {
|
| FX_DWORD flag = stream.GetFlag();
|
| - int iStartPoint = 0, iStartColor = 0, i;
|
| + int iStartPoint = 0, iStartColor = 0, i = 0;
|
| if (flag) {
|
| iStartPoint = 4;
|
| iStartColor = 2;
|
| CFX_FloatPoint tempCoords[4];
|
| - for (int i = 0; i < 4; i ++) {
|
| + for (i = 0; i < 4; i ++) {
|
| tempCoords[i] = coords[(flag * 3 + i) % 12];
|
| }
|
| FXSYS_memcpy32(coords, tempCoords, sizeof(CFX_FloatPoint) * 4);
|
|
|