]> OCCT Git - occt.git/commitdiff
0033414: Modeling Algorithms - Access violation during executing BRepAlgoAPI_Section... CR0_SPE_730
authordkulikov <dkulikov@opencascade.com>
Thu, 22 Jun 2023 15:54:21 +0000 (16:54 +0100)
committerdkulikov <dkulikov@opencascade.com>
Tue, 4 Jul 2023 12:05:11 +0000 (13:05 +0100)
Crush occurred due to the fields
IntTools_SurfaceRangeLocalizeData::myUParams,
IntTools_SurfaceRangeLocalizeData::myVParams
and IntTools_SurfaceRangeLocalizeData::myGridPoints not being checked
for NULL in some cases.
Missing checks are added.

src/IntTools/IntTools_SurfaceRangeLocalizeData.cxx
tests/bugs/modalg_8/bug33414 [new file with mode: 0644]

index 77f6ef697af670bace5360954f90f3f0b467491b..82dc49b72fe363dd9ecd4cb1417a41e444468656 100644 (file)
@@ -226,7 +226,7 @@ const gp_Pnt &IntTools_SurfaceRangeLocalizeData::GetPointInFrame
   Standard_Integer aFrmUInd = theUIndex + myUIndMin - 1;
   Standard_Integer aFrmVInd = theVIndex + myVIndMin - 1;
 
-  if (aFrmUInd > myUIndMax || aFrmVInd > myVIndMax)
+  if (myGridPoints.IsNull() || aFrmUInd > myUIndMax || aFrmVInd > myVIndMax)
     return gp::Origin();
 
   return myGridPoints->Value(aFrmUInd, aFrmVInd);
@@ -237,7 +237,7 @@ Standard_Real IntTools_SurfaceRangeLocalizeData::GetUParamInFrame
 {
   Standard_Integer aFrmInd = theIndex + myUIndMin - 1;
 
-  if (aFrmInd > myUIndMax)
+  if (myUParams.IsNull() || aFrmInd > myUIndMax)
     return Precision::Infinite();
 
   return myUParams->Value(aFrmInd);
@@ -248,7 +248,7 @@ Standard_Real IntTools_SurfaceRangeLocalizeData::GetVParamInFrame
 {
   Standard_Integer aFrmInd = theIndex + myVIndMin - 1;
 
-  if (aFrmInd > myVIndMax)
+  if (myVParams.IsNull() || aFrmInd > myVIndMax)
     return Precision::Infinite();
 
   return myVParams->Value(aFrmInd);
diff --git a/tests/bugs/modalg_8/bug33414 b/tests/bugs/modalg_8/bug33414
new file mode 100644 (file)
index 0000000..89db219
--- /dev/null
@@ -0,0 +1,10 @@
+puts "========================"
+puts "0033414: Modeling Algorithms - Access violation during executing BRepAlgoAPI_Section::Build()"
+puts "========================"
+
+set filepath1 [locate_data_file "CR33414_1.brep"]
+set filepath2 [locate_data_file "CR33414_2.brep"]
+restore ${filepath1} shape1
+restore ${filepath2} shape2
+bsection res shape1 shape2
+# If bsection didn't cause a crash - everything is OK.
\ No newline at end of file