diff options
author | Pacho Ramos <pacho@gentoo.org> | 2016-02-28 12:25:56 +0100 |
---|---|---|
committer | Pacho Ramos <pacho@gentoo.org> | 2016-02-28 13:02:28 +0100 |
commit | 0c92c018114f9c82a85c24d43b09056e3f92eafa (patch) | |
tree | cbdf1cb25156b566b4031936eeac5c61dc4d789c /gnome-base | |
parent | dev-python/mistune: add missing build dep (diff) | |
download | gentoo-0c92c018114f9c82a85c24d43b09056e3f92eafa.tar.gz gentoo-0c92c018114f9c82a85c24d43b09056e3f92eafa.tar.bz2 gentoo-0c92c018114f9c82a85c24d43b09056e3f92eafa.zip |
gnome-base/librsvg: Fix crashes when filters don't exist (#575496 by Andreas Grois)
Package-Manager: portage-2.2.27
Diffstat (limited to 'gnome-base')
-rw-r--r-- | gnome-base/librsvg/files/librsvg-2.40.13-filters-crash.patch | 53 | ||||
-rw-r--r-- | gnome-base/librsvg/librsvg-2.40.13-r1.ebuild | 102 |
2 files changed, 155 insertions, 0 deletions
diff --git a/gnome-base/librsvg/files/librsvg-2.40.13-filters-crash.patch b/gnome-base/librsvg/files/librsvg-2.40.13-filters-crash.patch new file mode 100644 index 000000000000..f5503d1dd143 --- /dev/null +++ b/gnome-base/librsvg/files/librsvg-2.40.13-filters-crash.patch @@ -0,0 +1,53 @@ +From d937c691678803ceda6be701587d997ccd03a1da Mon Sep 17 00:00:00 2001 +From: Benjamin Otte <otte@redhat.com> +Date: Fri, 29 Jan 2016 12:49:55 +0100 +Subject: Don't crash when filters don't exist + +We put a new surface on the stack if a filter existed by name but we +didn't pop it if the name didn't resolve to a real filter. + +New test: crash/bug759084.svg + +https://bugzilla.gnome.org/show_bug.cgi?id=759084 +--- + rsvg-cairo-draw.c | 6 +++--- + tests/fixtures/crash/bug759084.svg | 9 +++++++++ + 2 files changed, 12 insertions(+), 3 deletions(-) + create mode 100644 tests/fixtures/crash/bug759084.svg + +diff --git a/rsvg-cairo-draw.c b/rsvg-cairo-draw.c +index 4d8fbc2..4152cb7 100644 +--- a/rsvg-cairo-draw.c ++++ b/rsvg-cairo-draw.c +@@ -819,10 +819,10 @@ rsvg_cairo_pop_render_stack (RsvgDrawingCtx * ctx) + cairo_surface_t *output; + + filter = rsvg_acquire_node (ctx, state->filter); +- if (filter && RSVG_NODE_TYPE (filter) == RSVG_NODE_TYPE_FILTER) { +- output = render->surfaces_stack->data; +- render->surfaces_stack = g_list_delete_link (render->surfaces_stack, render->surfaces_stack); ++ output = render->surfaces_stack->data; ++ render->surfaces_stack = g_list_delete_link (render->surfaces_stack, render->surfaces_stack); + ++ if (filter && RSVG_NODE_TYPE (filter) == RSVG_NODE_TYPE_FILTER) { + needs_destroy = TRUE; + surface = rsvg_filter_render ((RsvgFilter *) filter, output, ctx, &render->bbox, "2103"); + /* Don't destroy the output surface, it's owned by child_cr */ +diff --git a/tests/fixtures/crash/bug759084.svg b/tests/fixtures/crash/bug759084.svg +new file mode 100644 +index 0000000..9e8f8f1 +--- /dev/null ++++ b/tests/fixtures/crash/bug759084.svg +@@ -0,0 +1,9 @@ ++<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10"> ++ <defs> ++ <filter id="filter"> ++ </filter> ++ </defs> ++ <g filter="url(#filter)"> ++ <rect fill="red" width="10" height="10" filter="url(#doesnotexist)" /> ++ </g> ++</svg> +-- +cgit v0.12 + diff --git a/gnome-base/librsvg/librsvg-2.40.13-r1.ebuild b/gnome-base/librsvg/librsvg-2.40.13-r1.ebuild new file mode 100644 index 000000000000..7a0f5bca2611 --- /dev/null +++ b/gnome-base/librsvg/librsvg-2.40.13-r1.ebuild @@ -0,0 +1,102 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI="5" +GCONF_DEBUG="no" +GNOME2_LA_PUNT="yes" +VALA_USE_DEPEND="vapigen" + +inherit autotools gnome2 multilib-minimal vala + +DESCRIPTION="Scalable Vector Graphics (SVG) rendering library" +HOMEPAGE="https://wiki.gnome.org/Projects/LibRsvg" + +LICENSE="LGPL-2" +SLOT="2" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd ~x86-freebsd ~x86-interix ~amd64-linux ~arm-linux ~x86-linux ~x64-macos ~x86-macos ~sparc-solaris ~x64-solaris ~x86-solaris" + +IUSE="+introspection vala tools" +REQUIRED_USE="vala? ( introspection )" + +RDEPEND=" + >=dev-libs/glib-2.34.3:2[${MULTILIB_USEDEP}] + >=x11-libs/cairo-1.12.14-r4[${MULTILIB_USEDEP}] + >=x11-libs/pango-1.36.3[${MULTILIB_USEDEP}] + >=dev-libs/libxml2-2.9.1-r4:2[${MULTILIB_USEDEP}] + >=dev-libs/libcroco-0.6.8-r1[${MULTILIB_USEDEP}] + >=x11-libs/gdk-pixbuf-2.30.7:2[introspection?,${MULTILIB_USEDEP}] + introspection? ( >=dev-libs/gobject-introspection-0.10.8:= ) + tools? ( >=x11-libs/gtk+-3.10.0:3 ) +" +DEPEND="${RDEPEND} + dev-libs/gobject-introspection-common + dev-libs/vala-common + >=dev-util/gtk-doc-am-1.13 + >=virtual/pkgconfig-0-r1[${MULTILIB_USEDEP}] + vala? ( $(vala_depend) ) +" +# >=gtk-doc-am-1.13, gobject-introspection-common, vala-common needed by eautoreconf + +src_prepare() { + # https://bugzilla.gnome.org/show_bug.cgi?id=653323 + epatch "${FILESDIR}/${PN}-2.40.12-gtk-optional.patch" + + # https://bugzilla.gnome.org/show_bug.cgi?id=731826 + epatch "${FILESDIR}/${PN}-2.40.2-vala-out-of-source.patch" + + # Don't crash when filters don't exist (included in next release) + epatch "${FILESDIR}/${P}-filters-crash.patch" + + eautoreconf + + use vala && vala_src_prepare + gnome2_src_prepare +} + +multilib_src_configure() { + local myconf=() + + # -Bsymbolic is not supported by the Darwin toolchain + if [[ ${CHOST} == *-darwin* ]]; then + myconf+=( --disable-Bsymbolic ) + fi + + # --disable-tools even when USE=tools; the tools/ subdirectory is useful + # only for librsvg developers + ECONF_SOURCE=${S} \ + gnome2_src_configure \ + --disable-static \ + --disable-tools \ + $(multilib_native_use_enable introspection) \ + $(multilib_native_use_with tools gtk3) \ + $(multilib_native_use_enable vala) \ + --enable-pixbuf-loader \ + "${myconf[@]}" + + if multilib_is_native_abi; then + ln -s "${S}"/doc/html doc/html || die + fi +} + +multilib_src_compile() { + # causes segfault if set, see bug #411765 + unset __GL_NO_DSO_FINALIZER + gnome2_src_compile +} + +multilib_src_install() { + gnome2_src_install +} + +pkg_postinst() { + # causes segfault if set, see bug 375615 + unset __GL_NO_DSO_FINALIZER + multilib_foreach_abi gnome2_pkg_postinst +} + +pkg_postrm() { + # causes segfault if set, see bug 375615 + unset __GL_NO_DSO_FINALIZER + multilib_foreach_abi gnome2_pkg_postrm +} |