diff --git a/src/XmlObjMgt/XmlObjMgt.cxx b/src/XmlObjMgt/XmlObjMgt.cxx index 7d8a67fc00..5544f2228b 100644 --- a/src/XmlObjMgt/XmlObjMgt.cxx +++ b/src/XmlObjMgt/XmlObjMgt.cxx @@ -190,10 +190,10 @@ Standard_Boolean XmlObjMgt::GetTagEntryString errno = 0; char * aPtr; long aTagValue = strtol (&aSource[1], &aPtr, 10); - if (aTagValue <= 0 || aPtr[0] != aQuote || + Standard_Integer aLen = (Standard_Integer)(aPtr - &aSource[1]); + if (aTagValue < 0 || aLen == 0 || aPtr[0] != aQuote || errno == ERANGE || errno == EINVAL) return Standard_False; - Standard_Integer aLen = (Standard_Integer)(aPtr - &aSource[1]); aTagEntryPtr[0] = ':'; memcpy (&aTagEntryPtr[1], &aSource[1], aLen); aTagEntryPtr += (aLen + 1); @@ -246,9 +246,10 @@ void XmlObjMgt::SetTagEntryString (XmlObjMgt_DOMString& theTarget, errno = 0; char * ptr; long aTagValue = strtol (aTagEntry, &ptr, 10); - if (aTagValue <= 0 || errno == ERANGE || errno == EINVAL) - return; // error Standard_Integer aTagSize = (Standard_Integer)(ptr - aTagEntry); + if (aTagValue < 0 || aTagSize == 0 || + errno == ERANGE || errno == EINVAL) + return; // error // Add one XPath level to the expression in aTarget memcpy (&aTargetPtr[0], aRefElem1, anElem1Size); diff --git a/tests/bugs/caf/bug27187 b/tests/bugs/caf/bug27187 new file mode 100644 index 0000000000..fcf59c0509 --- /dev/null +++ b/tests/bugs/caf/bug27187 @@ -0,0 +1,24 @@ +puts "===========" +puts "OCC27187" +puts "===========" +puts "" +################################# +# XmlMFunction_ScopeDriver fail to read and write function label including 0 tag in label path. +################################# + +NewDocument Doc XmlOcaf +# label that contains "0" tag not only in "Root" +set Lab 0:1:4:9999:0:1:4:2001:4:2001:4:1:4:1001:4:1001 +Label Doc $Lab +SetReference Doc 0:1 $Lab + +set aFileName ${imagedir}/${casename}_doc.xml +SaveAs Doc ${aFileName} +Close Doc + +# check that the reference is correctly restored +Open ${aFileName} Doc +if {[GetReference Doc 0:1] != $Lab} { + puts "Error: restored Reference attribute value is bad '[GetReference Doc 0:1]'" +} +Close Doc