0029574: Protection of attributes retrieval against zero ID in Ocaf XML.

//Impacts attributes supporting user defined IDs.
This commit is contained in:
szy
2018-03-19 18:43:04 +03:00
committed by bugmaster
parent 9b74e2071c
commit cbc4faa980
11 changed files with 130 additions and 130 deletions

View File

@@ -89,16 +89,24 @@ Standard_Boolean XmlMDataStd_IntegerArrayDriver::Paste
Handle(TDataStd_IntegerArray)::DownCast(theTarget);
anIntArray->Init(aFirstInd, aLastInd);
// attribute id
Standard_GUID aGUID;
XmlObjMgt_DOMString aGUIDStr = anElement.getAttribute(::AttributeIDString());
if (aGUIDStr.Type() == XmlObjMgt_DOMString::LDOM_NULL)
aGUID = TDataStd_IntegerArray::GetID(); //default case
else
aGUID = Standard_GUID(Standard_CString(aGUIDStr.GetString())); // user defined case
anIntArray->SetID(aGUID);
if(aFirstInd == aLastInd) {
Standard_Integer anInteger;
if(!XmlObjMgt::GetStringValue(anElement).GetInteger( anInteger)) {
if(!XmlObjMgt::GetStringValue(anElement).GetInteger( aValue)) {
TCollection_ExtendedString aMessageString =
TCollection_ExtendedString("Cannot retrieve integer member"
" for IntegerArray attribute as \"");
myMessageDriver->Send (aMessageString, Message_Fail);
return Standard_False;
myMessageDriver->Send (aMessageString, Message_Warning);
aValue = 0;
}
anIntArray->SetValue(aFirstInd, anInteger);
anIntArray->SetValue(aFirstInd, aValue);
}
else {
@@ -113,8 +121,8 @@ Standard_Boolean XmlMDataStd_IntegerArrayDriver::Paste
TCollection_ExtendedString("Cannot retrieve integer member"
" for IntegerArray attribute as \"")
+ aValueStr + "\"";
myMessageDriver->Send (aMessageString, Message_Fail);
return Standard_False;
myMessageDriver->Send (aMessageString, Message_Warning);
aValue = 0;
}
anIntArray->SetValue(ind, aValue);
}
@@ -141,16 +149,6 @@ Standard_Boolean XmlMDataStd_IntegerArrayDriver::Paste
#endif
anIntArray->SetDelta(aDelta);
// attribute id
Standard_GUID aGUID;
XmlObjMgt_DOMString aGUIDStr = anElement.getAttribute(::AttributeIDString());
if (aGUIDStr.Type() == XmlObjMgt_DOMString::LDOM_NULL)
aGUID = TDataStd_IntegerArray::GetID(); //default case
else
aGUID = Standard_GUID(Standard_CString(aGUIDStr.GetString())); // user defined case
anIntArray->SetID(aGUID);
return Standard_True;
}