summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--sord/sordmm.hpp12
2 files changed, 8 insertions, 5 deletions
diff --git a/NEWS b/NEWS
index c75df6a..32c4c78 100644
--- a/NEWS
+++ b/NEWS
@@ -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;
}