]> OCCT Git - occt-copy.git/commitdiff
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)
committerabv <abv@opencascade.com>
Wed, 2 Sep 2015 11:38:43 +0000 (14:38 +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 927795635d1e1a017f96ea0580676d59dd36d3bc..c5ae9c103637ffe787e29be6600268516b004d07 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 1a250db71f3c4e4037a93534ba6e883846584d49..7d92fef5d96e01c430a300edc19d52f569202ec9 100644 (file)
@@ -20,6 +20,7 @@
 #include <Standard_DefineAlloc.hxx>
 #include <Extrema_LocateExtPC.hxx>
 #include <Handle_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;
 };