View Issue Details

IDProjectCategoryView StatusLast Update
0029979CommunityOCCT:Data Exchangepublic2019-09-07 16:27
Reporterborm Assigned Tobugmaster  
PrioritynormalSeveritycrash 
Status closedResolutionfixed 
PlatformWindowsOSVC++ 2015 
Product Version7.2.0 
Target Version7.4.0Fixed in Version7.4.0 
Summary0029979: Data Exchange - Crash by reading STEP file
DescriptionHi, the OCCT crashes by reading the STEP file:

The crash callstack is:
>	TKSTEPBase.dll!StepShape_EdgeCurve::EdgeGeometry() Line 47	C++
     TKSTEP.dll!StepToTopoDS_TranslateEdgeLoop::Init(const opencascade::handle<StepShape_FaceBound> & FaceBound, const TopoDS_Face & Face, const opencascade::handle<Geom_Surface> & GeomSurf, const opencascade::handle<StepGeom_Surface> & StepSurf, const bool sameSense, StepToTopoDS_Tool & aTool, StepToTopoDS_NMTool & NMTool) Line 296	C++
     TKSTEP.dll!StepToTopoDS_TranslateFace::Init(const opencascade::handle<StepShape_FaceSurface> & FS, StepToTopoDS_Tool & aTool, StepToTopoDS_NMTool & NMTool) Line 330	C++
     TKSTEP.dll!StepToTopoDS_TranslateShell::Init(const opencascade::handle<StepShape_ConnectedFaceSet> & CFS, StepToTopoDS_Tool & aTool, StepToTopoDS_NMTool & NMTool) Line 93	C++
     TKSTEP.dll!StepToTopoDS_Builder::Init(const opencascade::handle<StepShape_ManifoldSolidBrep> & aManifoldSolid, const opencascade::handle<Transfer_TransientProcess> & TP) Line 210	C++
     TKSTEP.dll!STEPControl_ActorRead::TransferEntity(const opencascade::handle<StepGeom_GeometricRepresentationItem> & start, const opencascade::handle<Transfer_TransientProcess> & TP, const bool isManifold) Line 1229	C++
     TKSTEP.dll!STEPControl_ActorRead::TransferShape(const opencascade::handle<Standard_Transient> & start, const opencascade::handle<Transfer_TransientProcess> & TP, const bool isManifold) Line 1499	C++
     TKSTEP.dll!STEPControl_ActorRead::TransferEntity(const opencascade::handle<StepShape_ShapeRepresentation> & sr, const opencascade::handle<Transfer_TransientProcess> & TP, bool & isBound) Line 817	C++
     TKSTEP.dll!STEPControl_ActorRead::TransferEntity(const opencascade::handle<StepRepr_ShapeRepresentationRelationship> & und, const opencascade::handle<Transfer_TransientProcess> & TP, const int nbrep) Line 1020	C++
     TKSTEP.dll!STEPControl_ActorRead::TransferEntity(const opencascade::handle<StepBasic_ProductDefinition> & PD, const opencascade::handle<Transfer_TransientProcess> & TP) Line 628	C++
     TKSTEP.dll!STEPControl_ActorRead::TransferEntity(const opencascade::handle<StepRepr_NextAssemblyUsageOccurrence> & NAUO, const opencascade::handle<Transfer_TransientProcess> & TP) Line 717	C++
     TKSTEP.dll!STEPControl_ActorRead::TransferEntity(const opencascade::handle<StepBasic_ProductDefinition> & PD, const opencascade::handle<Transfer_TransientProcess> & TP) Line 549	C++
     TKSTEP.dll!STEPControl_ActorRead::TransferShape(const opencascade::handle<Standard_Transient> & start, const opencascade::handle<Transfer_TransientProcess> & TP, const bool isManifold) Line 1460	C++
     TKSTEP.dll!STEPControl_ActorRead::Transfer(const opencascade::handle<Standard_Transient> & start, const opencascade::handle<Transfer_TransientProcess> & TP) Line 300	C++
     TKXSBase.dll!Transfer_ActorOfTransientProcess::Transferring(const opencascade::handle<Standard_Transient> & ent, const opencascade::handle<Transfer_ProcessForTransient> & TP) Line 40	C++
     TKXSBase.dll!Transfer_ProcessForTransient::TransferProduct(const opencascade::handle<Standard_Transient> & start) Line 1160	C++
     TKXSBase.dll!Transfer_ProcessForTransient::Transferring(const opencascade::handle<Standard_Transient> & start) Line 1067	C++
     TKXSBase.dll!Transfer_ProcessForTransient::Transfer(const opencascade::handle<Standard_Transient> & start) Line 1189	C++
     TKXSBase.dll!Transfer_TransferOutput::Transfer(const opencascade::handle<Standard_Transient> & obj) Line 79	C++
     TKXSBase.dll!XSControl_TransferReader::TransferOne(const opencascade::handle<Standard_Transient> & ent, const bool rec) Line 816	C++
     TKXSBase.dll!XSControl_Reader::TransferEntity(const opencascade::handle<Standard_Transient> & start) Line 242	C++
     TKXSBase.dll!XSControl_Reader::TransferOneRoot(const int num) Line 216	C++
     TKXDESTEP.dll!STEPCAFControl_Reader::Transfer(STEPControl_Reader & reader, const int nroot, opencascade::handle<TDocStd_Document> & doc, NCollection_Sequence<TDF_Label> & Lseq, const bool asOne) Line 522	C++
     TKXDESTEP.dll!STEPCAFControl_Reader::Transfer(opencascade::handle<TDocStd_Document> & doc) Line 404	C++
     TKXDESTEP.dll!STEPCAFControl_Reader::Perform(const char * const filename, opencascade::handle<TDocStd_Document> & doc) Line 418	C++
Steps To ReproduceThe following code produces a crash:

Handle(TDocStd_Document) pOcctDoc;
Handle(XCAFApp_Application) pOcctApp = XCAFApp_Application::GetApplication();
pOcctApp->NewDocument("MDTV-XCAF", pOcctDoc);

STEPCAFControl_Reader stepReader;
stepReader.SetColorMode(Standard_True);
stepReader.SetNameMode(Standard_True);
const auto result = stepReader.Perform(fileName, pOcctDoc);
TagsNo tags attached.
Test case numberbugs/step/bug29979

Attached Files

  • Firetherm_12.7z (9,659,229 bytes)

Relationships

related to 0030541 closedkgv Open CASCADE Draw Harness - impossible disabling signals 

Activities

kgv

2019-03-03 00:04

developer   ~0082542

Referred file is inaccessible.

borm

2019-03-05 18:59

reporter   ~0082701

Hi, the link works again. Please download the file as the link expires on 31.3.2019 again. Thanks.

kgv

2019-03-05 23:05

developer   ~0082706

Last edited: 2019-03-05 23:06

I'm unable reproducing the crash with the following script:
pload ALL
ReadStep D "Firetherm 12.STEP"
XShow D
vfit



Are there any extra input requisites?
Or maybe wrong OCCT version is specified?

borm

2019-03-06 11:36

reporter   ~0082723

I'm not aware of the script code so I can comment just on the C++ code. The STEPCAFControl_Reader has to be used and the color and name mode must be set to true to reproduce the crash. I can still reproduce it with the OCCT 7.2.0 and I get the same crash callstack.

kgv

2019-03-06 11:45

developer   ~0082724

OK, your application doesn't setup signals.

void StepToTopoDS_TranslateEdgeLoop::Init(
...
  for (j=1; j<=NbEdge; j++ ) {
    OrEdge1  = EL->EdgeListValue(j);
    StepEdge = OrEdge1->EdgeElement();
//    if(j>1 && StepEdge == StepEdge1) theSame++; //gka 15.12.98
    StepEdge1 = StepEdge;                         //
    Handle(StepShape_EdgeCurve) EC = Handle(StepShape_EdgeCurve)::DownCast(StepEdge);
    Handle(StepGeom_Curve) C = EC->EdgeGeometry();

EC becomes NULL here, because second edge in the loop is of type StepShape_OrientedEdge, not StepShape_EdgeCurve.

kgv

2019-03-06 11:55

developer  

Firetherm_12.7z (9,659,229 bytes)

borm

2019-03-06 11:56

reporter   ~0082725

Can you please elaborate more on your comment? What does it mean that the application doesn't setup signal? What we need to do?

Still even if we don't setup the signals the code should not crash.

kgv

2019-03-20 08:31

developer   ~0083122

Existing test case bugs/step/bug26451 can be used for reproducing the issue.

abv

2019-07-09 14:44

manager   ~0085507

Last edited: 2019-07-09 15:10

Attached STEP file has several problems:

1. List of faces in CLOSED_SHELL # 103322 include 8 entities which are not faces, for instance, # 487310 which is ORIENTED_EDGE. Wrong entities in the list are those with indices 116, 123, 192, 230, 243, 289, 345, 399.

2. 10 entities of type ORIENTED_EDGE (# 148, # 333389, ...) refer to another ORIENTED_EDGE instead of EDGE_CURVE, which violates requirement WR1 or ORIENTED_EDGE entity.

Problem 2 is the one that causes exception (current code assumes that ORIENTED_EDGE contains EDGE_CURVE). Work-around against this problem can be implemented.

git

2019-07-09 14:54

administrator   ~0085509

Branch CR29979 has been created by abv.

SHA-1: 585970baa7a2647c63932b726bc3d1c7aa61201e


Detailed log of new commits:

Author: abv
Date: Tue Jul 9 14:47:21 2019 +0300

    0029979: Data Exchange - Crash by reading STEP file
    
    Added work-around against specific problem of ORIENTED_EDGE referring to another ORIENTED_EDGE instead of EDGE_CURVE.
    Added handling of edges with null EDGE_CURVE, to allow passing the translation further instead of exception.
    
    Off-topic: text of warning message is corrected in genproj

git

2019-07-09 16:41

administrator   ~0085518

Branch CR29979 has been updated by abv.

SHA-1: ec318219d7b6b153e18e447154751ee89ddca914


Detailed log of new commits:

Author: abv
Date: Tue Jul 9 16:40:15 2019 +0300

    Added test bugs step bug29979

abv

2019-07-09 16:50

manager   ~0085519

Fix is pushed to CR29979, please review. Tests passed with no differences, see Jenkins job CR29979-master-abv. Note that test bugs step bug26451 is not related to this problem (even if similar errors are reported).

gka

2019-09-06 18:51

developer   ~0086913

Branch CR29979 was reviewed

git

2019-09-07 16:27

administrator   ~0086952

Branch CR29979 has been deleted by inv.

SHA-1: ec318219d7b6b153e18e447154751ee89ddca914

Related Changesets

occt: master fa68c1e1

2019-07-09 11:47:21

abv


Committer: bugmaster Details Diff
0029979: Data Exchange - Crash by reading STEP file

Added work-around against specific problem of ORIENTED_EDGE referring to another ORIENTED_EDGE instead of EDGE_CURVE.
Added handling of edges with null EDGE_CURVE, to allow passing the translation further instead of exception.

Off-topic: text of warning message is corrected in genproj

Added test bugs step bug29979
Affected Issues
0029979
mod - adm/genproj.tcl Diff File
mod - src/StepToTopoDS/StepToTopoDS_TranslateEdgeLoop.cxx Diff File
add - tests/bugs/step/bug29979 Diff File

Issue History

Date Modified Username Field Change
2018-07-23 18:11 borm New Issue
2018-07-23 18:11 borm Assigned To => gka
2019-03-03 00:04 kgv Note Added: 0082542
2019-03-03 00:04 kgv Assigned To gka => borm
2019-03-03 00:04 kgv Status new => feedback
2019-03-05 18:59 borm Note Added: 0082701
2019-03-05 23:05 kgv Note Added: 0082706
2019-03-05 23:06 kgv Note Edited: 0082706
2019-03-06 10:25 kgv Resolution open => unable to reproduce
2019-03-06 11:36 borm Note Added: 0082723
2019-03-06 11:45 kgv Note Added: 0082724
2019-03-06 11:45 kgv Assigned To borm => gka
2019-03-06 11:45 kgv Status feedback => assigned
2019-03-06 11:45 kgv Resolution unable to reproduce => open
2019-03-06 11:45 kgv Target Version => 7.5.0
2019-03-06 11:52 kgv Relationship added related to 0030541
2019-03-06 11:53 kgv Summary Crash by reading STEP file => Data Exchange - Crash by reading STEP file
2019-03-06 11:55 kgv File Added: Firetherm_12.7z
2019-03-06 11:56 kgv Description Updated
2019-03-06 11:56 kgv Steps to Reproduce Updated
2019-03-06 11:56 borm Note Added: 0082725
2019-03-20 08:31 kgv Note Added: 0083122
2019-03-20 08:31 kgv Steps to Reproduce Updated
2019-07-09 14:44 abv Note Added: 0085507
2019-07-09 14:44 abv Target Version 7.5.0 => 7.4.0
2019-07-09 14:54 git Note Added: 0085509
2019-07-09 15:10 abv Note Edited: 0085507
2019-07-09 16:41 git Note Added: 0085518
2019-07-09 16:50 abv Note Added: 0085519
2019-07-09 16:50 abv Status assigned => resolved
2019-07-09 16:50 abv Steps to Reproduce Updated
2019-09-06 18:51 gka Note Added: 0086913
2019-09-06 18:51 gka Assigned To gka => bugmaster
2019-09-06 18:51 gka Status resolved => reviewed
2019-09-06 18:56 bugmaster Test case number => bugs/step/bug29979
2019-09-07 11:38 bugmaster Changeset attached => occt master fa68c1e1
2019-09-07 11:38 bugmaster Status reviewed => verified
2019-09-07 11:38 bugmaster Resolution open => fixed
2019-09-07 16:27 git Note Added: 0086952