[Libreoffice-commits] core.git: Branch 'libreoffice-5-0' - vcl/qa vcl/source
Caolán McNamara
caolanm at redhat.com
Sat Aug 15 19:05:34 PDT 2015
vcl/qa/cppunit/graphicfilter/data/emf/pass/crash-2.emf |binary
vcl/source/filter/wmf/enhwmf.cxx | 33 +++++++----------
2 files changed, 15 insertions(+), 18 deletions(-)
New commits:
commit fdc60b7497439e25a1b30d259f3407aeff8e3236
Author: Caolán McNamara <caolanm at redhat.com>
Date: Fri Aug 14 09:25:32 2015 +0100
limit access to dx array to min of input len and len of array
i.e. the sal_Int32 nDXLen = std::min<sal_Int32>(nLen, aOldDX.size()); line
and its usage
Change-Id: Ib0100d2de210a45b340c3a7de6c6dcf2a07443d0
(cherry picked from commit 6d4f97b05b1bfe5aae395134b2dc35805c23b8c4)
Reviewed-on: https://gerrit.libreoffice.org/17751
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Norbert Thiebaud <nthiebaud at gmail.com>
diff --git a/vcl/qa/cppunit/graphicfilter/data/emf/pass/crash-2.emf b/vcl/qa/cppunit/graphicfilter/data/emf/pass/crash-2.emf
new file mode 100644
index 0000000..a522132
Binary files /dev/null and b/vcl/qa/cppunit/graphicfilter/data/emf/pass/crash-2.emf differ
diff --git a/vcl/source/filter/wmf/enhwmf.cxx b/vcl/source/filter/wmf/enhwmf.cxx
index 8b92f54..7f7bf81 100644
--- a/vcl/source/filter/wmf/enhwmf.cxx
+++ b/vcl/source/filter/wmf/enhwmf.cxx
@@ -1425,7 +1425,7 @@ bool EnhWMFReader::ReadEnhWMF()
sal_Int32 nLeft, nTop, nRight, nBottom, ptlReferenceX, ptlReferenceY, nGfxMode, nXScale, nYScale;
sal_uInt32 nCurPos, nOffString, nOptions, offDx;
sal_Int32 nLen;
- long* pDX = NULL;
+ std::vector<long> aDX;
nCurPos = pWMF->Tell() - 8;
@@ -1451,13 +1451,12 @@ bool EnhWMFReader::ReadEnhWMF()
pWMF->Seek( nCurPos + offDx );
if ( ( nLen * sizeof(sal_uInt32) ) <= ( nEndPos - pWMF->Tell() ) )
{
- pDX = new long[ nLen ];
- sal_Int32 i;
- sal_Int32 val;
- for ( i = 0; i < nLen; i++ )
+ aDX.resize(nLen);
+ for (sal_Int32 i = 0; i < nLen; ++i)
{
- pWMF->ReadInt32( val );
- pDX[ i ] = val;
+ sal_Int32 val(0);
+ pWMF->ReadInt32(val);
+ aDX[i] = val;
}
}
}
@@ -1469,23 +1468,22 @@ bool EnhWMFReader::ReadEnhWMF()
{
boost::scoped_array<sal_Char> pBuf(new sal_Char[ nLen ]);
pWMF->Read( pBuf.get(), nLen );
- aText = OUString( pBuf.get(), (sal_uInt16)nLen, pOut->GetCharSet() );
+ aText = OUString(pBuf.get(), nLen, pOut->GetCharSet());
pBuf.reset();
if ( aText.getLength() != nLen )
{
- sal_uInt16 i, j;
- long* pOldDx = pDX;
- pDX = new long[ aText.getLength() ];
- for ( i = 0, j = 0; i < aText.getLength(); i++ )
+ std::vector<long> aOldDX(aText.getLength());
+ aOldDX.swap(aDX);
+ sal_Int32 nDXLen = std::min<sal_Int32>(nLen, aOldDX.size());
+ for (sal_Int32 i = 0, j = 0; i < aText.getLength(); ++i)
{
sal_Unicode cUniChar = aText[i];
OString aCharacter(&cUniChar, 1, pOut->GetCharSet());
- pDX[ i ] = 0;
- for (sal_Int32 k = 0; ( k < aCharacter.getLength() ) && ( j < nLen ) && ( i < aText.getLength() ); ++k)
- pDX[ i ] += pOldDx[ j++ ];
+ aDX[i] = 0;
+ for (sal_Int32 k = 0; ( k < aCharacter.getLength() ) && ( j < nDXLen ) && ( i < aText.getLength() ); ++k)
+ aDX[ i ] += aOldDX[j++];
}
- delete[] pOldDx;
}
}
}
@@ -1507,9 +1505,8 @@ bool EnhWMFReader::ReadEnhWMF()
aText = OUString(pBuf.get(), nLen);
}
}
- pOut->DrawText( aPos, aText, pDX, bRecordPath, nGfxMode );
+ pOut->DrawText(aPos, aText, aDX.data(), bRecordPath, nGfxMode);
}
- delete[] pDX;
}
break;
More information about the Libreoffice-commits
mailing list