0031292: Data Exchange - SIGSEGV on reading STEP file with references to invalid entities

Changes:

- in StepData_StepReaderData::ReadEntity, make sure that entity handle is not null before calling IsKind() of it.

- in StepData_StepReaderData::SetEntityNumbers, do not invert the sign of entity number of referenced parameter if the second pass is not required. Otherwise, the number -1 (obviously invalid) becomes 1 (invalid, but not obviously) without further correction of it.

- in StepData_UndefinedEntity::ReadRecord, consider the case when the entity number is positive but refers to non-existing entity. In this case literal value will be used instead of null entity for the problematic parameter.
This commit is contained in:
msv
2020-01-10 20:59:51 +03:00
committed by bugmaster
parent 0c061f3d9d
commit ef59b5e064
3 changed files with 22 additions and 7 deletions

View File

@@ -67,13 +67,16 @@ void StepData_UndefinedEntity::ReadRecord(const Handle(StepData_StepReaderData)&
Standard_Integer nume = 0;
if (partyp == Interface_ParamIdent) {
nume = SR->ParamNumber(num,i);
if (nume > 0) {
anent = SR->BoundEntity(nume);
if (anent.IsNull()) {
nume = 0;
}
}
if (nume <= 0) {
ach->AddFail("A reference to another entity is unresolved");
partyp = Interface_ParamVoid;
}
else {
anent = SR->BoundEntity(nume);
}
}
else if (partyp == Interface_ParamSub) {
nume = SR->ParamNumber(num,i);