Geom::LogicalError Crash on rotation with snapping enabled
Migrated from: https://bugs.launchpad.net/inkscape/+bug/1677534
Steps to reproduce:
- Open RotateCrash.svg
- Rotate red rectangle so the corner snaps with the horizontal guide
What happened?
Crash
terminate called after throwing an instance of 'Geom::LogicalError'
what(): lib2geom exception: the passed coefficients give the empty set (E:\Temp\Inkscape\0.92.1\inkscape-0.92.1_64\src\2geom\line.cpp:66)
Backtrace in 1.0alpha
terminate called after throwing an instance of 'Geom::LogicalError' what(): lib2geom exception: the passed coefficients give the empty set (../src/2geom/line.cpp:66)Thread 1 "inkscape" received signal SIGABRT, Aborted. __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51 51 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory. (gdb) bt #0 0x00007ffff4258e97 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51 #1 0x00007ffff425a801 in __GI_abort () at abort.c:79 #2 0x00007ffff46978b7 in () at /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #3 0x00007ffff469da06 in () at /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #4 0x00007ffff469da41 in () at /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #5 0x00007ffff469dc74 in () at /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #6 0x00007ffff75a4f9f in Geom::Line::setCoefficients(double, double, double) (this=this@entry=0x7fffffffc970, a=a@entry=0, b=b@entry=0, c=) at ../src/2geom/line.cpp:66 #7 0x00007ffff75956a7 in Geom::Line::Line(double, double, double) (c=, b=0, a=0, this=0x7fffffffc970) at ../src/2geom/line.h:89 #8 0x00007ffff75956a7 in Geom::Ellipse::intersect(Geom::Ellipse const&) const (this=this@entry=0x5555595ea548, other=...) at ../src/2geom/ellipse.cpp:560 #9 0x00007ffff759cc77 in Geom::EllipticalArc::intersect(Geom::Curve const&, double) const (this=0x5555595ea520, other=..., eps=9.9999999999999995e-07) at ../src/2geom/elliptical-arc.cpp:610 #10 0x00007ffff75bec9b in Geom::CurveIntersectionSweepSet::addActiveItem(__gnu_cxx::normal_iterator<Geom::CurveIntersectionSweepSet::CurveRecord const*, std::vector<Geom::CurveIntersectionSweepSet::CurveRecord, std::allocatorGeom::CurveIntersectionSweepSet::CurveRecord > >) (ii={hook = {<boost::intrusive::generic_hook<(boost::intrusive::algo_types)0, boost::intrusive::list_node_traits<void>, boost::intrusive::member_tag, (boost::intrusive::link_mode_type)1, (boost::intrusive::base_hook_type)0>> = {<boost::intrusive::list_node<void>> = {next = 0x7fffffffcd80, prev = 0x5555595a48b0}, <boost::intrusive::hook_tags_definer<boost::intrusive::generic_hook<(boost::intrusive::algo_types)0, boost::intrusive::list_node_traits<void>, boost::intrusive::member_tag, (boost::intrusive::link_mode_type)1, (boost::intrusive::base_hook_type)0>, 0>> = {}, }, }, curve = 0x5555595ea520, bounds = {<Geom::GenericRect> = {<boost::operators_impl::equality_comparable<Geom::Rect, boost::operators_impl::equality_comparable<Geom::Rect, Geom::GenericRect, boost::operators_impl::orable<Geom::Rect, boost::operators_impl::orable<Geom::Rect, Geom::OptRect, boost::operators_impl::additive<Geom::Rect, Geom::Point, boost::operators_impl::multipliable<Geom::Rect, Geom::Affine, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::true_t>> = {<boost::operators_impl::equality_comparable1<Geom::Rect, boost::operators_impl::equality_comparable<Geom::Rect, Geom::GenericRect, boost::operators_impl::orable<Geom::Rect, boost::operators_impl::orable<Geom::Rect, Geom::OptRect, boost::operators_impl::additive<Geom::Rect, Geom::Point, boost::operators_impl::multipliable<Geom::Rect, Geom::Affine, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::false_t> >> = {<boost::operators_impl::equality_comparable<Geom::Rect, Geom::GenericRect, boost::operators_impl::orable<Geom::Rect, boost::operators_impl::orable<Geom::Rect, Geom::OptRect, boost::operators_impl::additive<Geom::Rect, Geom::Point, boost::operators_impl::multipliable<Geom::Rect, Geom::Affine, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::false_t>> = {<boost::operators_impl::equality_comparable2<Geom::Rect, Geom::GenericRect, boost::operators_impl::orable<Geom::Rect, boost::operators_impl::orable<Geom::Rect, Geom::OptRect, boost::operators_impl::additive<Geom::Rect, Geom::Point, boost::operators_impl::multipliable<Geom::Rect, Geom::Affine, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::true_t> >> = {<boost::operators_impl::orable<Geom::Rect, boost::operators_impl::orable<Geom::Rect, Geom::OptRect, boost::operators_impl::additive<Geom::Rect, Geom::Point, boost::operators_impl::multipliable<Geom::Rect, Geom::Affine, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::true_t>> = {<boost::operators_impl::orable1<Geom::Rect, boost::operators_impl::orable<Geom::Rect, Geom::OptRect, boost::operators_impl::additive<Geom::Rect, Geom::Point, boost::operators_impl::multipliable<Geom::Rect, Geom::Affine, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::false_t> >> = {<boost::operators_impl::orable<Geom::Rect, Geom::OptRect, boost::operators_impl::additive<Geom::Rect, Geom::Point, boost::operators_impl::multipliable<Geom::Rect, Geom::Affine, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::false_t>> = {<boost::operators_impl::orable2<Geom::Rect, Geom::OptRect, boost::operators_impl::additive<Geom::Rect, Geom::Point, boost::operators_impl::multipliable<Geom::Rect, Geom::Affine, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::false_t> >> = {<boost::operators_impl::additive<Geom::Rect, Geom::Point, boost::operators_impl::multipliable<Geom::Rect, Geom::Affine, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::false_t>> = {<boost::operators_impl::additive2<Geom::Rect, Geom::Point, boost::operators_impl::multipliable<Geom::Rect, Geom::Affine, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::false_t> >> = {<boost::operators_impl::addable2<Geom::Rect, Geom::Point, boost::operators_impl::subtractable2<Geom::Rect, Geom::Point, boost::operators_impl::multipliable<Geom::Rect, Geom::Affine, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::false_t> > >> = {<boost::operators_impl::subtractable2<Geom::Rect, Geom::Point, boost::operators_impl::multipliable<Geom::Rect, Geom::Affine, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::false_t> >> = {<boost::operators_impl::multipliable<Geom::Rect, Geom::Affine, boost::operators_impl::operators_detail::empty_baseGeom::Rect, boost::operators_impl::operators_detail::false_t>> = {<boost::operators_impl::multipliable2<Geom::Rect, Geom::Affine, boost::operators_impl::operators_detail::empty_baseGeom::Rect >> = {<boost::operators_impl::operators_detail::empty_baseGeom::Rect> = {}, }, }, }, }, }, }, }, }, }, }, }, }, }, }, f = {{<Geom::GenericInterval> = {<boost::operators_impl::equality_comparable<Geom::Interval, boost::operators_impl::equality_comparable<Geom::Interval, Geom::GenericInterval, boost::operators_impl::additive<Geom::Interval, boost::operators_impl::multipliable<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>> = {<boost::operators_impl::equality_comparable1<Geom::Interval, boost::operators_impl::equality_comparable<Geom::Interval, Geom::GenericInterval, boost::operators_impl::additive<Geom::Interval, boost::operators_impl::multipliable<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::false_t> >> = {<boost::operators_impl::equality_comparable<Geom::Interval, Geom::GenericInterval, boost::operators_impl::additive<Geom::Interval, boost::operators_impl::multipliable<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::false_t>> = {<boost::operators_impl::equality_comparable2<Geom::Interval, Geom::GenericInterval, boost::operators_impl::additive<Geom::Interval, boost::operators_impl::multipliable<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t> >> = {<boost::operators_impl::additive<Geom::Interval, boost::operators_impl::multipliable<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>> = {<boost::operators_impl::additive1<Geom::Interval, boost::operators_impl::multipliable<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t> >> = {<boost::operators_impl::addable1<Geom::Interval, boost::operators_impl::subtractable1<Geom::Interval, boost::operators_impl::multipliable<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t> > >> = {<boost::operators_impl::subtractable1<Geom::Interval, boost::operators_impl::multipliable<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t> >> = {<boost::operators_impl::multipliable<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>> = {<boost::operators_impl::multipliable1<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t> >> = {<boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>> = {<boost::operators_impl::orable1<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t> >> = {<boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>> = {<boost::operators_impl::arithmetic2<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval >> = {<boost::operators_impl::additive2<Geom::Interval, double, boost::operators_impl::multiplicative2<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval > >> = {<boost::operators_impl::addable2<Geom::Interval, double, boost::operators_impl::subtractable2<Geom::Interval, double, boost::operators_impl::multiplicative2<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval > > >> = {<boost::operators_impl::subtractable2<Geom::Interval, double, boost::operators_impl::multiplicative2<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval > >> = {<boost::operators_impl::multiplicative2<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval >> = {<boost::operators_impl::multipliable2<Geom::Interval, double, boost::operators_impl::dividable2<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval > >> = {<boost::operators_impl::dividable2<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval >> = {<boost::operators_impl::operators_detail::empty_baseGeom::Interval> = {}, }, }, }, }, }, }, }, }, }, }, }, }, }, }, }, }, }, }, }, }, _b = {118.41205129478621, 261.50900954887317}}, }, {<Geom::GenericInterval> = {<boost::operators_impl::equality_comparable<Geom::Interval, boost::operators_impl::equality_comparable<Geom::Interval, Geom::GenericInterval, boost::operators_impl::additive<Geom::Interval, boost::operators_impl::multipliable<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>> = {<boost::operators_impl::equality_comparable1<Geom::Interval, boost::operators_impl::equality_comparable<Geom::Interval, Geom::GenericInterval, boost::operators_impl::additive<Geom::Interval, boost::operators_impl::multipliable<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::false_t> >> = {<boost::operators_impl::equality_comparable<Geom::Interval, Geom::GenericInterval, boost::operators_impl::additive<Geom::Interval, boost::operators_impl::multipliable<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::false_t>> = {<boost::operators_impl::equality_comparable2<Geom::Interval, Geom::GenericInterval, boost::operators_impl::additive<Geom::Interval, boost::operators_impl::multipliable<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t> >> = {<boost::operators_impl::additive<Geom::Interval, boost::operators_impl::multipliable<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>> = {<boost::operators_impl::additive1<Geom::Interval, boost::operators_impl::multipliable<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t> >> = {<boost::operators_impl::addable1<Geom::Interval, boost::operators_impl::subtractable1<Geom::Interval, boost::operators_impl::multipliable<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t> > >> = {<boost::operators_impl::subtractable1<Geom::Interval, boost::operators_impl::multipliable<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t> >> = {<boost::operators_impl::multipliable<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>> = {<boost::operators_impl::multipliable1<Geom::Interval, boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t> >> = {<boost::operators_impl::orable<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::true_t>> = {<boost::operators_impl::orable1<Geom::Interval, boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t> >> = {<boost::operators_impl::arithmetic<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval, boost::operators_impl::operators_detail::false_t>> = {<boost::operators_impl::arithmetic2<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval >> = {<boost::operators_impl::additive2<Geom::Interval, double, boost::operators_impl::multiplicative2<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval > >> = {<boost::operators_impl::addable2<Geom::Interval, double, boost::operators_impl::subtractable2<Geom::Interval, double, boost::operators_impl::multiplicative2<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval > > >> = {<boost::operators_impl::subtractable2<Geom::Interval, double, boost::operators_impl::multiplicative2<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval > >> = {<boost::operators_impl::multiplicative2<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval >> = {<boost::operators_impl::multipliable2<Geom::Interval, double, boost::operators_impl::dividable2<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval > >> = {<boost::operators_impl::dividable2<Geom::Interval, double, boost::operators_impl::operators_detail::empty_baseGeom::Interval >> = {<boost::operators_impl::operators_detail::empty_baseGeom::Interval> = {}, }, }, }, }, }, }, }, }, }, }, }, }, }, }, }, }, }, }, }, }, _b = {59.626248357917262, 345.8201648660912}}, }}}, }, index = 1, which = 1}, this=0x7fffffffcd40) at ../src/2geom/path.cpp:526 #11 0x00007ffff75bec9b in Geom::SweeperGeom::CurveIntersectionSweepSet::process() (this=this@entry=0x7fffffffcc50) at ../src/2geom/sweeper.h:137 #12 0x00007ffff75b8f8d in Geom::Path::intersect(Geom::Path const&, double) const (this=0x5555595979d0, other=..., precision=precision@entry=9.9999999999999995e-07) at ../src/2geom/path.cpp:564 #13 0x00007ffff75c2530 in Geom::PathIntersectionSweepSet::addActiveItem(__gnu_cxx::__normal_iterator<Geom::PathIntersectionSweepSet::PathRecord, std::vector<Geom::PathIntersectionSweepSet::PathRecord, std::allocatorGeom::PathIntersectionSweepSet::PathRecord > >) (ii={hook = {<boost::intrusive::generic_hook<(boost::intrusive::algo_types)0, boost::intrusive::list_node_traits<void>, boost::intrusive::member_tag, (boost::intrusive::link_mode_type)1, (boost::intrusive::base_hook_type)0>> = {<boost::intrusive::list_node<void>> = {next = 0x0, prev = 0x0}, <boost::intrusive::hook_tags_definer<boost::intrusive::generic_hook<(boost::intrusive::algo_types)0, boost::intrusive::list_node_traits<void>, boost::intrusive::member_tag, (boost::intrusive::link_mode_type)1, (boost::intrusive::base_hook_type)0>, 0>> = {}, }, }, path = 0x5555595979d0, index = 0, which = 1}, this=0x7fffffffcf70) at ../src/2geom/pathvector.cpp:185 #14 0x00007ffff75c2530 in Geom::SweeperGeom::PathIntersectionSweepSet::process() (this=0x7fffffffce90) at ../src/2geom/sweeper.h:137 #15 0x00007ffff75c2530 in Geom::PathVector::intersect(Geom::PathVector const&, double) const (this=this@entry=0x7fffffffd050, other=..., precision=precision@entry=9.9999999999999995e-07) at ../src/2geom/pathvector.cpp:224 #16 0x00007ffff737cfe7 in Inkscape::ObjectSnapper::_snapPathsConstrained(IntermSnapResults&, Inkscape::SnapCandidatePoint const&, Inkscape::Snapper::SnapConstraint const&, Geom::Point const&) const (this=this@entry=0x555559224ba0, isr=..., p=..., c=..., p_proj_on_constraint=...) at ../src/object-snapper.cpp:647 #17 0x00007ffff737de37 in Inkscape::ObjectSnapper::constrainedSnap(IntermSnapResults&, Inkscape::SnapCandidatePoint const&, Geom::OptRect const&, Inkscape::Snapper::SnapConstraint const&, std::vector<SPItem const, std::allocator<SPItem const> > const, std::vector<Inkscape::SnapCandidatePoint, std::allocatorInkscape::SnapCandidatePoint >*) const (this=0x555559224ba0, isr=..., p=..., bbox_to_snap=..., c=..., it=0x555559224e18, unselected_nodes=0x0) at ../src/object-snapper.cpp:734 #18 0x00007ffff73cd8a0 in SnapManager::constrainedSnap(Inkscape::SnapCandidatePoint const&, Inkscape::Snapper::SnapConstraint const&, Geom::OptRect const&) const (this=this@entry=0x555559224b88, p=..., constraint=..., bbox_to_snap=...) at ../src/snap.cpp:260 #19 0x00007ffff738c1b5 in Inkscape::PureRotateConstrained::snap(SnapManager*, Inkscape::SnapCandidatePoint const&, Geom::Point, Geom::OptRect const&) const (this=0x7fffffffdac0, sm=0x555559224b88, p=..., pt_orig=..., bbox_to_snap=...) at ../src/pure-transform.cpp:350 #20 0x00007ffff738ca9d in Inkscape::PureTransform::snap(SnapManager*, std::vector<Inkscape::SnapCandidatePoint, std::allocatorInkscape::SnapCandidatePoint > const&, Geom::Point const&) (this=this@entry=0x7fffffffdac0, sm=sm@entry=0x555559224b88, points=std::vector of length 4, capacity 4 = {...}, pointer=...) at ../src/pure-transform.cpp:68 #21 0x00007ffff73ca912 in SnapManager::snapTransformed(std::vector<Inkscape::SnapCandidatePoint, std::allocatorInkscape::SnapCandidatePoint > const&, Geom::Point const&, Inkscape::PureTransform&) (this=this@entry=0x555559224b88, points=std::vector of length 4, capacity 4 = {...}, pointer=..., transform=...) at ../src/snap.cpp:467 #22 0x00007ffff73b9ddc in Inkscape::SelTrans::rotateRequest(Geom::Point&, unsigned int) (this=0x5555579b4080, pt=..., state=state@entry=272) at ../src/seltrans.cpp:1284 #23 0x00007ffff73c0c73 in Inkscape::SelTrans::request(SPSelTransHandle const&, Geom::Point&, unsigned int) (this=this@entry=0x5555579b4080, handle=..., pt=..., state=state@entry=272) at ../src/seltrans.cpp:1112 #24 0x00007ffff73c0d29 in Inkscape::SelTrans::handleRequest(SPKnot*, Geom::Point*, unsigned int, SPSelTransHandle const&) (this=0x5555579b4080, knot=knot@entry=0x5555579b93c0, position=position@entry=0x7fffffffdd00, state=state@entry=272, handle=...) at ../src/seltrans.cpp:838 #25 0x00007ffff73c0e78 in sp_sel_trans_handle_request(SPKnot*, Geom::Point*, guint, SPSelTransHandle const*) (knot=0x5555579b93c0, position=0x7fffffffdd00, state=272, data=0x7ffff7733b20 <hands+352>) at ../src/seltrans.cpp:720 #26 0x00007ffff73c2b5e in sigc::pointer_functor4<SPKnot*, Geom::Point*, unsigned int, SPSelTransHandle const*, int>::operator()(SPKnot* const&, Geom::Point* const&, unsigned int const&, SPSelTransHandle const* const&) const (_A_a4=, _A_a3=, _A_a2=, _A_a1=, this=) at /usr/include/sigc++-2.0/sigc++/functors/ptr_fun.h:225 #27 0x00007ffff73c2b5e in sigc::adaptor_functor<sigc::pointer_functor4<SPKnot*, Geom::Point*, unsigned int, SPSelTransHandle const*, int> >::operator()<SPKnot* const&, Geom::Point* const&, unsigned int const&, SPSelTransHandle const*&>(SPKnot* const&, Geom::Point* const&, unsigned int const&, SPSelTransHandle const*&) const (_A_arg4=, _A_arg3=, _A_arg2=, _A_arg1=, this=) at /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:149 #28 0x00007ffff73c2b5e in sigc::bind_functor<-1, sigc::pointer_functor4<SPKnot*, Geom::Point*, unsigned int, SPSelTransHandle const*, int>, SPSelTransHandle const*, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::operator()<SPKnot* const&, Geom::Point* const&, unsigned int const&>(SPKnot* const&, Geom::Point* const&, unsigned int const&) (A_arg3=, A_arg2=, A_arg1=, this=) at /usr/include/sigc++-2.0/sigc++/adaptors/bind.h:1181 #29 0x00007ffff73c2b5e in sigc::internal::slot_call<sigc::bind_functor<-1, sigc::pointer_functor4<SPKnot*, Geom::Point*, unsigned int, SPSelTransHandle const*, int>, SPSelTransHandle const*, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>, bool, SPKnot*, Geom::Point*, unsigned int>::call_it(sigc::internal::slot_rep*, SPKnot* const&, Geom::Point* const&, unsigned int const&) (rep=, a#0=, a#1=, a#2=) at /usr/include/sigc++-2.0/sigc++/functors/slot.h:429 #30 0x00007ffff736d029 in sigc::internal::signal_emit3<bool, SPKnot*, Geom::Point*, unsigned int, sigc::nil>::emit(sigc::internal::signal_impl*, SPKnot* const&, Geom::Point* const&, unsigned int const&) (_A_a3=@0x7fffffffdc5c: 272, _A_a2=@0x7fffffffdc70: 0x7fffffffdd00, _A_a1=@0x7fffffffdc68: 0x5555579b93c0, impl=0x5555579b9670) at /usr/include/sigc++-2.0/sigc++/signal.h:1465 #31 0x00007ffff736d029 in sigc::signal3<bool, SPKnot*, Geom::Point*, unsigned int, sigc::nil>::emit(SPKnot* const&, Geom::Point* const&, unsigned int const&) const (_A_a3=@0x7fffffffdc5c: 272, _A_a2=@0x7fffffffdc70: 0x7fffffffdd00, _A_a1=@0x7fffffffdc68: 0x5555579b93c0, this=0x5555579b9530) at /usr/include/sigc++-2.0/sigc++/signal.h:3263 #32 0x00007ffff736d029 in SPKnot::requestPosition(Geom::Point const&, unsigned int) (this=this@entry=0x5555579b93c0, p=..., state=) at ../src/knot.cpp:396 #33 0x00007ffff736d1c0 in sp_knot_handler_request_position(_GdkEvent*, SPKnot*) (event=0x555559356e50, knot=knot@entry=0x5555579b93c0) at ../src/knot.cpp:378 #34 0x00007ffff6f52d04 in Inkscape::UI::Tools::sp_event_context_snap_watchdog_callback(void*) (data=0x555559dfc9f0) at ../src/ui/tools/tool-base.cpp:1436 #35 0x00007ffff5de1c73 in () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 #36 0x00007ffff5de11f5 in g_main_context_dispatch () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 #37 0x00007ffff5de15c0 in () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 #38 0x00007ffff5de164c in g_main_context_iteration () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 #39 0x00007ffff2261e3d in g_application_run () at /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0 #40 0x0000555555554f39 in main(int, char**) (argc=1, argv=0x7fffffffe008) at ../src/inkscape-main.cpp:59
What should have happened?
No crash.
Inkscape Version and Operating System:
- Inkscape 1.0alpha (d7d7b926b4, 2019-04-16) Linux Mint 19.1
- Inkscape 0.92.3 (2405546, 2018-03-11) ppa Linux Mint 19.1
- Inkscape 0.92.4 5da689c313, 2019-01-14 flatpak Linux Mint 19.1
- Inkscape 0.92.1 r15371, Win10 (OP)
- Inkscape 0.92.1 r15371, Win 8.1 (TylerDurden (8thrule))
- Inkscape 0.92.3 (2405546, 2018-03-11) Ubuntu 18.04.1 (Spindizzy (spindizzy-wizard))
- Inkscape 0.92+devel (1769e99ff8, 2018-12-01) Ubuntu 18.04.1 (Spindizzy (spindizzy-wizard))
- Not replicated Inkscape 0.92.1 r15371, Win7 (OP)
- Not replicated Inkscape 0.92.1 Win XP (jazzynico)
- Not replicated lp:inkscape/0.92.x rev. 15414 (jazzynico)
Caveat: for me replication on 0.92.x relies on moving the rotation point to where it is in 1.0alpha.
I presume the other test cases had crash happen without moving the rotation point (the position in 1.0alpha seems to be wrong)