0030101: Application Framework - A mistake reading a RealArray attribute with too...
authorvro <vro@opencascade.com>
Mon, 14 Oct 2019 07:29:54 +0000 (10:29 +0300)
committerbugmaster <bugmaster@opencascade.com>
Wed, 19 Feb 2020 16:34:10 +0000 (19:34 +0300)
A case of reading of a very small value was skipped, for example: 2.1219957909652723e-314.
Fixed in XmlMDataStd_RealArrayDriver.cxx and XmlMDataStd_RealListDriver.cxx

// A test file bug29452.xml is extended to check this skipped case.

src/XmlMDataStd/XmlMDataStd_RealArrayDriver.cxx
src/XmlMDataStd/XmlMDataStd_RealListDriver.cxx
tests/bugs/caf/bug29452

index 04fc0c9..ddc296a 100644 (file)
@@ -128,8 +128,12 @@ Standard_Boolean XmlMDataStd_RealArrayDriver::Paste
                                      " for RealArray attribute as \"")
             + aValueStr + "\"";
         myMessageDriver->Send (aMessageString, Message_Warning);
+        // skip the first space, if exists
+        while (*aValueStr != 0 && IsSpace (*aValueStr))
+          ++aValueStr;
         // skip to the next space separator
-        while (*aValueStr != 0 && ! IsSpace (*aValueStr)) ++aValueStr;
+        while (*aValueStr != 0 && ! IsSpace (*aValueStr))
+          ++aValueStr;
       }
       aRealArray->SetValue(ind, aValue);
     }
index 844f926..b0eb2a1 100644 (file)
@@ -126,8 +126,12 @@ Standard_Boolean XmlMDataStd_RealListDriver::Paste(const XmlObjMgt_Persistent&
                                      " for RealList attribute as \"")
             + aValueStr + "\"";
         myMessageDriver->Send(aMessageString, Message_Warning);
+        // skip the first space, if exists
+        while (*aValueStr != 0 && IsSpace (*aValueStr))
+          ++aValueStr;
         // skip to the next space separator
-        while (*aValueStr != 0 && ! IsSpace (*aValueStr)) ++aValueStr;
+        while (*aValueStr != 0 && !IsSpace (*aValueStr))
+          ++aValueStr;
       }
       aRealList->Append(aValue);
     }
index fc4d6a5..df575e5 100644 (file)
@@ -18,6 +18,7 @@ set res [Open $file D]
 set real [GetReal D 0:1]
 set rlst [GetRealList D 0:1]
 set rarr [GetRealArray D 0:1]
+set rarr2 [GetRealArray D 0:2]
 
 # Check for read values
 checkreal "Real value" [lindex $rlst 0] 1.1 0 1e-15
@@ -25,6 +26,9 @@ checkreal "Real value" [lindex $rlst 2] 3.3 0 1e-15
 checkreal "Real value" [lindex $rarr 0] 0.111 0 1e-15
 checkreal "Real value" [lindex $rarr 3] 123. 0 1e-15
 checkreal "Real value" [lindex $rarr 4] 3.14e12 0 1e-15
+checkreal "Real value" [lindex $rarr2 0] 2 0 1e-15
+checkreal "Real value" [lindex $rarr2 1] 2.1219957909652723e-314 0 1e-15
+checkreal "Real value" [lindex $rarr2 2] 5 0 1e-15
 foreach inf [list $real [lindex $rlst 3]] {
   if { [string compare "$inf" "inf"] && 
        [string compare "$inf" "infinity"] &&