From 51aed7308494d7cb354d00b831208dbbd8233f9b Mon Sep 17 00:00:00 2001 From: abelcsik Date: Thu, 2 Jul 2015 16:30:57 +0200 Subject: [PATCH] 0026385: Fix to prevent BRepMesh from possible crash due to pointer to local variable stored inside Extrema_LocateExtPC Made the BRepAdaptor_Curve a member of BRepMesh_EdgeParameterProvider to ensure that it is created before and destroyed after the Extrema_LocateExtPC that uses it. --- src/BRepMesh/BRepMesh_EdgeParameterProvider.cxx | 8 ++++---- src/BRepMesh/BRepMesh_EdgeParameterProvider.hxx | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/BRepMesh/BRepMesh_EdgeParameterProvider.cxx b/src/BRepMesh/BRepMesh_EdgeParameterProvider.cxx index 927795635d..c5ae9c1036 100644 --- a/src/BRepMesh/BRepMesh_EdgeParameterProvider.cxx +++ b/src/BRepMesh/BRepMesh_EdgeParameterProvider.cxx @@ -32,7 +32,8 @@ BRepMesh_EdgeParameterProvider::BRepMesh_EdgeParameterProvider( const Handle(TColStd_HArray1OfReal)& theParameters) : myParameters(theParameters), myIsSameParam(BRep_Tool::SameParameter(theEdge)), - myScale(1.) + myScale(1.), + myCurveAdaptor(theEdge, theFace) { if (myIsSameParam) return; @@ -58,9 +59,8 @@ BRepMesh_EdgeParameterProvider::BRepMesh_EdgeParameterProvider( (aOldLastParam - myOldFirstParam); } - BRepAdaptor_Curve aCOnS(theEdge, theFace); - myProjector.Initialize(aCOnS, aCOnS.FirstParameter(), - aCOnS.LastParameter(), Precision::PConfusion()); + myProjector.Initialize(myCurveAdaptor, myCurveAdaptor.FirstParameter(), + myCurveAdaptor.LastParameter(), Precision::PConfusion()); } //======================================================================= diff --git a/src/BRepMesh/BRepMesh_EdgeParameterProvider.hxx b/src/BRepMesh/BRepMesh_EdgeParameterProvider.hxx index d1699f44bb..1a83050d34 100644 --- a/src/BRepMesh/BRepMesh_EdgeParameterProvider.hxx +++ b/src/BRepMesh/BRepMesh_EdgeParameterProvider.hxx @@ -20,6 +20,7 @@ #include #include #include +#include class gp_Pnt; class TopoDS_Edge; @@ -63,6 +64,7 @@ private: Standard_Real myCurParam; Standard_Real myFoundParam; + BRepAdaptor_Curve myCurveAdaptor; Extrema_LocateExtPC myProjector; };