diff options
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | sord/sordmm.hpp | 12 |
2 files changed, 8 insertions, 5 deletions
@@ -2,6 +2,7 @@ sord (9999) unstable; * sordmm.hpp: Add indices and graphs parameters to Model constructor * sordmm.hpp: Remove overzealous URI scheme assertion + * sordmm.hpp: Correctly handle Sord::Node self-assignment -- David Robillard <d@drobilla.net> diff --git a/sord/sordmm.hpp b/sord/sordmm.hpp index ba59ed9..4f3b609 100644 --- a/sord/sordmm.hpp +++ b/sord/sordmm.hpp @@ -171,12 +171,14 @@ public: } } - const Node& operator=(const Node& other) { - if (_c_obj) { - sord_node_free(_world->c_obj(), _c_obj); + Node& operator=(const Node& other) { + if (&other != this) { + if (_c_obj) { + sord_node_free(_world->c_obj(), _c_obj); + } + _world = other._world; + _c_obj = other._c_obj ? sord_node_copy(other._c_obj) : NULL; } - _world = other._world; - _c_obj = other._c_obj ? sord_node_copy(other._c_obj) : NULL; return *this; } |