[Libreoffice-commits] core.git: filter/source
Caolán McNamara
caolanm at redhat.com
Sun Jan 14 14:51:51 UTC 2018
filter/source/graphicfilter/idxf/dxf2mtf.cxx | 13 ++++-----
filter/source/graphicfilter/idxf/dxfentrd.cxx | 36 ++++++++++++++++++--------
filter/source/graphicfilter/idxf/dxfentrd.hxx | 11 +++++--
3 files changed, 38 insertions(+), 22 deletions(-)
New commits:
commit b1e1b0950ecc4bf7323bd494ef33de1ae31fedf0
Author: Caolán McNamara <caolanm at redhat.com>
Date: Sat Jan 13 21:22:08 2018 +0000
ofz#5276 oom
Change-Id: I5eba89e0f242b316bd59779601dc1f12b8ce3b87
Reviewed-on: https://gerrit.libreoffice.org/47844
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/filter/source/graphicfilter/idxf/dxf2mtf.cxx b/filter/source/graphicfilter/idxf/dxf2mtf.cxx
index 862ed03e3a20..9d034c579c9a 100644
--- a/filter/source/graphicfilter/idxf/dxf2mtf.cxx
+++ b/filter/source/graphicfilter/idxf/dxf2mtf.cxx
@@ -531,13 +531,13 @@ void DXF2GDIMetaFile::DrawPolyLineEntity(const DXFPolyLineEntity & rE, const DXF
void DXF2GDIMetaFile::DrawLWPolyLineEntity(const DXFLWPolyLineEntity & rE, const DXFTransform & rTransform )
{
- sal_Int32 i, nPolySize = rE.nCount;
- if ( nPolySize && rE.pP )
+ sal_Int32 nPolySize = rE.aP.size();
+ if (nPolySize)
{
tools::Polygon aPoly( static_cast<sal_uInt16>(nPolySize));
- for ( i = 0; i < nPolySize; i++ )
+ for (sal_Int32 i = 0; i < nPolySize; ++i)
{
- rTransform.Transform( rE.pP[ static_cast<sal_uInt16>(i) ], aPoly[ static_cast<sal_uInt16>(i) ] );
+ rTransform.Transform( rE.aP[ static_cast<sal_uInt16>(i) ], aPoly[ static_cast<sal_uInt16>(i) ] );
}
if ( SetLineAttribute( rE ) )
{
@@ -562,11 +562,10 @@ void DXF2GDIMetaFile::DrawHatchEntity(const DXFHatchEntity & rE, const DXFTransf
const DXFBoundaryPathData& rPathData = rE.pBoundaryPathData[ j ];
if ( rPathData.bIsPolyLine )
{
- sal_Int32 i;
- for( i = 0; i < rPathData.nPointCount; i++ )
+ for (const auto& a : rPathData.aP)
{
Point aPt;
- rTransform.Transform( rPathData.pP[ i ], aPt );
+ rTransform.Transform(a, aPt);
aPtAry.push_back( aPt );
}
}
diff --git a/filter/source/graphicfilter/idxf/dxfentrd.cxx b/filter/source/graphicfilter/idxf/dxfentrd.cxx
index 3c313a915be7..7a9074a0a770 100644
--- a/filter/source/graphicfilter/idxf/dxfentrd.cxx
+++ b/filter/source/graphicfilter/idxf/dxfentrd.cxx
@@ -423,7 +423,7 @@ void DXFLWPolyLineEntity::EvaluateGroup( DXFGroupReader & rDGR )
nCount = rDGR.GetI();
// limit alloc to max reasonable size based on remaining data in stream
if (nCount > 0 && static_cast<sal_uInt32>(nCount) <= rDGR.remainingSize())
- pP.reset( new DXFVector[ nCount ] );
+ aP.reserve(nCount);
else
nCount = 0;
}
@@ -434,14 +434,21 @@ void DXFLWPolyLineEntity::EvaluateGroup( DXFGroupReader & rDGR )
case 41: fEndWidth = rDGR.GetF(); break;
case 10:
{
- if ( pP && ( nIndex < nCount ) )
- pP[ nIndex ].fx = rDGR.GetF();
+ if (nIndex < nCount)
+ {
+ aP.resize(nIndex+1);
+ aP[nIndex].fx = rDGR.GetF();
+ }
}
break;
case 20:
{
- if ( pP && ( nIndex < nCount ) )
- pP[ nIndex++ ].fy = rDGR.GetF();
+ if (nIndex < nCount)
+ {
+ aP.resize(nIndex+1);
+ aP[nIndex].fy = rDGR.GetF();
+ ++nIndex;
+ }
}
break;
default: DXFBasicEntity::EvaluateGroup(rDGR);
@@ -548,10 +555,10 @@ bool DXFEdgeTypeSpline::EvaluateGroup( DXFGroupReader & rDGR )
}
DXFBoundaryPathData::DXFBoundaryPathData() :
+ nPointCount( 0 ),
nFlags( 0 ),
nHasBulgeFlag( 0 ),
nIsClosedFlag( 0 ),
- nPointCount( 0 ),
fBulge( 0.0 ),
nSourceBoundaryObjects( 0 ),
nEdgeCount( 0 ),
@@ -583,7 +590,7 @@ bool DXFBoundaryPathData::EvaluateGroup( DXFGroupReader & rDGR )
nPointCount = rDGR.GetI();
// limit alloc to max reasonable size based on remaining data in stream
if (nPointCount > 0 && static_cast<sal_uInt32>(nPointCount) <= rDGR.remainingSize())
- pP.reset( new DXFVector[ nPointCount ] );
+ aP.reserve(nPointCount);
else
nPointCount = 0;
}
@@ -594,14 +601,21 @@ bool DXFBoundaryPathData::EvaluateGroup( DXFGroupReader & rDGR )
case 42 : fBulge = rDGR.GetF(); break;
case 10:
{
- if ( pP && ( nPointIndex < nPointCount ) )
- pP[ nPointIndex ].fx = rDGR.GetF();
+ if (nPointIndex < nPointCount)
+ {
+ aP.resize(nPointIndex+1);
+ aP[nPointIndex].fx = rDGR.GetF();
+ }
}
break;
case 20:
{
- if ( pP && ( nPointIndex < nPointCount ) )
- pP[ nPointIndex++ ].fy = rDGR.GetF();
+ if (nPointIndex < nPointCount)
+ {
+ aP.resize(nPointIndex+1);
+ aP[nPointIndex].fy = rDGR.GetF();
+ ++nPointIndex;
+ }
}
break;
diff --git a/filter/source/graphicfilter/idxf/dxfentrd.hxx b/filter/source/graphicfilter/idxf/dxfentrd.hxx
index 405ae13e7970..39d9b12fbff6 100644
--- a/filter/source/graphicfilter/idxf/dxfentrd.hxx
+++ b/filter/source/graphicfilter/idxf/dxfentrd.hxx
@@ -25,6 +25,7 @@
#include <deque>
#include <memory>
+#include <vector>
enum DXFEntityType {
DXF_LINE,
@@ -323,16 +324,16 @@ protected:
class DXFLWPolyLineEntity : public DXFBasicEntity
{
sal_Int32 nIndex;
+ sal_Int32 nCount; // 90
public:
- sal_Int32 nCount; // 90
sal_Int32 nFlags; // 70 1 = closed, 128 = plinegen
double fConstantWidth; // 43 (optional - default: 0, not used if fStartWidth and/or fEndWidth is used)
double fStartWidth; // 40
double fEndWidth; // 41
- std::unique_ptr<DXFVector[]> pP;
+ std::vector<DXFVector> aP;
DXFLWPolyLineEntity();
@@ -400,10 +401,12 @@ struct DXFEdgeTypeSpline : public DXFEdgeType
struct DXFBoundaryPathData
{
+private:
+ sal_Int32 nPointCount; // 93
+public:
sal_Int32 nFlags; // 92
sal_Int32 nHasBulgeFlag; // 72
sal_Int32 nIsClosedFlag; // 73
- sal_Int32 nPointCount; // 93
double fBulge; // 42
sal_Int32 nSourceBoundaryObjects; // 97
sal_Int32 nEdgeCount; // 93
@@ -411,7 +414,7 @@ struct DXFBoundaryPathData
bool bIsPolyLine;
sal_Int32 nPointIndex;
- std::unique_ptr<DXFVector[]> pP;
+ std::vector<DXFVector> aP;
std::deque<std::unique_ptr<DXFEdgeType>> aEdges;
DXFBoundaryPathData();
More information about the Libreoffice-commits
mailing list