summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-05-13 23:14:04 +0000
committerDavid Robillard <d@drobilla.net>2012-05-13 23:14:04 +0000
commit84ba8d50418b088901c2a36f99a1842e17c8fa33 (patch)
tree508318dec45405d9af66894d09a2769031a6df00
parent54eb7caa4866b151983065385bfd54fc69d0d698 (diff)
downloadsord-84ba8d50418b088901c2a36f99a1842e17c8fa33.tar.gz
sord-84ba8d50418b088901c2a36f99a1842e17c8fa33.tar.bz2
sord-84ba8d50418b088901c2a36f99a1842e17c8fa33.zip
Correctly handle Sord::Node self-assignment.
git-svn-id: http://svn.drobilla.net/sord/trunk@223 3d64ff67-21c5-427c-a301-fe4f08042e5a
-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;
}