summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2010-01-09 12:23:49 (GMT)
committerclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2010-01-09 12:23:49 (GMT)
commit961f5e599111f47641c39fe5e72b143f2f9f4861 (patch)
tree0c7e24011e62eeea44776653a06c4866139fd315
parent3939d27266d08cc0824d32dfeeea42f06168a8c2 (diff)
Clifford Wolf:
Fixed segfault on invalid polygon/polyhedron vetrex indices git-svn-id: http://svn.clifford.at/openscad/trunk@246 b57f626f-c46c-0410-a088-ec61d464b74c
-rw-r--r--primitives.cc21
1 files changed, 13 insertions, 8 deletions
diff --git a/primitives.cc b/primitives.cc
index 80e26b2..7e6a9e1 100644
--- a/primitives.cc
+++ b/primitives.cc
@@ -397,10 +397,11 @@ sphere_next_r2:
p->append_poly();
for (int j=0; j<triangles.vec[i]->vec.size(); j++) {
int pt = triangles.vec[i]->vec[j]->num;
- double px = points.vec[pt]->vec[0]->num;
- double py = points.vec[pt]->vec[1]->num;
- double pz = points.vec[pt]->vec[2]->num;
- p->insert_vertex(px, py, pz);
+ if (pt < points.vec.size()) {
+ double px, py, pz;
+ if (points.vec[pt]->getv3(px, py, pz))
+ p->insert_vertex(px, py, pz);
+ }
}
}
}
@@ -463,11 +464,15 @@ sphere_next_r2:
{
dd.paths.append(DxfData::Path());
for (int i=0; i<points.vec.size(); i++) {
- DxfData::Point *p = &dd.points[i];
- dd.paths.last().points.append(p);
+ if (i < dd.points.size()) {
+ DxfData::Point *p = &dd.points[i];
+ dd.paths.last().points.append(p);
+ }
+ }
+ if (dd.paths.last().points.size() > 0) {
+ dd.paths.last().points.append(dd.paths.last().points.first());
+ dd.paths.last().is_closed = true;
}
- dd.paths.last().points.append(dd.paths.last().points.first());
- dd.paths.last().is_closed = true;
}
else
{
contact: Jan Huwald // Impressum