From 692decba26f4cb93f9ce2d1aafd658f104d9bdc4 Mon Sep 17 00:00:00 2001 From: dpasukhi Date: Sat, 17 Oct 2020 16:21:51 +0300 Subject: [PATCH] 0031825: Data Exchange, STEP - NULL dereference while re-exporting model with empty Datum description Fix adding name and description of the datum --- src/STEPCAFControl/STEPCAFControl_Reader.cxx | 4 +- src/STEPCAFControl/STEPCAFControl_Writer.cxx | 6 ++- tests/bugs/step/bug31825 | 40 ++++++++++++++++++++ 3 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 tests/bugs/step/bug31825 diff --git a/src/STEPCAFControl/STEPCAFControl_Reader.cxx b/src/STEPCAFControl/STEPCAFControl_Reader.cxx index 146fed35c8..029d9f4d0d 100644 --- a/src/STEPCAFControl/STEPCAFControl_Reader.cxx +++ b/src/STEPCAFControl/STEPCAFControl_Reader.cxx @@ -2527,7 +2527,7 @@ Standard_Boolean STEPCAFControl_Reader::setDatumToXCAF(const Handle(StepDimTol_D // Create datum target object if (isValidDT) { - TDF_Label aDatL = aDGTTool->AddDatum(); + TDF_Label aDatL = aDGTTool->AddDatum(theDat->Name(), theDat->Description(), theDat->Identification()); myGDTMap.Bind(aDT, aDatL); aDGTTool->Lock(aDatL); aDat = XCAFDoc_Datum::Set(aDatL); @@ -2549,7 +2549,7 @@ Standard_Boolean STEPCAFControl_Reader::setDatumToXCAF(const Handle(StepDimTol_D if (aShapeLabels.Length() > 0 || !isExistDatumTarget) { // Create object for datum - TDF_Label aDatL = aDGTTool->AddDatum(); + TDF_Label aDatL = aDGTTool->AddDatum(theDat->Name(), theDat->Description(), theDat->Identification()); myGDTMap.Bind(theDat, aDatL); // bind datum label with all reference datum_feature entities for (Standard_Integer i = 1; i <= aSAs.Length(); i++) { diff --git a/src/STEPCAFControl/STEPCAFControl_Writer.cxx b/src/STEPCAFControl/STEPCAFControl_Writer.cxx index a988be2806..30646bc99b 100644 --- a/src/STEPCAFControl/STEPCAFControl_Writer.cxx +++ b/src/STEPCAFControl/STEPCAFControl_Writer.cxx @@ -3466,8 +3466,12 @@ Standard_Boolean STEPCAFControl_Writer::WriteDGTs (const Handle(XSControl_WorkSe Handle(XCAFDoc_Datum) DatumAttr; if(!DatumL.FindAttribute(XCAFDoc_Datum::GetID(),DatumAttr)) continue; Handle(TCollection_HAsciiString) aName = DatumAttr->GetName(); - Handle(TCollection_HAsciiString) aDescription = DatumAttr->GetDescription(); Handle(TCollection_HAsciiString) anIdentification = DatumAttr->GetIdentification(); + Handle(TCollection_HAsciiString) aDescription = DatumAttr->GetDescription(); + if (aDescription.IsNull()) + { + aDescription = new TCollection_HAsciiString(); + } Handle(StepDimTol_DatumFeature) DF = new StepDimTol_DatumFeature; Handle(StepDimTol_Datum) aDatum = new StepDimTol_Datum; DF->Init(aName, new TCollection_HAsciiString, PDS, StepData_LTrue); diff --git a/tests/bugs/step/bug31825 b/tests/bugs/step/bug31825 new file mode 100644 index 0000000000..b05c96255c --- /dev/null +++ b/tests/bugs/step/bug31825 @@ -0,0 +1,40 @@ +puts "================" +puts "0031825: Data Exchange, STEP - NULL dereference while re-exporting model with empty Datum description" +puts "================" +puts "" + +pload OCAF +param write.step.schema AP242DIS +catch { Close D_First } +catch { Close D_Sec } + +# Read file +set Path ${imagedir}/${casename}.stp +ReadStep D_First [locate_data_file bug26689_nist_ctc_04_asme1_ap242.stp] +set baseDGTDump [XDumpNbDGTs D_First f] + +WriteStep D_First $Path +ReadStep D_Sec $Path +file delete $Path +set newDGTDump [XDumpNbDGTs D_Sec f] +XGetOneShape res D_Sec + +# Checking +checkshape res +checknbshapes res -face 518 -wire 623 -compound 1 + +set isOK 1 +set nb_ref [llength $newDGTDump] +for { set i 0 } { $i < $nb_ref } { incr i } { + set refstr [lindex $baseDGTDump $i] + set curstr [lindex $newDGTDump $i] + if {[string equal $refstr $curstr] == 0} { + set isOK 0 + } +} +if {$isOK == 0} { + puts "Error: wrong export DGT and PMI" +} + +# set default parameter +param write.step.schema AP214IS