diff options
| author | Benjamin Dauvergne <bdauvergne@entrouvert.com> | 2009-03-27 15:05:35 +0000 |
|---|---|---|
| committer | Benjamin Dauvergne <bdauvergne@entrouvert.com> | 2009-03-27 15:05:35 +0000 |
| commit | 56160b783dd49b768f34136fa564be9fefef73b2 (patch) | |
| tree | e6e0961731e2ef944305e26c113d07523e6927c5 | |
| parent | 7696062fbdb84fe281fcce5d1298ee592e70e113 (diff) | |
| download | lasso-56160b783dd49b768f34136fa564be9fefef73b2.tar.gz lasso-56160b783dd49b768f34136fa564be9fefef73b2.tar.xz lasso-56160b783dd49b768f34136fa564be9fefef73b2.zip | |
Core: Fix double instantiation of macro parameters
* lasso/utils.h:
- (lasso_assign_new_string,lasso_assign_gobject) if source parameter
is a function call it could be called two times and have unexpected
side effects. Copy the returned value to a temp variable and use it
instead.
| -rw-r--r-- | lasso/utils.h | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/lasso/utils.h b/lasso/utils.h index 011d4d1e..735d319a 100644 --- a/lasso/utils.h +++ b/lasso/utils.h @@ -153,35 +153,38 @@ #define lasso_assign_new_string(dest,src) \ { \ - if (dest != src) \ + char *__tmp = src; \ + if (dest != __tmp) \ lasso_release_string(dest); \ - dest = src; \ + dest = __tmp; \ } #define lasso_assign_gobject(dest,src) \ { \ + GObject *__tmp = G_OBJECT(src); \ lasso_check_type_equality(dest, src); \ - if (src) \ - g_object_ref(src); \ - if (dest) \ - g_object_unref(dest); \ - dest = (void*)(src); \ + if (__tmp) \ + g_object_ref(__tmp); \ + lasso_release_gobject(dest); \ + dest = (void*)(__tmp); \ } #define lasso_assign_new_gobject(dest,src) \ { \ + GObject *__tmp = G_OBJECT(src); \ lasso_check_type_equality(dest, src); \ - if (dest != (void*)src) \ - g_object_unref(dest); \ - dest = (void*)(src); \ + if (dest != (void*)__tmp) \ + lasso_release_gobject(dest); \ + dest = (void*)(__tmp); \ } #define lasso_assign_xml_node(dest,src) \ { \ + xmlNode *__tmp = (src); \ lasso_check_type_equality(dest, src); \ if (dest) \ xmlFreeNode(dest); \ - dest = xmlCopyNode(src, 1); \ + dest = xmlCopyNode(__tmp, 1); \ } #define lasso_assign_new_list_of_gobjects(dest, src) \ |
