From 66e9382175c3fb844d19b23f9d278a603f527d5e Mon Sep 17 00:00:00 2001 From: chr Date: Thu, 18 May 2017 19:58:59 +0200 Subject: bugfix crash while moving objects sp_svg_transform_write can return NULL and Glib::ustring blows up: terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct null not valid #0 0x00007fffed6ec067 in raise () from /lib/x86_64-linux-gnu/libc.so.6 #1 0x00007fffed6ed448 in abort () from /lib/x86_64-linux-gnu/libc.so.6 #2 0x00007fffedac2b3d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #3 0x00007fffedac0bb6 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #4 0x00007fffedac0c01 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #5 0x00007fffedac0e19 in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #6 0x00007fffedb168b6 in std::__throw_logic_error(char const*) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #7 0x00007ffff76e83d5 in char* std::string::_S_construct(char const*, char const*, std::allocator const&, std::forward_iterator_tag) () from /usr/bin/../lib/inkscape/libinkscape_base.so #8 0x00007fffedb22c46 in std::basic_string, std::allocator >::basic_string(char const*, std::allocator const&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #9 0x00007ffff036055e in Glib::ustring::ustring(char const*) () from /usr/lib/x86_64-linux-gnu/libglibmm-2.4.so.1 #10 0x00007ffff75650e3 in SPPattern::transform_multiply(Geom::Affine, bool) () from /usr/bin/../lib/inkscape/libinkscape_base.so #11 0x00007ffff753d862 in SPItem::adjust_pattern(Geom::Affine const&, bool, PatternTransform) () from /usr/bin/../lib/inkscape/libinkscape_base.so #12 0x00007ffff7562897 in SPPath::set_transform(Geom::Affine const&) () from /usr/bin/../lib/inkscape/libinkscape_base.so (bzr r15698.1.1) --- src/sp-pattern.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/sp-pattern.cpp') diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index 377c035fc..fcfdf552e 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -372,8 +372,9 @@ void SPPattern::transform_multiply(Geom::Affine postmul, bool set) } _pattern_transform_set = true; - Glib::ustring c = sp_svg_transform_write(_pattern_transform); + gchar *c = sp_svg_transform_write(_pattern_transform); getRepr()->setAttribute("patternTransform", c); + g_free(c); } const gchar *SPPattern::produce(const std::vector &reprs, Geom::Rect bounds, @@ -390,7 +391,7 @@ const gchar *SPPattern::produce(const std::vector &reprs, sp_repr_set_svg_double(repr, "height", bounds.dimensions()[Geom::Y]); //TODO: Maybe is better handle it in sp_svg_transform_write if(transform != Geom::Affine()){ - Glib::ustring t = sp_svg_transform_write(transform); + gchar *t = sp_svg_transform_write(transform); repr->setAttribute("patternTransform", t); } defsrepr->appendChild(repr); -- cgit v1.2.3