Tue, 06/04/2024 - 21:32
Forums:
Hi,
As a FreeCAD contributor I tracked a crash up to src/BRep/BRep_Tool.cxx and discovered that null pointers are not handle in many function.
For example:
Handle(Geom2d_Curve) BRep_Tool::CurveOnSurface(const TopoDS_Edge& E,
const Handle(Geom_Surface)& S,
const TopLoc_Location& L,
Standard_Real& First,
Standard_Real& Last,
Standard_Boolean* theIsStored)
{
TopLoc_Location loc = L.Predivided(E.Location());
Standard_Boolean Eisreversed = (E.Orientation() == TopAbs_REVERSED);
if (theIsStored)
*theIsStored = Standard_True;
// find the representation
const BRep_TEdge* TE = static_cast<const BRep_TEdge*>(E.TShape().get());
BRep_ListIteratorOfListOfCurveRepresentation itcr(TE->Curves());
while (itcr.More()) {
const Handle(BRep_CurveRepresentation)& cr = itcr.Value();
if (cr->IsCurveOnSurface(S,loc)) {
const BRep_GCurve* GC = static_cast<const BRep_GCurve*>(cr.get());
GC->Range(First,Last);
if (GC->IsCurveOnClosedSurface() && Eisreversed)
return GC->PCurve2();
else
return GC->PCurve();
}
itcr.Next();
}
// Curve is not found. Try projection on plane
if (theIsStored)
*theIsStored = Standard_False;
return CurveOnPlane(E, S, L, First, Last);
}
can crash at BRep_ListIteratorOfListOfCurveRepresentation itcr(TE->Curves());
if E
shape is not set correctly.
Such crash occurs when using BRepFilletAPI_MakeChamfer
as shown in this FreeCAD issue.
I still have a PR to propose and wait for a contributor access after I signed the CLA.
Tue, 06/04/2024 - 22:25
Hello, it is a dev forum. If you have bugs or code changes you are free to create ticket into bug tracker and after CLA signing push your code.
But unfortunately, it is not possible just to check all code and update every code line to handle not correct behavior. It is important to write stable and tested code, but it is almost not possible to update all OCCT :(
If someone share the failed scenario(test scenario) it a way to fix specific issue.
OCCT Team have no ability to monitory any issue from FreeCAD or other software based on OCCT from external bug trackers :(
But we plan to simplify workflow and make deep integration with GitHub.
Best regards, Dmitrii.
Thu, 06/06/2024 - 12:41
BRep_Tool
provides methods to access properties of a givenTopoDS_Shape
. Passing NULL shape to the tool makes no sense and contradicts to design of this tool (it's like calling properties of NULL smart pointer).NULL checks are expected to be put in the code calling
BRep_Tool
methods. Hense, the bug should be fixed there (like somewhere inBRepFilletAPI_MakeChamfer
, but this could be done only after reproducing the problem and localizing issue in the algorithm)Thu, 06/06/2024 - 13:10
Thank you two for the answers. I'll try to code a fail soon.
Mon, 06/17/2024 - 13:56
FYI the issue with a crashtest is here: https://tracker.dev.opencascade.org/view.php?id=33743