From: vro Date: Tue, 21 Jan 2020 08:46:45 +0000 (+0300) Subject: 0031310: Application Framework - A document with a reference array attribute crashes... X-Git-Tag: V7_5_0_beta~82 X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=59e11a2f751f3b7b2e03b20622469dfb087ec87a;p=occt.git 0031310: Application Framework - A document with a reference array attribute crashes on attempt to save on disk --- diff --git a/src/XmlMDataStd/XmlMDataStd_ReferenceArrayDriver.cxx b/src/XmlMDataStd/XmlMDataStd_ReferenceArrayDriver.cxx index 85b880f5ef..e7b41a0b5e 100644 --- a/src/XmlMDataStd/XmlMDataStd_ReferenceArrayDriver.cxx +++ b/src/XmlMDataStd/XmlMDataStd_ReferenceArrayDriver.cxx @@ -117,26 +117,28 @@ Standard_Boolean XmlMDataStd_ReferenceArrayDriver::Paste(const XmlObjMgt_Persist if (aValueStr == NULL) { myMessageDriver->Send ("Cannot retrieve reference string from element", Message_Fail); - return Standard_False; } - TCollection_AsciiString anEntry; - if (XmlObjMgt::GetTagEntryString (aValueStr, anEntry) == Standard_False) - { - TCollection_ExtendedString aMessage = - TCollection_ExtendedString ("Cannot retrieve reference from \"") - + aValueStr + '\"'; - myMessageDriver->Send (aMessage, Message_Fail); - return Standard_False; - } - // Find label by entry - TDF_Label tLab; // Null label. - if (anEntry.Length() > 0) + else { - TDF_Tool::Label(aReferenceArray->Label().Data(), anEntry, tLab, Standard_True); + TCollection_AsciiString anEntry; + if (XmlObjMgt::GetTagEntryString(aValueStr, anEntry) == Standard_False) + { + TCollection_ExtendedString aMessage = + TCollection_ExtendedString("Cannot retrieve reference from \"") + + aValueStr + '\"'; + myMessageDriver->Send(aMessage, Message_Fail); + return Standard_False; + } + // Find label by entry + TDF_Label tLab; // Null label. + if (anEntry.Length() > 0) + { + TDF_Tool::Label(aReferenceArray->Label().Data(), anEntry, tLab, Standard_True); + } + aReferenceArray->SetValue(i++, tLab); + aCurNode = aCurElement->getNextSibling(); + aCurElement = (LDOM_Element*)&aCurNode; } - aReferenceArray->SetValue(i++, tLab); - aCurNode = aCurElement->getNextSibling(); - aCurElement = (LDOM_Element*)&aCurNode; } // Last reference @@ -144,24 +146,26 @@ Standard_Boolean XmlMDataStd_ReferenceArrayDriver::Paste(const XmlObjMgt_Persist if (aValueStr == NULL) { myMessageDriver->Send ("Cannot retrieve reference string from element", Message_Fail); - return Standard_False; } - TCollection_AsciiString anEntry; - if (XmlObjMgt::GetTagEntryString (aValueStr, anEntry) == Standard_False) - { - TCollection_ExtendedString aMessage = - TCollection_ExtendedString ("Cannot retrieve reference from \"") - + aValueStr + '\"'; - myMessageDriver->Send (aMessage, Message_Fail); - return Standard_False; - } - // Find label by entry - TDF_Label tLab; // Null label. - if (anEntry.Length() > 0) + else { - TDF_Tool::Label(aReferenceArray->Label().Data(), anEntry, tLab, Standard_True); + TCollection_AsciiString anEntry; + if (XmlObjMgt::GetTagEntryString(aValueStr, anEntry) == Standard_False) + { + TCollection_ExtendedString aMessage = + TCollection_ExtendedString("Cannot retrieve reference from \"") + + aValueStr + '\"'; + myMessageDriver->Send(aMessage, Message_Fail); + return Standard_False; + } + // Find label by entry + TDF_Label tLab; // Null label. + if (anEntry.Length() > 0) + { + TDF_Tool::Label(aReferenceArray->Label().Data(), anEntry, tLab, Standard_True); + } + aReferenceArray->SetValue(i, tLab); } - aReferenceArray->SetValue(i, tLab); return Standard_True; } @@ -192,11 +196,12 @@ void XmlMDataStd_ReferenceArrayDriver::Paste(const Handle(TDF_Attribute)& theSou for (Standard_Integer i = aL; i <= anU; i++) { - if (L.IsDescendant(aReferenceArray->Value(i).Root())) + const TDF_Label& label = aReferenceArray->Value(i); + if (!label.IsNull() && L.IsDescendant(label.Root())) { // Internal reference TCollection_AsciiString anEntry; - TDF_Tool::Entry(aReferenceArray->Value(i), anEntry); + TDF_Tool::Entry(label, anEntry); XmlObjMgt_DOMString aDOMString; XmlObjMgt::SetTagEntryString (aDOMString, anEntry);