[goffice] Fix component duplication. [#483]



commit 0c507180547ced0273670734ce27ecc551dd5555
Author: Jean Brefort <jean brefort normalesup org>
Date:   Wed Apr 29 17:15:03 2020 +0200

    Fix component duplication. [#483]

 ChangeLog                        |  5 +++++
 NEWS                             |  1 +
 goffice/component/go-component.c | 13 +++----------
 3 files changed, 9 insertions(+), 10 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index e9fdca59..0b4ab53c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2020-04-29  Jean Brefort  <jean brefort normalesup org>
+
+       * goffice/component/go-component.c (go_component_duplicate): do not destroy
+       original data. Fix #483.
+
 2020-04-28  Jean Brefort  <jean brefort normalesup org>
 
        * goffice/graph/gog-axis-line.c
diff --git a/NEWS b/NEWS
index a153c2c3..ae3eb291 100644
--- a/NEWS
+++ b/NEWS
@@ -8,6 +8,7 @@ Jean:
        * Fix legend order in bar plots.
        * Test plot series validity after a data change. [#468] 
        * Fix crossing axis position. [#45]
+       * Fix component duplication. [#483]
 
 Morten:
        * Fix library namespace issue.
diff --git a/goffice/component/go-component.c b/goffice/component/go-component.c
index 119ada8e..c4c54bef 100644
--- a/goffice/component/go-component.c
+++ b/goffice/component/go-component.c
@@ -947,10 +947,6 @@ GOComponent *
 go_component_duplicate (GOComponent const *component)
 {
        GOComponent *res;
-       char *buf;
-       int length;
-       void (*clearfunc) (gpointer) = NULL;
-       gpointer user_data = NULL;
        GValue   value;
        guint i, nbprops;
        GType    prop_type;
@@ -975,14 +971,11 @@ go_component_duplicate (GOComponent const *component)
                        g_value_unset (&value);
                }
        /* and now the data */
-       go_component_get_data ((GOComponent *) component, (gpointer) &buf, &length, &clearfunc, &user_data);
-       new_data = g_malloc (length);
-       memcpy (new_data, buf, length);
-       go_component_set_data (res, new_data, length);
+       new_data = g_malloc (component->length);
+       memcpy (new_data, component->data, component->length);
+       go_component_set_data (res, new_data, component->length);
        res->destroy_notify = g_free;
        res->destroy_data = new_data;
-       if (clearfunc)
-               clearfunc ((user_data)? user_data: buf);
        res->priv = g_new (GOComponentPrivate, 1);
        res->priv->is_inline = component->priv->is_inline;
        return res;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]