0026385: Fix to prevent BRepMesh from possible crash due to pointer to local variable...
authorabelcsik <abelcsik@graphisoft.com>
Thu, 2 Jul 2015 14:30:57 +0000 (16:30 +0200)
committerbugmaster <bugmaster@opencascade.com>
Wed, 29 Jul 2015 13:18:04 +0000 (16:18 +0300)
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
src/BRepMesh/BRepMesh_EdgeParameterProvider.hxx

index 9277956..c5ae9c1 100644 (file)
@@ -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());
 }
 
 //=======================================================================
index d1699f4..1a83050 100644 (file)
@@ -20,6 +20,7 @@
 #include <Standard_DefineAlloc.hxx>
 #include <Extrema_LocateExtPC.hxx>
 #include <TColStd_HArray1OfReal.hxx>
+#include <BRepAdaptor_Curve.hxx>
 
 class gp_Pnt;
 class TopoDS_Edge;
@@ -63,6 +64,7 @@ private:
   Standard_Real                 myCurParam;
   Standard_Real                 myFoundParam;
 
+  BRepAdaptor_Curve             myCurveAdaptor;
   Extrema_LocateExtPC           myProjector;
 };