Browse Source

Fix unitialized memory in nurbsVertex, prevent division by zero in NurbsCurveEvaluator

tobspr 10 years ago
parent
commit
8e772366b1

+ 7 - 2
panda/src/parametrics/nurbsCurveEvaluator.cxx

@@ -244,8 +244,13 @@ get_vertices(NurbsCurveEvaluator::Vert3Array &verts, const NodePath &rel_to) con
   int vi;
   for (vi = 0; vi < num_vertices; vi++) {
     LVecBase4 vertex = get_vertex(vi, rel_to);
-    LPoint3 v3(vertex[0] / vertex[3], vertex[1] / vertex[3], vertex[2] / vertex[3]);
-    verts.push_back(v3);
+    // Avoid division by zero
+    if (vertex[3] == 0.0) {
+      verts.push_back(LPoint3(vertex[0], vertex[1], vertex[2]));
+    } else {
+      LPoint3 v3(vertex[0] / vertex[3], vertex[1] / vertex[3], vertex[2] / vertex[3]);
+      verts.push_back(v3);
+    }
   }
 }
 

+ 1 - 0
panda/src/parametrics/nurbsVertex.I

@@ -20,6 +20,7 @@
 ////////////////////////////////////////////////////////////////////
 INLINE NurbsVertex::
 NurbsVertex() {
+  _vertex.set(0, 0, 0, 1);
 }
 
 ////////////////////////////////////////////////////////////////////