From 56160b783dd49b768f34136fa564be9fefef73b2 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Fri, 27 Mar 2009 15:05:35 +0000 Subject: 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. --- lasso/utils.h | 25 ++++++++++++++----------- 1 file 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) \ -- cgit