0030594: Data Exchange - access violation within IGESGeom_BSplineCurve constructor
authorkgv <kgv@opencascade.com>
Wed, 20 Mar 2019 06:50:52 +0000 (09:50 +0300)
committerapn <apn@opencascade.com>
Wed, 20 Mar 2019 15:11:41 +0000 (18:11 +0300)
Added NULL check.

src/IGESGeom/IGESGeom_BSplineCurve.cxx
tests/de/iges_2/E4

index 2621a11..8bc79f2 100644 (file)
@@ -40,13 +40,23 @@ IGESGeom_BSplineCurve::IGESGeom_BSplineCurve ()    {  }
    const Standard_Real aUmin, const Standard_Real aUmax,
    const gp_XYZ& aNorm)
 {
-  if (!allPoles.IsNull()) {
-    if (allPoles->Length() != allWeights->Length())
-      throw Standard_DimensionMismatch("IGESGeom_BSplineCurve : Init");
-    if (allKnots->Lower()   != -aDegree || allKnots->Upper()   != anIndex+1 ||
-       allWeights->Upper() !=  anIndex ||
-       allWeights->Lower() != 0        || allPoles->Lower() != 0)
-      throw Standard_DimensionMismatch("IGESGeom_BSplineCurve : Init");
+  if (!allPoles.IsNull())
+  {
+    if (allKnots->Lower() != -aDegree
+     || allKnots->Upper() != anIndex + 1
+     || allPoles->Lower() != 0)
+    {
+      throw Standard_DimensionMismatch ("IGESGeom_BSplineCurve : Init");
+    }
+    if (!allWeights.IsNull())
+    {
+      if (allPoles->Length() != allWeights->Length()
+       || allWeights->Upper() !=  anIndex
+       || allWeights->Lower() != 0)
+      {
+        throw Standard_DimensionMismatch ("IGESGeom_BSplineCurve : Init");
+      }
+    }
   }
 
   theIndex     = anIndex;
index 4295e63..7ac6786 100644 (file)
@@ -6,7 +6,7 @@ puts "TODO CR23096 ALL: COLORS : Faulty"
 set filename igsBF5.igs
 
 set ref_data {
-DATA        : Faulties = 0  ( 0 )  Warnings = 0  ( 1 )  Summary  = 0  ( 1 )
+DATA        : Faulties = 0  ( 2152 )  Warnings = 0  ( 1 )  Summary  = 0  ( 2153 )
 TPSTAT      : Faulties = 0  ( 0 )  Warnings = 17  ( 249 )  Summary  = 17  ( 249 )
 CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
 NBSHAPES    : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 47  ( 47 )