0023909: FPE in BSplSLib::RationalDerivative
authorabv <abv@opencascade.com>
Thu, 18 Apr 2013 07:39:40 +0000 (11:39 +0400)
committerbugmaster <bugmaster@opencascade.com>
Fri, 19 Apr 2013 06:50:53 +0000 (10:50 +0400)
Avoid use of array out of its bounds in BSplSLib::RationalDerivative().

In addition, Resource_Manager is fixed to allow saving with empty resource map (test bugs fclasses bug181_1).

src/BSplSLib/BSplSLib.cxx
src/Resource/Resource_Manager.cxx

index 49cfa76..95b1bb2 100755 (executable)
@@ -165,17 +165,17 @@ void  BSplSLib::RationalDerivative(const Standard_Integer UDeg,
     index_w  = iiM1;
     
     for (jj = 0 ; jj < MinM1 ; jj++) {
-      RArray[index_v] = HomogeneousArray[index_v1]; index_v++; index_v1++;
-      RArray[index_v] = HomogeneousArray[index_v1]; index_v++; index_v1++;
-      RArray[index_v] = HomogeneousArray[index_v1]; index_v++; index_v1++;
-      StoreW[index_w] = HomogeneousArray[index_v1]; index_w++; index_v1++;
+      RArray[index_v++] = HomogeneousArray[index_v1++];
+      RArray[index_v++] = HomogeneousArray[index_v1++];
+      RArray[index_v++] = HomogeneousArray[index_v1++];
+      StoreW[index_w++] = HomogeneousArray[index_v1++];
     }
 
     for (jj = MinM1 ; jj < M1 ; jj++) {
-      RArray[index_v] = 0.0e0                     ; index_v++; index_v1++;
-      RArray[index_v] = 0.0e0                     ; index_v++; index_v1++;
-      RArray[index_v] = 0.0e0                     ; index_v++; index_v1++;
-      StoreW[index_w] = HomogeneousArray[index_v1]; index_w++; index_v1++;
+      RArray[index_v++] = 0.;
+      RArray[index_v++] = 0.;
+      RArray[index_v++] = 0.;
+      StoreW[index_w++] = 0.;
     }
     index_u1 += M4;
     index_u  += M3;
@@ -186,10 +186,10 @@ void  BSplSLib::RationalDerivative(const Standard_Integer UDeg,
   for (ii = MinN1 ; ii < N1 ; ii++) {
     
     for (jj = 0 ; jj < M1 ; jj++) {  
-      RArray[index_v] = 0.0e0; index_v++;
-      RArray[index_v] = 0.0e0; index_v++;
-      RArray[index_v] = 0.0e0; index_v++;
-      StoreW[index_w] = 0.0e0; index_w++;
+      RArray[index_v++] = 0.0e0;
+      RArray[index_v++] = 0.0e0;
+      RArray[index_v++] = 0.0e0;
+      StoreW[index_w++] = 0.0e0;
     }
   } 
 
index 861c551..5b16953 100755 (executable)
@@ -294,7 +294,7 @@ Standard_Boolean Resource_Manager::Save() const
 
   Resource_LexicalCompare Comp;
   Standard_Integer NbKey = myUserMap.Extent();
-  TColStd_Array1OfAsciiString KeyArray(1,NbKey);
+  TColStd_Array1OfAsciiString KeyArray(1,NbKey+1); // 1 more item is added to allow saving empty resource
   Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString Iter(myUserMap);
 
   for ( Index = 1; Iter.More(); Iter.Next())