[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51897] trunk/blender/extern/carve/lib/ intersect_face_division.cpp: Fix/workaround for carve aborts on windows

Sergey Sharybin sergey.vfx at gmail.com
Mon Nov 5 12:34:58 CET 2012


Revision: 51897
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51897
Author:   nazgul
Date:     2012-11-05 11:34:53 +0000 (Mon, 05 Nov 2012)
Log Message:
-----------
Fix/workaround for carve aborts on windows

The issue was caused by passing start iterator larger than end iterator
to std::copy in triangulation module. It'll do nothing on linux but will
throw an exception on windows. Now behavior will be identical on both
platforms.

Proper solution would be to figure out why exactly this happened, but it's
easier to be forwarded to Tobias and we'll need to get rid of triangulation
anyway.

This should solve issues:
#30100: boolean intersect crashes blender
#33001: Crash on applying Boolean difference modifier
#33045: Boolean modifier crash with mirrored objects

Modified Paths:
--------------
    trunk/blender/extern/carve/lib/intersect_face_division.cpp

Modified: trunk/blender/extern/carve/lib/intersect_face_division.cpp
===================================================================
--- trunk/blender/extern/carve/lib/intersect_face_division.cpp	2012-11-05 10:43:52 UTC (rev 51896)
+++ trunk/blender/extern/carve/lib/intersect_face_division.cpp	2012-11-05 11:34:53 UTC (rev 51897)
@@ -1106,7 +1106,8 @@
         }
 
         // copy up to the end of the path.
-        std::copy(base_loop.begin() + pos, base_loop.begin() + e1_1, std::back_inserter(out));
+		if (pos < e1_1)
+            std::copy(base_loop.begin() + pos, base_loop.begin() + e1_1, std::back_inserter(out));
 
         CARVE_ASSERT(base_loop[e1_1] == p1.back());
         std::copy(p1.rbegin(), p1.rend() - 1, std::back_inserter(out));




More information about the Bf-blender-cvs mailing list