Commit: 424ea476b1bbb18bce64dd942c17d2a5e5f238d5 Author: Tamito Kajiyama Date: Wed Oct 28 23:09:10 2015 +0900 Branches: blender-v2.76a-release https://developer.blender.org/rB424ea476b1bbb18bce64dd942c17d2a5e5f238d5
Fix T44231: Freestyle causes crash on render. The reported crash was confirmed as a segmentation fault in std::sort(). The cause of the crash was traced down to a binary comparison function that was not satisfying the so-called strict weak ordering requirements of the C++ standard sorting function. Specifically, the comparison operator has to return false when two objects are equivalent (i.e., comp(a, a) must be false), but that requirement was not met. Since the binary comparison operator in question could be a user-defined Python function, here a safety measure is implemented in the C++ layer to make sure the aforementioned requirement is always satisfied. =================================================================== M source/blender/freestyle/intern/stroke/Operators.cpp =================================================================== diff --git a/source/blender/freestyle/intern/stroke/Operators.cpp b/source/blender/freestyle/intern/stroke/Operators.cpp index 87ba34e..dfb50d9 100644 --- a/source/blender/freestyle/intern/stroke/Operators.cpp +++ b/source/blender/freestyle/intern/stroke/Operators.cpp @@ -996,6 +996,8 @@ public: inline bool operator()(Interface1D *i1, Interface1D *i2) { + if (i1 == i2) + return false; if ((*_pred)(*i1, *i2) < 0) throw std::runtime_error("comparison failed"); return _pred->result; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs