0030315: Data Exchange - Crash reading views during STEP import.
authorika <ika@opencascade.com>
Fri, 26 Oct 2018 15:04:10 +0000 (18:04 +0300)
committerika <ika@opencascade.com>
Mon, 29 Oct 2018 08:21:20 +0000 (11:21 +0300)
Add NULL check to protect against crash.

src/STEPCAFControl/STEPCAFControl_Reader.cxx
tests/gdt/view/B7 [new file with mode: 0644]

index cdd20cb..5d19346 100644 (file)
@@ -4117,6 +4117,10 @@ Handle(TCollection_HAsciiString) buildClippingPlanes(const Handle(StepGeom_Geome
   if (theClippingCameraModel->IsKind(STANDARD_TYPE(StepVisual_CameraModelD3MultiClipping))) {
     Handle(StepVisual_CameraModelD3MultiClipping) aCameraModel =
       Handle(StepVisual_CameraModelD3MultiClipping)::DownCast(theClippingCameraModel);
+
+    if (aCameraModel->ShapeClipping().IsNull())
+      return anExpression;
+
     // Root of clipping planes tree
     if (aCameraModel->ShapeClipping()->Length() == 1) {
       Handle(StepVisual_CameraModelD3MultiClippingUnion) aCameraModelUnion =
diff --git a/tests/gdt/view/B7 b/tests/gdt/view/B7
new file mode 100644 (file)
index 0000000..b585a63
--- /dev/null
@@ -0,0 +1,9 @@
+set filename bug30315.stp
+
+set ref_data {
+D_First 0:1:7:1 0 0 0 "ALL" parallel 0 0 1.9593266248700001 0 0 -1 1 -5.5511151231299994e-017 0 0 1000 1000
+D_First 0:1:7:2 0 0 0 "CPC Process" parallel 0 0 1.9593266248700001 0 0 -1 1 -5.5511151231299994e-017 0 0 1000 1000
+D_First 0:1:7:3 0 0 0 "CPC D\\X2\\00E9\\X0\\tente" parallel 0 0 1.9593266248700001 0 0 -1 1 -5.5511151231299994e-017 0 0 1000 1000
+D_First 0:1:7:4 0 0 0 "REF A/B/C" parallel 0 0 1.9593266248700001 0 0 -1 1 -5.5511151231299994e-017 0 0 1000 1000
+D_First 0:1:7:5 0 0 0 "CTF A/B/C" parallel 0 0 1.9593266248700001 0 0 -1 1 -5.5511151231299994e-017 0 0 1000 1000
+}