0024675: Crash reading a VRML file
authorvro <vro@opencascade.com>
Thu, 6 Mar 2014 10:48:36 +0000 (14:48 +0400)
committerabv <abv@opencascade.com>
Thu, 6 Mar 2014 11:50:26 +0000 (15:50 +0400)
A node index for a normal is passed through a map of corrected references to node indices.

Test case for issue CR24675

src/VrmlData/VrmlData_IndexedFaceSet.cxx
tests/bugs/end
tests/bugs/grids.list
tests/bugs/stlvrml/begin [new file with mode: 0755]
tests/bugs/stlvrml/bug22092 [moved from tests/bugs/xde/bug22092 with 95% similarity]
tests/bugs/stlvrml/bug23023 [moved from tests/bugs/moddata_3/bug23023 with 93% similarity]
tests/bugs/stlvrml/bug23846 [moved from tests/bugs/xde/bug23846 with 100% similarity]
tests/bugs/stlvrml/bug24675 [new file with mode: 0644]

index ce2c5fa..ee7dfd7 100644 (file)
@@ -193,7 +193,7 @@ const Handle(TopoDS_TShape)& VrmlData_IndexedFaceSet::TShape ()
               if (IndiceNormals(i, arrIndice) == 3) {
                 for (Standard_Integer j = 0; j < 3; j++) {
                   const gp_XYZ& aNormal = myNormals->Normal (arrIndice[j]);
-                  Standard_Integer anInd = arrNodes[j] * 3 + 1;
+                  Standard_Integer anInd = (mapNodeId(arrNodes[j]) - 1) * 3 + 1;
                   Normals->SetValue (anInd + 0, Standard_ShortReal (aNormal.X()));
                   Normals->SetValue (anInd + 1, Standard_ShortReal (aNormal.Y()));
                   Normals->SetValue (anInd + 2, Standard_ShortReal (aNormal.Z()));
index 1431d0a..d225ba8 100755 (executable)
@@ -163,6 +163,10 @@ if { [isdraw result] } {
   if { [info exists 3dviewer] } {
     #for multiview support: dump result from all opened views
     set view_str [vviewlist long]
+    if { [llength ${view_str}] == 0 } {
+       vinit
+       set view_str [vviewlist long]
+    }
     set view_list [regexp -all -inline {\S+} $view_str]
     foreach {view_name} $view_list {
       vactivate $view_name
index 9a9f75f..47b92a1 100755 (executable)
@@ -15,3 +15,4 @@
 015 caf
 016 mesh
 017 heal
+018 stlvrml
diff --git a/tests/bugs/stlvrml/begin b/tests/bugs/stlvrml/begin
new file mode 100755 (executable)
index 0000000..c45bfe9
--- /dev/null
@@ -0,0 +1,3 @@
+pload XSDRAW
+
+set subgroup stlvrml
similarity index 95%
rename from tests/bugs/xde/bug22092
rename to tests/bugs/stlvrml/bug22092
index e7b64de..0e4c169 100755 (executable)
@@ -6,8 +6,6 @@ puts ""
 # Crash of application on attempt to load a VRML file with all degenerated triangles
 ######################################################################################
 
-set BugNumber OCC22092
-
 loadvrml result [locate_data_file OCC22092-sk97.wrl]
 
 set nb_v_good 16
similarity index 93%
rename from tests/bugs/moddata_3/bug23023
rename to tests/bugs/stlvrml/bug23023
index 480a2e4..c2c9397 100644 (file)
@@ -6,12 +6,11 @@ puts ""
 # VRML reader fails on attempt to read an attached WRL file
 #######################################################################
 
-set BugNumber OCC23023
-pload XDE
-
 set filepath [locate_data_file OCC23023-2056132060_2_tutnicht.wrl]
 if [catch { set list [loadvrml result $filepath] } res] {
     puts "Faulty: VRML reader fails"
 } else {
     puts "OK: VRML reader work properly"
 }
+
+set 3dviewer 1
diff --git a/tests/bugs/stlvrml/bug24675 b/tests/bugs/stlvrml/bug24675
new file mode 100644 (file)
index 0000000..dfeb2dc
--- /dev/null
@@ -0,0 +1,11 @@
+puts "========================"
+puts "OCC24675"
+puts "========================"
+puts ""
+#######################################################################
+# Crash reading a VRML file
+#######################################################################
+
+loadvrml result [locate_data_file T00111111_0000.wrl]
+
+set 3dviewer 1