summaryrefslogtreecommitdiff
path: root/media-gfx/gimp/files
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
committerV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
commit4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch)
treeba5f07bf3f9d22d82e54a462313f5d244036c768 /media-gfx/gimp/files
reinit the tree, so we can have metadata
Diffstat (limited to 'media-gfx/gimp/files')
-rw-r--r--media-gfx/gimp/files/gimp-2.7.4-no-deprecation.patch36
-rw-r--r--media-gfx/gimp/files/gimp-2.8.10-clang.patch204
-rw-r--r--media-gfx/gimp/files/gimp-2.8.14-blend-center.patch30
-rw-r--r--media-gfx/gimp/files/gimp-2.8.6-uclibc.patch45
-rw-r--r--media-gfx/gimp/files/gimp-2.9.2-CVE-2016-4994.patch88
-rw-r--r--media-gfx/gimp/files/gimp-2.9.2-gegl-0.3.8.patch54
-rw-r--r--media-gfx/gimp/files/gimp-2.9.2-no-deprecation.patch50
-rw-r--r--media-gfx/gimp/files/gimp-2.9.2-version.patch28
-rw-r--r--media-gfx/gimp/files/gimp-2.9.4-CVE-2007-3126.patch291
-rw-r--r--media-gfx/gimp/files/gimp-2.9.4-gegl-bin.patch28
-rw-r--r--media-gfx/gimp/files/gimp-2.9.4-mkdir-makefile.patch36
-rw-r--r--media-gfx/gimp/files/gimp-2.9.6-underlinking.patch20
12 files changed, 910 insertions, 0 deletions
diff --git a/media-gfx/gimp/files/gimp-2.7.4-no-deprecation.patch b/media-gfx/gimp/files/gimp-2.7.4-no-deprecation.patch
new file mode 100644
index 000000000000..66bd93d0d1aa
--- /dev/null
+++ b/media-gfx/gimp/files/gimp-2.7.4-no-deprecation.patch
@@ -0,0 +1,36 @@
+--- configure.ac 2012-01-02 13:15:53.695067626 +0100
++++ configure.ac 2012-01-02 13:21:49.161623684 +0100
+@@ -1943,33 +1943,6 @@
+ AC_SUBST(MIME_TYPES)
+
+
+-#########################
+-# Disable deprecated APIs
+-#########################
+-
+-CPPFLAGS="${CPPFLAGS} -DGIMP_DISABLE_DEPRECATED -DBABL_DISABLE_DEPRECATED -DGSEAL_ENABLE"
+-
+-# Make sure not to disable deprecated APIs for unreleased versions.
+-# We must build without problems with future releases of libraries
+-# and disabling deprecated API risks breaking the build
+-
+-if test "x$have_glib_2_31" != "xyes"; then
+- CPPFLAGS="${CPPFLAGS} -DG_DISABLE_DEPRECATED"
+-fi
+-
+-if test "x$have_gtk_2_26" != "xyes"; then
+- CPPFLAGS="${CPPFLAGS} -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
+-fi
+-
+-if test "x$have_gdk_pixbuf_2_26" != "xyes"; then
+- CPPFLAGS="${CPPFLAGS} -DGDK_PIXBUF_DISABLE_DEPRECATED"
+-fi
+-
+-if test "x$have_pango_1_32" != "xyes"; then
+- CPPFLAGS="${CPPFLAGS} -DPANGO_DISABLE_DEPRECATED"
+-fi
+-
+-
+ ############################
+ # Require multihead safe API
+ ############################
diff --git a/media-gfx/gimp/files/gimp-2.8.10-clang.patch b/media-gfx/gimp/files/gimp-2.8.10-clang.patch
new file mode 100644
index 000000000000..065c66b36139
--- /dev/null
+++ b/media-gfx/gimp/files/gimp-2.8.10-clang.patch
@@ -0,0 +1,204 @@
+--- app/Makefile.am
++++ app/Makefile.am
+@@ -120,29 +120,29 @@
+
+ # FIXME: core should not depend on xcf
+ workaround_that_core_depends_on_xcf = \
+- -u $(SYMPREFIX)xcf_init
++ -Wl,-u,$(SYMPREFIX)xcf_init
+
+ # FIXME: core should not depend on pdb
+ workaround_that_core_depends_on_pdb = \
+- -u $(SYMPREFIX)internal_procs_init \
+- -u $(SYMPREFIX)gimp_plug_in_manager_restore
++ -Wl,-u,$(SYMPREFIX)internal_procs_init \
++ -Wl,-u,$(SYMPREFIX)gimp_plug_in_manager_restore
+
+ # FIXME: plug-in should not depend on pdb
+ workaround_that_plug_in_depends_on_pdb = \
+- -u $(SYMPREFIX)gimp_pdb_compat_param_spec
++ -Wl,-u,$(SYMPREFIX)gimp_pdb_compat_param_spec
+
+ # FIXME: file should not depend on plug-in
+ workaround_that_file_depends_on_plug_in = \
+- -u $(SYMPREFIX)plug_in_icc_profile_apply_rgb \
+- -u $(SYMPREFIX)gimp_image_map_config_get_type
++ -Wl,-u,$(SYMPREFIX)plug_in_icc_profile_apply_rgb \
++ -Wl,-u,$(SYMPREFIX)gimp_image_map_config_get_type
+
+ # core, vectors and gegl are on the same architectural layer, prevent
+ # the linker from panicing
+ calm_down_linker = \
+- -u $(SYMPREFIX)gimp_vectors_undo_get_type \
+- -u $(SYMPREFIX)gimp_vectors_mod_undo_get_type \
+- -u $(SYMPREFIX)gimp_vectors_prop_undo_get_type \
+- -u $(SYMPREFIX)gimp_curve_map_pixels
++ -Wl,-u,$(SYMPREFIX)gimp_vectors_undo_get_type \
++ -Wl,-u,$(SYMPREFIX)gimp_vectors_mod_undo_get_type \
++ -Wl,-u,$(SYMPREFIX)gimp_vectors_prop_undo_get_type \
++ -Wl,-u,$(SYMPREFIX)gimp_curve_map_pixels
+
+ AM_LDFLAGS = \
+ $(munix) \
+--- app/Makefile.in
++++ app/Makefile.in
+@@ -702,33 +702,33 @@
+
+ # FIXME: core should not depend on xcf
+ workaround_that_core_depends_on_xcf = \
+- -u $(SYMPREFIX)xcf_init
++ -Wl,-u,$(SYMPREFIX)xcf_init
+
+
+ # FIXME: core should not depend on pdb
+ workaround_that_core_depends_on_pdb = \
+- -u $(SYMPREFIX)internal_procs_init \
+- -u $(SYMPREFIX)gimp_plug_in_manager_restore
++ -Wl,-u,$(SYMPREFIX)internal_procs_init \
++ -Wl,-u,$(SYMPREFIX)gimp_plug_in_manager_restore
+
+
+ # FIXME: plug-in should not depend on pdb
+ workaround_that_plug_in_depends_on_pdb = \
+- -u $(SYMPREFIX)gimp_pdb_compat_param_spec
++ -Wl,-u,$(SYMPREFIX)gimp_pdb_compat_param_spec
+
+
+ # FIXME: file should not depend on plug-in
+ workaround_that_file_depends_on_plug_in = \
+- -u $(SYMPREFIX)plug_in_icc_profile_apply_rgb \
+- -u $(SYMPREFIX)gimp_image_map_config_get_type
++ -Wl,-u,$(SYMPREFIX)plug_in_icc_profile_apply_rgb \
++ -Wl,-u,$(SYMPREFIX)gimp_image_map_config_get_type
+
+
+ # core, vectors and gegl are on the same architectural layer, prevent
+ # the linker from panicing
+ calm_down_linker = \
+- -u $(SYMPREFIX)gimp_vectors_undo_get_type \
+- -u $(SYMPREFIX)gimp_vectors_mod_undo_get_type \
+- -u $(SYMPREFIX)gimp_vectors_prop_undo_get_type \
+- -u $(SYMPREFIX)gimp_curve_map_pixels
++ -Wl,-u,$(SYMPREFIX)gimp_vectors_undo_get_type \
++ -Wl,-u,$(SYMPREFIX)gimp_vectors_mod_undo_get_type \
++ -Wl,-u,$(SYMPREFIX)gimp_vectors_prop_undo_get_type \
++ -Wl,-u,$(SYMPREFIX)gimp_curve_map_pixels
+
+ AM_LDFLAGS = \
+ $(munix) \
+--- app/tests/Makefile.am
++++ app/tests/Makefile.am
+@@ -63,22 +63,22 @@
+ # We need this due to circular dependencies, see more detailed
+ # comments about it in app/Makefile.am
+ AM_LDFLAGS = \
+- -u $(SYMPREFIX)xcf_init \
+- -u $(SYMPREFIX)base_init \
+- -u $(SYMPREFIX)internal_procs_init \
+- -u $(SYMPREFIX)gimp_plug_in_manager_restore \
+- -u $(SYMPREFIX)gimp_pdb_compat_param_spec \
+- -u $(SYMPREFIX)gui_init \
+- -u $(SYMPREFIX)plug_in_icc_profile_apply_rgb \
+- -u $(SYMPREFIX)gimp_image_map_config_get_type \
+- -u $(SYMPREFIX)gimp_vectors_undo_get_type \
+- -u $(SYMPREFIX)gimp_vectors_mod_undo_get_type \
+- -u $(SYMPREFIX)gimp_vectors_prop_undo_get_type \
+- -u $(SYMPREFIX)actions_init \
+- -u $(SYMPREFIX)gimp_error_dialog_new \
+- -u $(SYMPREFIX)menus_save \
+- -u $(SYMPREFIX)gimp_tools_save \
+- -u $(SYMPREFIX)gimp_curve_map_pixels
++ -Wl,-u,$(SYMPREFIX)xcf_init \
++ -Wl,-u,$(SYMPREFIX)base_init \
++ -Wl,-u,$(SYMPREFIX)internal_procs_init \
++ -Wl,-u,$(SYMPREFIX)gimp_plug_in_manager_restore \
++ -Wl,-u,$(SYMPREFIX)gimp_pdb_compat_param_spec \
++ -Wl,-u,$(SYMPREFIX)gui_init \
++ -Wl,-u,$(SYMPREFIX)plug_in_icc_profile_apply_rgb \
++ -Wl,-u,$(SYMPREFIX)gimp_image_map_config_get_type \
++ -Wl,-u,$(SYMPREFIX)gimp_vectors_undo_get_type \
++ -Wl,-u,$(SYMPREFIX)gimp_vectors_mod_undo_get_type \
++ -Wl,-u,$(SYMPREFIX)gimp_vectors_prop_undo_get_type \
++ -Wl,-u,$(SYMPREFIX)actions_init \
++ -Wl,-u,$(SYMPREFIX)gimp_error_dialog_new \
++ -Wl,-u,$(SYMPREFIX)menus_save \
++ -Wl,-u,$(SYMPREFIX)gimp_tools_save \
++ -Wl,-u,$(SYMPREFIX)gimp_curve_map_pixels
+
+ # Note that we have some duplicate entries here too to work around
+ # circular dependencies and systems on the same architectural layer as
+--- app/tests/Makefile.in
++++ app/tests/Makefile.in
+@@ -1221,22 +1221,22 @@
+ # We need this due to circular dependencies, see more detailed
+ # comments about it in app/Makefile.am
+ AM_LDFLAGS = \
+- -u $(SYMPREFIX)xcf_init \
+- -u $(SYMPREFIX)base_init \
+- -u $(SYMPREFIX)internal_procs_init \
+- -u $(SYMPREFIX)gimp_plug_in_manager_restore \
+- -u $(SYMPREFIX)gimp_pdb_compat_param_spec \
+- -u $(SYMPREFIX)gui_init \
+- -u $(SYMPREFIX)plug_in_icc_profile_apply_rgb \
+- -u $(SYMPREFIX)gimp_image_map_config_get_type \
+- -u $(SYMPREFIX)gimp_vectors_undo_get_type \
+- -u $(SYMPREFIX)gimp_vectors_mod_undo_get_type \
+- -u $(SYMPREFIX)gimp_vectors_prop_undo_get_type \
+- -u $(SYMPREFIX)actions_init \
+- -u $(SYMPREFIX)gimp_error_dialog_new \
+- -u $(SYMPREFIX)menus_save \
+- -u $(SYMPREFIX)gimp_tools_save \
+- -u $(SYMPREFIX)gimp_curve_map_pixels
++ -Wl,-u,$(SYMPREFIX)xcf_init \
++ -Wl,-u,$(SYMPREFIX)base_init \
++ -Wl,-u,$(SYMPREFIX)internal_procs_init \
++ -Wl,-u,$(SYMPREFIX)gimp_plug_in_manager_restore \
++ -Wl,-u,$(SYMPREFIX)gimp_pdb_compat_param_spec \
++ -Wl,-u,$(SYMPREFIX)gui_init \
++ -Wl,-u,$(SYMPREFIX)plug_in_icc_profile_apply_rgb \
++ -Wl,-u,$(SYMPREFIX)gimp_image_map_config_get_type \
++ -Wl,-u,$(SYMPREFIX)gimp_vectors_undo_get_type \
++ -Wl,-u,$(SYMPREFIX)gimp_vectors_mod_undo_get_type \
++ -Wl,-u,$(SYMPREFIX)gimp_vectors_prop_undo_get_type \
++ -Wl,-u,$(SYMPREFIX)actions_init \
++ -Wl,-u,$(SYMPREFIX)gimp_error_dialog_new \
++ -Wl,-u,$(SYMPREFIX)menus_save \
++ -Wl,-u,$(SYMPREFIX)gimp_tools_save \
++ -Wl,-u,$(SYMPREFIX)gimp_curve_map_pixels
+
+
+ # Note that we have some duplicate entries here too to work around
+--- devel-docs/app/Makefile.am
++++ devel-docs/app/Makefile.am
+@@ -62,10 +62,10 @@
+ -UGTK_DISABLE_SINGLE_INCLUDES
+
+ GTKDOC_LIBS = \
+- -u $(SYMPREFIX)xcf_init \
+- -u $(SYMPREFIX)internal_procs_init \
+- -u $(SYMPREFIX)gimp_coords_mix \
+- -u $(SYMPREFIX)gimp_plug_in_manager_restore \
++ -Wl,-u,$(SYMPREFIX)xcf_init \
++ -Wl,-u,$(SYMPREFIX)internal_procs_init \
++ -Wl,-u,$(SYMPREFIX)gimp_coords_mix \
++ -Wl,-u,$(SYMPREFIX)gimp_plug_in_manager_restore \
+ $(top_builddir)/app/app.o \
+ $(top_builddir)/app/batch.o \
+ $(top_builddir)/app/errors.o \
+--- devel-docs/app/Makefile.in
++++ devel-docs/app/Makefile.in
+@@ -511,10 +511,10 @@
+ -UGTK_DISABLE_SINGLE_INCLUDES
+
+ GTKDOC_LIBS = \
+- -u $(SYMPREFIX)xcf_init \
+- -u $(SYMPREFIX)internal_procs_init \
+- -u $(SYMPREFIX)gimp_coords_mix \
+- -u $(SYMPREFIX)gimp_plug_in_manager_restore \
++ -Wl,-u,$(SYMPREFIX)xcf_init \
++ -Wl,-u,$(SYMPREFIX)internal_procs_init \
++ -Wl,-u,$(SYMPREFIX)gimp_coords_mix \
++ -Wl,-u,$(SYMPREFIX)gimp_plug_in_manager_restore \
+ $(top_builddir)/app/app.o \
+ $(top_builddir)/app/batch.o \
+ $(top_builddir)/app/errors.o \
diff --git a/media-gfx/gimp/files/gimp-2.8.14-blend-center.patch b/media-gfx/gimp/files/gimp-2.8.14-blend-center.patch
new file mode 100644
index 000000000000..eba04df59aa2
--- /dev/null
+++ b/media-gfx/gimp/files/gimp-2.8.14-blend-center.patch
@@ -0,0 +1,30 @@
+From 97e55692ebad5897be334c81c133b6626b9b6920 Mon Sep 17 00:00:00 2001
+From: Michael Natterer <mitch@gimp.org>
+Date: Wed, 26 Aug 2015 23:23:16 +0200
+Subject: app: the blend tool was rendering all gradients off-by-0.5
+
+When calculating the color of a pixel, we want to calculate the color
+at its center, not at its top-left corner. Found by Raymond Jennings.
+
+EDIT (by Sebastian Pipping <sping@gentoo.org>):
+ Cut away patch chunk for app/operations/gimpoperationblend.c
+ since 2.8.14 doesn't seem to have that file.
+
+diff --git a/app/core/gimpdrawable-blend.c b/app/core/gimpdrawable-blend.c
+index af565d1..e4f92a1 100644
+--- a/app/core/gimpdrawable-blend.c
++++ b/app/core/gimpdrawable-blend.c
+@@ -628,6 +628,10 @@ gradient_render_pixel (gdouble x,
+ RenderBlendData *rbd = render_data;
+ gdouble factor;
+
++ /* we want to calculate the color at the pixel's center */
++ x += 0.5;
++ y += 0.5;
++
+ /* Calculate blending factor */
+
+ switch (rbd->gradient_type)
+--
+cgit v0.10.2
+
diff --git a/media-gfx/gimp/files/gimp-2.8.6-uclibc.patch b/media-gfx/gimp/files/gimp-2.8.6-uclibc.patch
new file mode 100644
index 000000000000..855e9872f4b4
--- /dev/null
+++ b/media-gfx/gimp/files/gimp-2.8.6-uclibc.patch
@@ -0,0 +1,45 @@
+From 4fb7a436bca3e11abfda8bc23818af0f09714b9d Mon Sep 17 00:00:00 2001
+From: Michael Natterer <mitch@gimp.org>
+Date: Fri, 02 Aug 2013 14:50:00 +0000
+Subject: Bug 704980 - uclibc - base-utils.c: execinfo.h: No such file or directory
+
+Apply patch from Amadeusz Slawinski that checks for execinfo.h and
+builds the code that needs it conditionally.
+---
+diff --git a/app/base/base-utils.c b/app/base/base-utils.c
+index 757f58d..44a9e89 100644
+--- a/app/base/base-utils.c
++++ b/app/base/base-utils.c
+@@ -29,7 +29,7 @@
+ #include <process.h>
+ #endif
+
+-#ifdef G_OS_UNIX
++#if defined(G_OS_UNIX) && defined(HAVE_EXECINFO_H)
+ /* For get_backtrace() */
+ #include <stdlib.h>
+ #include <string.h>
+@@ -112,7 +112,7 @@ get_physical_memory_size (void)
+ char *
+ get_backtrace (void)
+ {
+-#ifdef G_OS_UNIX
++#if defined(G_OS_UNIX) && defined(HAVE_EXECINFO_H)
+ void *functions[MAX_FUNC];
+ char **function_names;
+ int n_functions;
+diff --git a/configure.ac b/configure.ac
+index 0bbcbc7..15c7cc6 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -416,7 +416,7 @@ AC_HEADER_STDC
+ AC_HEADER_SYS_WAIT
+ AC_HEADER_TIME
+
+-AC_CHECK_HEADERS(sys/param.h sys/time.h sys/times.h sys/wait.h unistd.h)
++AC_CHECK_HEADERS(execinfo.h sys/param.h sys/time.h sys/times.h sys/wait.h unistd.h)
+
+ AC_TYPE_PID_T
+ AC_FUNC_VPRINTF
+--
+cgit v0.9.2
diff --git a/media-gfx/gimp/files/gimp-2.9.2-CVE-2016-4994.patch b/media-gfx/gimp/files/gimp-2.9.2-CVE-2016-4994.patch
new file mode 100644
index 000000000000..846318b42149
--- /dev/null
+++ b/media-gfx/gimp/files/gimp-2.9.2-CVE-2016-4994.patch
@@ -0,0 +1,88 @@
+From 6d804bf9ae77bc86a0a97f9b944a129844df9395 Mon Sep 17 00:00:00 2001
+From: Shmuel H <shmuelgimp@gmail.com>
+Date: Mon, 20 Jun 2016 17:14:41 +0300
+Subject: Bug 767873 - (CVE-2016-4994) Multiple Use-After-Free when parsing...
+
+...XCF channel and layer properties
+
+The properties PROP_ACTIVE_LAYER, PROP_FLOATING_SELECTION,
+PROP_ACTIVE_CHANNEL saves the current object pointer the @info
+structure. Others like PROP_SELECTION (for channel) and
+PROP_GROUP_ITEM (for layer) will delete the current object and create
+a new object, leaving the pointers in @info invalid (dangling).
+
+Therefore, if a property from the first type will come before the
+second, the result will be an UaF in the last lines of xcf_load_image
+(when it actually using the pointers from @info).
+
+I wasn't able to exploit this bug because that
+g_object_instance->c_class gets cleared by the last g_object_unref and
+GIMP_IS_{LAYER,CHANNEL} detects that and return FALSE.
+---
+ app/xcf/xcf-load.c | 29 +++++++++++++++++++++++++++++
+ 1 file changed, 29 insertions(+)
+
+diff --git a/app/xcf/xcf-load.c b/app/xcf/xcf-load.c
+index f48558a..244d5c2 100644
+--- a/app/xcf/xcf-load.c
++++ b/app/xcf/xcf-load.c
+@@ -1141,6 +1141,18 @@ xcf_load_layer_props (XcfInfo *info,
+ case PROP_GROUP_ITEM:
+ {
+ GimpLayer *group;
++ gboolean is_active_layer;
++
++ /* We're going to delete *layer, Don't leave its pointers
++ * in @info. After that, we'll restore them back with the
++ * new pointer. See bug #767873.
++ */
++ is_active_layer = (*layer == info->active_layer);
++ if (is_active_layer)
++ info->active_layer = NULL;
++
++ if (*layer == info->floating_sel)
++ info->floating_sel = NULL;
+
+ group = gimp_group_layer_new (image);
+
+@@ -1150,6 +1162,13 @@ xcf_load_layer_props (XcfInfo *info,
+ g_object_ref_sink (*layer);
+ g_object_unref (*layer);
+ *layer = group;
++
++ if (is_active_layer)
++ info->active_layer = *layer;
++
++ /* Don't restore info->floating_sel because group layers
++ * can't be floating selections
++ */
+ }
+ break;
+
+@@ -1220,6 +1239,12 @@ xcf_load_channel_props (XcfInfo *info,
+ {
+ GimpChannel *mask;
+
++ /* We're going to delete *channel, Don't leave its pointer
++ * in @info. See bug #767873.
++ */
++ if (*channel == info->active_channel)
++ info->active_channel = NULL;
++
+ mask =
+ gimp_selection_new (image,
+ gimp_item_get_width (GIMP_ITEM (*channel)),
+@@ -1234,6 +1259,10 @@ xcf_load_channel_props (XcfInfo *info,
+ *channel = mask;
+ (*channel)->boundary_known = FALSE;
+ (*channel)->bounds_known = FALSE;
++
++ /* Don't restore info->active_channel because the
++ * selection can't be the active channel
++ */
+ }
+ break;
+
+--
+cgit v0.12
+
diff --git a/media-gfx/gimp/files/gimp-2.9.2-gegl-0.3.8.patch b/media-gfx/gimp/files/gimp-2.9.2-gegl-0.3.8.patch
new file mode 100644
index 000000000000..a3aa236542bf
--- /dev/null
+++ b/media-gfx/gimp/files/gimp-2.9.2-gegl-0.3.8.patch
@@ -0,0 +1,54 @@
+https://bugs.gentoo.org/586828
+
+Backported from:
+https://git.gnome.org/browse/gimp/commit/?id=2e4685013123c584354bc38612527593a815c38b
+
+--- gimp-2.9.2/app/core/gimpparamspecs-duplicate.c
++++ gimp-2.9.2/app/core/gimpparamspecs-duplicate.c
+@@ -66,23 +66,11 @@
+ }
+ else
+ {
+-
+ copy = g_param_spec_string (pspec->name,
+ g_param_spec_get_nick (pspec),
+ g_param_spec_get_blurb (pspec),
+ spec->default_value,
+ flags);
+-
+- if (GEGL_IS_PARAM_SPEC_MULTILINE (pspec))
+- {
+- static GQuark multiline_quark = 0;
+-
+- if (! multiline_quark)
+- multiline_quark = g_quark_from_static_string ("multiline");
+-
+- g_param_spec_set_qdata (copy, multiline_quark,
+- GINT_TO_POINTER (TRUE));
+- }
+ }
+ }
+ else if (G_IS_PARAM_SPEC_BOOLEAN (pspec))
+--- gimp-2.9.2/app/widgets/gimppropgui.c
++++ gimp-2.9.2/app/widgets/gimppropgui.c
+@@ -227,11 +227,6 @@
+ }
+ else if (G_IS_PARAM_SPEC_STRING (pspec))
+ {
+- static GQuark multiline_quark = 0;
+-
+- if (! multiline_quark)
+- multiline_quark = g_quark_from_static_string ("multiline");
+-
+ if (GIMP_IS_PARAM_SPEC_CONFIG_PATH (pspec))
+ {
+ widget =
+@@ -239,7 +234,7 @@
+ g_param_spec_get_nick (pspec),
+ GTK_FILE_CHOOSER_ACTION_OPEN);
+ }
+- else if (g_param_spec_get_qdata (pspec, multiline_quark))
++ else if (HAS_KEY (pspec, "multiline", "true"))
+ {
+ GtkTextBuffer *buffer;
+ GtkWidget *view;
diff --git a/media-gfx/gimp/files/gimp-2.9.2-no-deprecation.patch b/media-gfx/gimp/files/gimp-2.9.2-no-deprecation.patch
new file mode 100644
index 000000000000..441298a08fde
--- /dev/null
+++ b/media-gfx/gimp/files/gimp-2.9.2-no-deprecation.patch
@@ -0,0 +1,50 @@
+From 81d7607e5159275a9b693a170f7767ffcb548a1b Mon Sep 17 00:00:00 2001
+From: Sebastian Pipping <sebastian@pipping.org>
+Date: Sat, 5 Dec 2015 01:14:37 +0100
+Subject: [PATCH] Do not disable deprecated APIs
+
+---
+ configure.ac | 27 ---------------------------
+ 1 file changed, 27 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 4de6e53..8528e87 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -2111,33 +2111,6 @@ MIME_TYPES="$MIME_TYPES;"
+ AC_SUBST(MIME_TYPES)
+
+
+-#########################
+-# Disable deprecated APIs
+-#########################
+-
+-CPPFLAGS="${CPPFLAGS} -DGIMP_DISABLE_DEPRECATED -DBABL_DISABLE_DEPRECATED -DGSEAL_ENABLE"
+-
+-# Make sure not to disable deprecated APIs for unreleased versions.
+-# We must build without problems with future releases of libraries
+-# and disabling deprecated API risks breaking the build
+-
+-if test "x$have_glib_2_43" != "xyes"; then
+- CPPFLAGS="${CPPFLAGS} -DG_DISABLE_DEPRECATED"
+-fi
+-
+-if test "x$have_gtk_2_26" != "xyes"; then
+- CPPFLAGS="${CPPFLAGS} -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
+-fi
+-
+-if test "x$have_gdk_pixbuf_2_31" != "xyes"; then
+- CPPFLAGS="${CPPFLAGS} -DGDK_PIXBUF_DISABLE_DEPRECATED"
+-fi
+-
+-if test "x$have_pango_1_32" != "xyes"; then
+- CPPFLAGS="${CPPFLAGS} -DPANGO_DISABLE_DEPRECATED"
+-fi
+-
+-
+ ############################
+ # Require multihead safe API
+ ############################
+--
+2.6.3
+
diff --git a/media-gfx/gimp/files/gimp-2.9.2-version.patch b/media-gfx/gimp/files/gimp-2.9.2-version.patch
new file mode 100644
index 000000000000..e48614455577
--- /dev/null
+++ b/media-gfx/gimp/files/gimp-2.9.2-version.patch
@@ -0,0 +1,28 @@
+From f2f7a29ba5aceaa38a285f15c3fe8b481d05b357 Mon Sep 17 00:00:00 2001
+From: Sebastian Pipping <sebastian@pipping.org>
+Date: Sat, 5 Dec 2015 01:15:22 +0100
+Subject: [PATCH] Sync version string
+
+.. with
+m4_define([gimp_micro_version], [2])
+above
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 8528e87..21d86a3 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -20,7 +20,7 @@ m4_define([gimp_binary_age],
+ [m4_eval(100 * gimp_minor_version + gimp_micro_version)])
+
+ # For overriding the version string. Comment out if not needed.
+-# m4_define([gimp_version], [2.9.1])
++# m4_define([gimp_version], [2.9.2])
+
+ # This is the X.Y used in -lgimp-X.Y
+ m4_define([gimp_api_version], [2.0])
+--
+2.6.3
+
diff --git a/media-gfx/gimp/files/gimp-2.9.4-CVE-2007-3126.patch b/media-gfx/gimp/files/gimp-2.9.4-CVE-2007-3126.patch
new file mode 100644
index 000000000000..6c515173d9cd
--- /dev/null
+++ b/media-gfx/gimp/files/gimp-2.9.4-CVE-2007-3126.patch
@@ -0,0 +1,291 @@
+From 46bcd82800e37b0f5aead76184430ef2fe802748 Mon Sep 17 00:00:00 2001
+From: Michael Natterer <mitch@gimp.org>
+Date: Sun, 6 Nov 2016 21:34:43 +0100
+Subject: Bug 773233 - CVE-2007-3126 - Gimp 2.3.14 allows context-dependent
+ attackers...
+
+...to cause a denial of service (crash) via an ICO file with an
+InfoHeader containing a Height of zero
+
+Add some error handling to ico-load.c and bail out on zero width or height
+icons. Also some formatting cleanup.
+---
+ plug-ins/file-ico/ico-load.c | 103 ++++++++++++++++++++++++++-----------------
+ 1 file changed, 62 insertions(+), 41 deletions(-)
+
+diff --git a/plug-ins/file-ico/ico-load.c b/plug-ins/file-ico/ico-load.c
+index c8091d3..8cce94f 100644
+--- a/plug-ins/file-ico/ico-load.c
++++ b/plug-ins/file-ico/ico-load.c
+@@ -124,15 +124,17 @@ static guint32
+ ico_read_init (FILE *fp)
+ {
+ IcoFileHeader header;
++
+ /* read and check file header */
+- if (!ico_read_int16 (fp, &header.reserved, 1)
+- || !ico_read_int16 (fp, &header.resource_type, 1)
+- || !ico_read_int16 (fp, &header.icon_count, 1)
+- || header.reserved != 0
+- || header.resource_type != 1)
++ if (! ico_read_int16 (fp, &header.reserved, 1) ||
++ ! ico_read_int16 (fp, &header.resource_type, 1) ||
++ ! ico_read_int16 (fp, &header.icon_count, 1) ||
++ header.reserved != 0 ||
++ header.resource_type != 1)
+ {
+ return 0;
+ }
++
+ return header.icon_count;
+ }
+
+@@ -148,22 +150,25 @@ ico_read_size (FILE *fp,
+ gint32 color_type;
+ guint32 magic;
+
+- if ( fseek (fp, info->offset, SEEK_SET) < 0 )
++ if (fseek (fp, info->offset, SEEK_SET) < 0)
+ return FALSE;
+
+ ico_read_int32 (fp, &magic, 1);
++
+ if (magic == ICO_PNG_MAGIC)
+ {
+ png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL,
+ NULL);
+- if (! png_ptr )
++ if (! png_ptr)
+ return FALSE;
++
+ info_ptr = png_create_info_struct (png_ptr);
+- if (! info_ptr )
++ if (! info_ptr)
+ {
+ png_destroy_read_struct (&png_ptr, NULL, NULL);
+ return FALSE;
+ }
++
+ if (setjmp (png_jmpbuf (png_ptr)))
+ {
+ png_destroy_read_struct (&png_ptr, NULL, NULL);
+@@ -182,8 +187,8 @@ ico_read_size (FILE *fp,
+ }
+ else if (magic == 40)
+ {
+- if (ico_read_int32 (fp, &info->width, 1)
+- && ico_read_int32 (fp, &info->height, 1))
++ if (ico_read_int32 (fp, &info->width, 1) &&
++ ico_read_int32 (fp, &info->height, 1))
+ {
+ info->height /= 2;
+ D(("ico_read_size: ICO: %ix%i\n", info->width, info->height));
+@@ -200,8 +205,9 @@ ico_read_size (FILE *fp,
+ }
+
+ static IcoLoadInfo*
+-ico_read_info (FILE *fp,
+- gint icon_count)
++ico_read_info (FILE *fp,
++ gint icon_count,
++ GError **error)
+ {
+ gint i;
+ IcoFileEntry *entries;
+@@ -209,8 +215,11 @@ ico_read_info (FILE *fp,
+
+ /* read icon entries */
+ entries = g_new (IcoFileEntry, icon_count);
+- if ( fread (entries, sizeof(IcoFileEntry), icon_count, fp) <= 0 )
++ if (fread (entries, sizeof (IcoFileEntry), icon_count, fp) <= 0)
+ {
++ g_set_error (error, G_FILE_ERROR, 0,
++ _("Could not read '%lu' bytes"),
++ sizeof (IcoFileEntry));
+ g_free (entries);
+ return NULL;
+ }
+@@ -218,23 +227,33 @@ ico_read_info (FILE *fp,
+ info = g_new (IcoLoadInfo, icon_count);
+ for (i = 0; i < icon_count; i++)
+ {
+- info[i].width = entries[i].width;
++ info[i].width = entries[i].width;
+ info[i].height = entries[i].height;
+- info[i].bpp = GUINT16_FROM_LE (entries[i].bpp);
+- info[i].size = GUINT32_FROM_LE (entries[i].size);
++ info[i].bpp = GUINT16_FROM_LE (entries[i].bpp);
++ info[i].size = GUINT32_FROM_LE (entries[i].size);
+ info[i].offset = GUINT32_FROM_LE (entries[i].offset);
+
+ if (info[i].width == 0 || info[i].height == 0)
+ {
+- ico_read_size (fp, info+i);
++ ico_read_size (fp, info + i);
+ }
+
+ D(("ico_read_info: %ix%i (%i bits, size: %i, offset: %i)\n",
+ info[i].width, info[i].height, info[i].bpp,
+ info[i].size, info[i].offset));
++
++ if (info[i].width == 0 || info[i].height == 0)
++ {
++ g_set_error (error, G_FILE_ERROR, 0,
++ _("Icon #%d has zero width or height"), i);
++ g_free (info);
++ g_free (entries);
++ return NULL;
++ }
+ }
+
+ g_free (entries);
++
+ return info;
+ }
+
+@@ -256,10 +275,10 @@ ico_read_png (FILE *fp,
+ gint i;
+
+ png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+- if (! png_ptr )
++ if (! png_ptr)
+ return FALSE;
+ info = png_create_info_struct (png_ptr);
+- if (! info )
++ if (! info)
+ {
+ png_destroy_read_struct (&png_ptr, NULL, NULL);
+ return FALSE;
+@@ -287,14 +306,14 @@ ico_read_png (FILE *fp,
+ {
+ case PNG_COLOR_TYPE_GRAY:
+ png_set_expand_gray_1_2_4_to_8 (png_ptr);
+- if ( bit_depth == 16 )
++ if (bit_depth == 16)
+ png_set_strip_16 (png_ptr);
+ png_set_gray_to_rgb (png_ptr);
+ png_set_add_alpha (png_ptr, 0xff, PNG_FILLER_AFTER);
+ break;
+ case PNG_COLOR_TYPE_GRAY_ALPHA:
+ png_set_expand_gray_1_2_4_to_8 (png_ptr);
+- if ( bit_depth == 16 )
++ if (bit_depth == 16)
+ png_set_strip_16 (png_ptr);
+ png_set_gray_to_rgb (png_ptr);
+ break;
+@@ -427,16 +446,18 @@ ico_read_icon (FILE *fp,
+ data.planes, data.image_size, data.bpp,
+ data.used_clrs, data.important_clrs));
+
+- if (data.planes != 1
+- || data.compression != 0)
++ if (data.planes != 1 ||
++ data.compression != 0)
+ {
+ D(("skipping image: invalid header\n"));
+ return FALSE;
+ }
+
+- if (data.bpp != 1 && data.bpp != 4
+- && data.bpp != 8 && data.bpp != 24
+- && data.bpp != 32)
++ if (data.bpp != 1 &&
++ data.bpp != 4 &&
++ data.bpp != 8 &&
++ data.bpp != 24 &&
++ data.bpp != 32)
+ {
+ D(("skipping image: invalid depth: %i\n", data.bpp));
+ return FALSE;
+@@ -590,8 +611,8 @@ ico_load_layer (FILE *fp,
+ GeglBuffer *buffer;
+ gchar name[ICO_MAXBUF];
+
+- if ( fseek (fp, info->offset, SEEK_SET) < 0
+- || !ico_read_int32 (fp, &first_bytes, 1) )
++ if (fseek (fp, info->offset, SEEK_SET) < 0 ||
++ ! ico_read_int32 (fp, &first_bytes, 1))
+ return -1;
+
+ if (first_bytes == ICO_PNG_MAGIC)
+@@ -643,7 +664,7 @@ ico_load_image (const gchar *filename,
+ gimp_filename_to_utf8 (filename));
+
+ fp = g_fopen (filename, "rb");
+- if (! fp )
++ if (! fp)
+ {
+ g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno),
+ _("Could not open '%s' for reading: %s"),
+@@ -658,8 +679,8 @@ ico_load_image (const gchar *filename,
+ return -1;
+ }
+
+- info = ico_read_info (fp, icon_count);
+- if (!info)
++ info = ico_read_info (fp, icon_count, error);
++ if (! info)
+ {
+ fclose (fp);
+ return -1;
+@@ -670,12 +691,12 @@ ico_load_image (const gchar *filename,
+ max_height = 0;
+ for (i = 0; i < icon_count; i++)
+ {
+- if ( info[i].width > max_width )
++ if (info[i].width > max_width)
+ max_width = info[i].width;
+- if ( info[i].height > max_height )
++ if (info[i].height > max_height)
+ max_height = info[i].height;
+ }
+- if ( max_width <= 0 || max_height <= 0 )
++ if (max_width <= 0 || max_height <= 0)
+ {
+ g_free (info);
+ fclose (fp);
+@@ -721,7 +742,7 @@ ico_load_thumbnail_image (const gchar *filename,
+ gimp_filename_to_utf8 (filename));
+
+ fp = g_fopen (filename, "rb");
+- if (! fp )
++ if (! fp)
+ {
+ g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno),
+ _("Could not open '%s' for reading: %s"),
+@@ -730,7 +751,7 @@ ico_load_thumbnail_image (const gchar *filename,
+ }
+
+ icon_count = ico_read_init (fp);
+- if (! icon_count )
++ if (! icon_count)
+ {
+ fclose (fp);
+ return -1;
+@@ -739,8 +760,8 @@ ico_load_thumbnail_image (const gchar *filename,
+ D(("*** %s: Microsoft icon file, containing %i icon(s)\n",
+ filename, icon_count));
+
+- info = ico_read_info (fp, icon_count);
+- if (! info )
++ info = ico_read_info (fp, icon_count, error);
++ if (! info)
+ {
+ fclose (fp);
+ return -1;
+@@ -758,9 +779,9 @@ ico_load_thumbnail_image (const gchar *filename,
+
+ match = i;
+ }
+- else if ( w == info[i].width
+- && h == info[i].height
+- && info[i].bpp > bpp )
++ else if (w == info[i].width &&
++ h == info[i].height &&
++ info[i].bpp > bpp)
+ {
+ /* better quality */
+ bpp = info[i].bpp;
+--
+cgit v0.12
+
diff --git a/media-gfx/gimp/files/gimp-2.9.4-gegl-bin.patch b/media-gfx/gimp/files/gimp-2.9.4-gegl-bin.patch
new file mode 100644
index 000000000000..31057b5796df
--- /dev/null
+++ b/media-gfx/gimp/files/gimp-2.9.4-gegl-bin.patch
@@ -0,0 +1,28 @@
+From 8d5de5ce62cd0410c9bccaa77725d0cad051faad Mon Sep 17 00:00:00 2001
+From: Sebastian Pipping <sebastian@pipping.org>
+Date: Mon, 18 Jul 2016 17:42:45 +0200
+Subject: [PATCH] Fix gegl executable name to check for
+
+---
+ configure.ac | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 45b31b1..0e5be99 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -674,9 +674,9 @@ else
+ fi
+ AC_MSG_RESULT($have_glib_2_43)
+
+-AC_PATH_PROG(GEGL, gegl, no)
++AC_PATH_PROG(GEGL, gegl-0.3, no)
+ if test "x$GEGL" = xno; then
+- add_deps_error([gegl], [Could not find gegl in your PATH.])
++ add_deps_error([gegl], [Could not find gegl-0.3 in your PATH.])
+ fi
+
+
+--
+2.9.2
+
diff --git a/media-gfx/gimp/files/gimp-2.9.4-mkdir-makefile.patch b/media-gfx/gimp/files/gimp-2.9.4-mkdir-makefile.patch
new file mode 100644
index 000000000000..661ad699f5de
--- /dev/null
+++ b/media-gfx/gimp/files/gimp-2.9.4-mkdir-makefile.patch
@@ -0,0 +1,36 @@
+From c081a26345ad1c5bdf6f4ffec27bca517de6d594 Mon Sep 17 00:00:00 2001
+From: Sebastian Pipping <sebastian@pipping.org>
+Date: Sat, 23 Jul 2016 01:02:10 +0200
+Subject: [PATCH] Fix creation of output directories
+
+https://bugs.gentoo.org/show_bug.cgi?id=589394
+---
+ icons/Symbolic-Inverted/Makefile.am | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/icons/Symbolic-Inverted/Makefile.am b/icons/Symbolic-Inverted/Makefile.am
+index 2981cfc..f3fe6a5 100644
+--- a/icons/Symbolic-Inverted/Makefile.am
++++ b/icons/Symbolic-Inverted/Makefile.am
+@@ -10,14 +10,14 @@ include $(top_srcdir)/icons/icon-list.mk
+ # As exceptions, we do not want to invert some icons.
+ # Just use these as-is: gimp-default-colors, gimp-toilet-paper.png.
+ 12/gimp-default-colors.png: $(top_srcdir)/icons/Symbolic/12/gimp-default-colors.png
+- mkdir -p `dirname $<` && cp -f $< $@
++ mkdir -p `dirname $@` && cp -f $< $@
+ scalable/gimp-default-colors.svg: ../Symbolic/scalable/gimp-default-colors.svg
+- mkdir -p `dirname $<` && cp -f $< $@
++ mkdir -p `dirname $@` && cp -f $< $@
+
+ %/gimp-toilet-paper.png: $(top_srcdir)/icons/Symbolic/$(@D)/gimp-toilet-paper.png
+- mkdir -p `dirname $<` && cp -f $< $@
++ mkdir -p `dirname $@` && cp -f $< $@
+ scalable/gimp-toilet-paper.svg: ../Symbolic/scalable/gimp-toilet-paper.svg
+- mkdir -p `dirname $<` && cp -f $< $@
++ mkdir -p `dirname $@` && cp -f $< $@
+
+ # Other exceptions: inverted gimp-color-picker-white|black are generated
+ # from each other.
+--
+2.9.2
+
diff --git a/media-gfx/gimp/files/gimp-2.9.6-underlinking.patch b/media-gfx/gimp/files/gimp-2.9.6-underlinking.patch
new file mode 100644
index 000000000000..9208c2f329b3
--- /dev/null
+++ b/media-gfx/gimp/files/gimp-2.9.6-underlinking.patch
@@ -0,0 +1,20 @@
+diff --git a/libgimpbase/Makefile.am b/libgimpbase/Makefile.am
+index a1a6719..85c8518 100644
+--- a/libgimpbase/Makefile.am
++++ b/libgimpbase/Makefile.am
+@@ -22,6 +22,7 @@ uninstall-libtool-import-lib:
+ -rm $(DESTDIR)$(libdir)/libgimpbase-$(GIMP_API_VERSION).dll.a
+ -rm $(DESTDIR)$(libdir)/gimpbase.def
+ else
++libm = -lm
+ install-libtool-import-lib:
+ uninstall-libtool-import-lib:
+ endif
+@@ -169,6 +170,7 @@ EXTRA_libgimpbase_@GIMP_API_VERSION@_la_DEPENDENCIES = $(gimpbase_def)
+ libgimpbase_@GIMP_API_VERSION@_la_LIBADD = \
+ $(GIO_LIBS) \
+ $(GEXIV2_LIBS) \
++ $(libm) \
+ $(ole32_lib)
+
+ install-data-local: install-ms-lib install-libtool-import-lib