diff options
Diffstat (limited to 'intern/bsp')
-rwxr-xr-x | intern/bsp/intern/BSP_CSGMesh_CFIterator.h | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/intern/bsp/intern/BSP_CSGMesh_CFIterator.h b/intern/bsp/intern/BSP_CSGMesh_CFIterator.h index 77ba076885f..9cd237873c7 100755 --- a/intern/bsp/intern/BSP_CSGMesh_CFIterator.h +++ b/intern/bsp/intern/BSP_CSGMesh_CFIterator.h @@ -69,7 +69,8 @@ BSP_CSGMesh_VertexIt_Done( // assume CSG_IteratorPtr is of the correct type. BSP_CSGMesh_VertexIt * vertex_it = (BSP_CSGMesh_VertexIt *)it; - if (vertex_it->pos < &(*vertex_it->mesh->VertexSet().end())) return 0; + /* dereferencing iterator::end() is illegal, so we dereference 1 before it */ + if (vertex_it->pos <= &(*(vertex_it->mesh->VertexSet().end() -1) )) return 0; return 1; }; @@ -161,7 +162,8 @@ BSP_CSGMesh_FaceIt_Done( // assume CSG_IteratorPtr is of the correct type. BSP_CSGMesh_FaceIt * face_it = (BSP_CSGMesh_FaceIt *)it; - if (face_it->pos < &(*face_it->mesh->FaceSet().end())) { + /* dereferencing iterator::end() is illegal, so we dereference 1 before it */ + if (face_it->pos <= &(*(face_it->mesh->FaceSet().end() -1))) { if (face_it->face_triangle + 3 <= face_it->pos->m_verts.size()) { return 0; } @@ -253,8 +255,8 @@ BSP_CSGMesh_FaceIt_Step( // assume CSG_IteratorPtr is of the correct type. BSP_CSGMesh_FaceIt * face_it = (BSP_CSGMesh_FaceIt *)it; - // safety guard - if (face_it->pos < &(*face_it->mesh->FaceSet().end())) { + /* dereferencing iterator::end() is illegal, so we dereference 1 before it */ + if (face_it->pos <= &(*(face_it->mesh->FaceSet().end() -1))) { //if (face_it->face_triangle + 3 < face_it->pos->m_verts.size()) { // (face_it->face_triangle)++; |