diff options
| author | chr <chr> | 2017-05-23 19:48:27 +0000 |
|---|---|---|
| committer | chr <chr> | 2017-05-23 19:48:27 +0000 |
| commit | 71f7e26f4a6714fe1d3b6a72f61c481c3e1f52a0 (patch) | |
| tree | 066d28509e627c9d4193cc99ba4bbe020a05894e /src | |
| parent | bugfix: change active layer (diff) | |
| download | inkscape-71f7e26f4a6714fe1d3b6a72f61c481c3e1f52a0.tar.gz inkscape-71f7e26f4a6714fe1d3b6a72f61c481c3e1f52a0.zip | |
fix a brunch of memory leaks pt.2
I'd like to see the crappy API fixed,
to avoid this stupid mistakes.
(bzr r15698.1.12)
Diffstat (limited to 'src')
| -rw-r--r-- | src/live_effects/lpe-clone-original.cpp | 12 | ||||
| -rw-r--r-- | src/live_effects/lpe-copy_rotate.cpp | 4 | ||||
| -rw-r--r-- | src/live_effects/lpe-measure-line.cpp | 11 | ||||
| -rw-r--r-- | src/live_effects/lpe-mirror_symmetry.cpp | 4 | ||||
| -rw-r--r-- | src/svg/svg-affine-test.h | 4 |
5 files changed, 25 insertions, 10 deletions
diff --git a/src/live_effects/lpe-clone-original.cpp b/src/live_effects/lpe-clone-original.cpp index d97a990af..31bf0e270 100644 --- a/src/live_effects/lpe-clone-original.cpp +++ b/src/live_effects/lpe-clone-original.cpp @@ -138,10 +138,14 @@ LPECloneOriginal::cloneAttrbutes(SPObject *origin, SPObject *dest, bool live, co dest_affine *= Geom::Translate(preserve_affine.translation()); affine_previous = preserve_affine; preserve_affine = Geom::identity(); - SP_ITEM(dest)->getRepr()->setAttribute("transform",sp_svg_transform_write(dest_affine)); + gchar * str = sp_svg_transform_write(dest_affine); + SP_ITEM(dest)->getRepr()->setAttribute("transform", str); + g_free(str); } } else { - SP_ITEM(dest)->getRepr()->setAttribute("transform",sp_svg_transform_write(affine_origin)); + gchar * str = sp_svg_transform_write(affine_origin); + SP_ITEM(dest)->getRepr()->setAttribute("transform", str); + g_free(str); } } else if ( shape_dest && shape_origin && live && (std::strcmp(attribute, "d") == 0)) { SPCurve *c = NULL; @@ -176,7 +180,9 @@ LPECloneOriginal::cloneAttrbutes(SPObject *origin, SPObject *dest, bool live, co c->set_pathvector(c_pv); if (!path_origin) { shape_dest->setCurveInsync(c, TRUE); - dest->getRepr()->setAttribute(attribute, sp_svg_write_path(c_pv)); + gchar *str = sp_svg_write_path(c_pv); + dest->getRepr()->setAttribute(attribute, str); + g_free(str); } else { shape_dest->setCurve(c, TRUE); } diff --git a/src/live_effects/lpe-copy_rotate.cpp b/src/live_effects/lpe-copy_rotate.cpp index f8be0f2a5..e80ad80cb 100644 --- a/src/live_effects/lpe-copy_rotate.cpp +++ b/src/live_effects/lpe-copy_rotate.cpp @@ -274,7 +274,9 @@ LPECopyRotate::toItem(Geom::Affine transform, size_t i, bool reset) Inkscape::GC::release(phantom); } cloneD(SP_OBJECT(sp_lpe_item), elemref, true, reset); - elemref->getRepr()->setAttribute("transform" , sp_svg_transform_write(transform)); + gchar *str = sp_svg_transform_write(transform); + elemref->getRepr()->setAttribute("transform" , str); + g_free(str); SP_ITEM(elemref)->setHidden(false); if (elemref->parent != container) { Inkscape::XML::Node *copy = phantom->duplicate(xml_doc); diff --git a/src/live_effects/lpe-measure-line.cpp b/src/live_effects/lpe-measure-line.cpp index 892744462..f7892cbe7 100644 --- a/src/live_effects/lpe-measure-line.cpp +++ b/src/live_effects/lpe-measure-line.cpp @@ -260,7 +260,7 @@ LPEMeasureLine::createTextLabel(Geom::Point pos, double length, Geom::Coord angl rtspan = xml_doc->createElement("svg:tspan"); rtspan->setAttribute("sodipodi:role", "line"); } - const char * transform; + gchar * transform; Geom::Affine affine = Geom::Affine(Geom::Translate(pos).inverse()); angle = std::fmod(angle, 2*M_PI); if (angle < 0) angle += 2*M_PI; @@ -276,6 +276,7 @@ LPEMeasureLine::createTextLabel(Geom::Point pos, double length, Geom::Coord angl transform = NULL; } rtext->setAttribute("transform", transform); + g_free(transform); SPCSSAttr *css = sp_repr_css_attr_new(); sp_repr_css_attr_add_from_string(css, anotation_format.param_getSVGValue()); Inkscape::FontLister *fontlister = Inkscape::FontLister::get_instance(); @@ -317,7 +318,7 @@ LPEMeasureLine::createTextLabel(Geom::Point pos, double length, Geom::Coord angl g_snprintf(length_str, 64, "%.*f", (int)precision, length); setlocale (LC_NUMERIC, oldlocale); g_free (oldlocale); - Glib::ustring label_value = Glib::ustring(format.param_getSVGValue()); + Glib::ustring label_value(format.param_getSVGValue()); size_t s = label_value.find(Glib::ustring("{measure}"),0); if(s < label_value.length()) { label_value.replace(s,s+9,length_str); @@ -413,17 +414,19 @@ LPEMeasureLine::createLine(Geom::Point start,Geom::Point end, const char * id, b } line = elemref->getRepr(); - const char * line_str = sp_svg_write_path( line_pathv ); + gchar * line_str = sp_svg_write_path( line_pathv ); line->setAttribute("d" , line_str); line->setAttribute("transform", NULL); + g_free(line_str); } else { if (remove) { return; } line = xml_doc->createElement("svg:path"); line->setAttribute("id", id); - const char * line_str = sp_svg_write_path( line_pathv ); + gchar * line_str = sp_svg_write_path( line_pathv ); line->setAttribute("d" , line_str); + g_free(line_str); } line->setAttribute("sodipodi:insensitive", "true"); line_pathv.clear(); diff --git a/src/live_effects/lpe-mirror_symmetry.cpp b/src/live_effects/lpe-mirror_symmetry.cpp index 186b97fe3..b1f10c242 100644 --- a/src/live_effects/lpe-mirror_symmetry.cpp +++ b/src/live_effects/lpe-mirror_symmetry.cpp @@ -291,7 +291,9 @@ LPEMirrorSymmetry::toMirror(Geom::Affine transform) Inkscape::GC::release(phantom); } cloneD(SP_OBJECT(sp_lpe_item), elemref, true, true); - elemref->getRepr()->setAttribute("transform" , sp_svg_transform_write(transform)); + gchar *str = sp_svg_transform_write(transform); + elemref->getRepr()->setAttribute("transform" , str); + g_free(str); if (elemref->parent != container) { Inkscape::XML::Node *copy = phantom->duplicate(xml_doc); copy->setAttribute("id", elemref_id); diff --git a/src/svg/svg-affine-test.h b/src/svg/svg-affine-test.h index af670a3a8..829ef8a5a 100644 --- a/src/svg/svg-affine-test.h +++ b/src/svg/svg-affine-test.h @@ -67,7 +67,9 @@ public: void testWriteIdentity() { - TS_ASSERT_EQUALS(sp_svg_transform_write(Geom::identity()) , (void*)0) + gchar str = sp_svg_transform_write(Geom::identity()); + TS_ASSERT_EQUALS(str, NULL); + g_free(str); } void testReadMatrix() |
