oox/source/vml/vmlshape.cxx | 3 + sc/source/core/tool/rangeutl.cxx | 4 +- svx/source/customshapes/EnhancedCustomShape2d.cxx | 37 ++++++++++++++-------- 3 files changed, 29 insertions(+), 15 deletions(-)
New commits: commit 2327f65ccf8231cef7e6ed4a9fb0df8dbdaa15f2 Author: Fridrich Å trba <fridrich.st...@bluewin.ch> Date: Mon Jun 3 10:16:26 2013 +0200 Fixing crash with dereferencing front() and back() of an empty vector Change-Id: If7204614aa7a650f4a2804fc63dd3301ece2281e (cherry picked from commit f5d6e7af69f6b8972bd97d1d8e2a6d9ec5a6294a) diff --git a/oox/source/vml/vmlshape.cxx b/oox/source/vml/vmlshape.cxx index 1ec5c24..35ad93d 100644 --- a/oox/source/vml/vmlshape.cxx +++ b/oox/source/vml/vmlshape.cxx @@ -769,7 +769,8 @@ Reference< XShape > BezierShape::implConvertAndInsert( const Reference< XShapes for ( unsigned int i = 0; i < aFlagLists.size(); i++ ) aBezierCoords.Flags[i] = ContainerHelper::vectorToSequence( aFlagLists[i] ); - if( aCoordLists.front().front().X == aCoordLists.back().back().X + if( !aCoordLists.front().empty() && !aCoordLists.back().empty() + && aCoordLists.front().front().X == aCoordLists.back().back().X && aCoordLists.front().front().Y == aCoordLists.back().back().Y ) { // HACK: If the shape is in fact closed, which can be found out only when the path is known, // force to closed bezier shape (otherwise e.g. fill won't work). commit 864dc65f8fb02348eaf0d83f38591f913342191f Author: Fridrich Å trba <fridrich.st...@bluewin.ch> Date: Mon Jun 3 14:55:52 2013 +0200 And this one has the same potential to crash Change-Id: Icd2b2f2c11b7e86a10cae887b96f96a6fbe8a44e (cherry picked from commit cacc516693b879c08bd3b1963eeed9c38928615f) diff --git a/sc/source/core/tool/rangeutl.cxx b/sc/source/core/tool/rangeutl.cxx index 1fbf007..38305f6 100644 --- a/sc/source/core/tool/rangeutl.cxx +++ b/sc/source/core/tool/rangeutl.cxx @@ -394,7 +394,7 @@ sal_Int32 ScRangeStringConverter::IndexOfDifferent( sal_Int32 nIndex = nOffset; sal_Bool bExitLoop = false; - while( !bExitLoop && (nIndex < nLength) ) + while( !bExitLoop && (nIndex >= 0 && nIndex < nLength) ) { bExitLoop = (rString[ nIndex ] != cSearchChar); if( !bExitLoop ) commit 48cbf49e3c03e64192046211ca42e277bf89eab8 Author: Fridrich Å trba <fridrich.st...@bluewin.ch> Date: Mon Jun 3 14:51:24 2013 +0200 Fix ooo51302-1.ods: check for special index value of -1 Change-Id: I3fbb700300d18a878cbf23c94e35bc69f864824b (cherry picked from commit 50bbd1aefe0c78c254a18cc6e1dfeaf5c6858112) diff --git a/sc/source/core/tool/rangeutl.cxx b/sc/source/core/tool/rangeutl.cxx index 054c61f..1fbf007 100644 --- a/sc/source/core/tool/rangeutl.cxx +++ b/sc/source/core/tool/rangeutl.cxx @@ -374,7 +374,7 @@ sal_Int32 ScRangeStringConverter::IndexOf( sal_Bool bQuoted = false; sal_Bool bExitLoop = false; - while( !bExitLoop && (nIndex < nLength) ) + while( !bExitLoop && (nIndex >= 0 && nIndex < nLength) ) { sal_Unicode cCode = rString[ nIndex ]; bExitLoop = (cCode == cSearchChar) && !bQuoted; commit 6f2573dffc64bf36e284b6eae595a51c866cb49a Author: Armin Le Grand <a...@apache.org> Date: Mon Dec 10 14:45:55 2012 +0000 #121437# Added patch from Regina which implements QuadraticBezier segemnts to CustomShapes Patch by: Regina Review by: ALG (cherry picked from commit 4faa46872cad4ed779b07803b7f616b32d800284) (cherry picked from commit a3b384ee41f352b5b99ea1265018f2d14405df65) diff --git a/svx/source/customshapes/EnhancedCustomShape2d.cxx b/svx/source/customshapes/EnhancedCustomShape2d.cxx index 0675abd..f17e145 100644 --- a/svx/source/customshapes/EnhancedCustomShape2d.cxx +++ b/svx/source/customshapes/EnhancedCustomShape2d.cxx @@ -913,7 +913,7 @@ double EnhancedCustomShape2d::GetEquationValueAsDouble( const sal_Int32 nIndex ) struct EquationResult &aResult = ((EnhancedCustomShape2d*)this)->vEquationResults[ nIndex ]; fNumber = aResult.fValue = (*vNodesSharedPtr[ nIndex ])(); - aResult.bReady = sal_True; + aResult.bReady = true; if ( !rtl::math::isFinite( fNumber ) ) fNumber = 0.0; @@ -1729,21 +1729,34 @@ void EnhancedCustomShape2d::CreateSubPath( sal_uInt16& rSrcPt, sal_uInt16& rSegm break; case QUADRATICCURVETO : + { for ( sal_Int32 i(0L); ( i < nPntCount ) && ( rSrcPt + 1 < nCoordSize ); i++ ) { - const Point aControl(GetPoint( seqCoordinates[ rSrcPt++ ], true, true )); - const Point aEnd(GetPoint( seqCoordinates[ rSrcPt++ ], true, true )); + if ( rSrcPt ) + { + const Point aPreviousEndPoint(GetPoint( seqCoordinates[ rSrcPt - 1 ], true, true)); + const Point aControlQ(GetPoint( seqCoordinates[ rSrcPt++ ], true, true )); + const Point aEnd(GetPoint( seqCoordinates[ rSrcPt++ ], true, true )); + const Point aControlA((aPreviousEndPoint + (aControlQ * 2.0)) / 3.0); + const Point aControlB(((aControlQ * 2.0) + aEnd) / 3.0); - DBG_ASSERT(aNewB2DPolygon.count(), "EnhancedCustomShape2d::CreateSubPath: Error in adding control point (!)"); - basegfx::B2DPoint aStartPointB2D( aNewB2DPolygon.getB2DPoint(aNewB2DPolygon.count() - 1 ) ); - Point aStartPoint( aStartPointB2D.getX(), aStartPointB2D.getY() ); + DBG_ASSERT(aNewB2DPolygon.count(), "EnhancedCustomShape2d::CreateSubPath: Error in adding Q control point (!)"); + aNewB2DPolygon.appendBezierSegment( + basegfx::B2DPoint(aControlA.X(), aControlA.Y()), + basegfx::B2DPoint(aControlB.X(), aControlB.Y()), + basegfx::B2DPoint(aEnd.X(), aEnd.Y())); + } + else // no previous point , do a moveto + { + rSrcPt++; // skip control point + const Point aEnd(GetPoint( seqCoordinates[ rSrcPt++ ], true, true )); - aNewB2DPolygon.appendBezierSegment( - basegfx::B2DPoint(aStartPoint.X() + 2.0*(aControl.X() - aStartPoint.X())/3.0, aStartPoint.Y() + 2.0*(aControl.Y() - aStartPoint.Y())/3.0), - basegfx::B2DPoint(aEnd.X() + 2.0*(aControl.X() - aEnd.X())/3.0, aEnd.Y() + 2.0*(aControl.Y() - aEnd.Y())/3.0), - basegfx::B2DPoint(aEnd.X(), aEnd.Y())); + DBG_ASSERT(aNewB2DPolygon.count(), "EnhancedCustomShape2d::CreateSubPath: Error in adding Q control point (!)"); + aNewB2DPolygon.append(basegfx::B2DPoint(aEnd.X(), aEnd.Y())); + } } - break; + } + break; case LINETO : { @@ -2380,7 +2393,7 @@ bool EnhancedCustomShape2d::IsPostRotate() const SdrObject* EnhancedCustomShape2d::CreateLineGeometry() { - return CreateObject( sal_True ); + return CreateObject( true ); }
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits