]> OCCT Git - occt.git/commitdiff
0033414: Modeling Algorithms - Access violation during executing BRepAlgoAPI_Section... CR0-WEEK-26 IR-2023-06-30
authordkulikov <dkulikov@opencascade.com>
Thu, 22 Jun 2023 15:54:21 +0000 (16:54 +0100)
committerjokwajeb <jokwajeb@opencascade.com>
Fri, 30 Jun 2023 18:22:48 +0000 (19:22 +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 4e13d4ad4cc265ea07b491cb7c3ad63b7df3e8c0..23c0a05e4a398977f3f3b53558167de31a5c567f 100644 (file)
@@ -224,7 +224,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);
@@ -235,7 +235,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);
@@ -246,7 +246,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