Accepting request 102529 from GNOME:Apps

Update to 2.6.12 (forwarded request 102347 from vuntz)

OBS-URL: https://build.opensuse.org/request/show/102529
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/gimp?expand=0&rev=74
This commit is contained in:
Stephan Kulow 2012-02-03 09:22:22 +00:00 committed by Git OBS Bridge
parent 67dbebd0df
commit c89b1f9fcc
10 changed files with 28 additions and 840 deletions

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9b6d08d0803b3912ea596d1b77b9c21ee13778c23388a225c004b8c1587cb0a1
size 16473561

3
gimp-2.6.12.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d553c9f1c07f59fa7b7ce9cc5f84ce59bf4e9dfb5b6ee4bd8718b74b947aec62
size 16745411

View File

@ -1,129 +0,0 @@
From 7fb0300e1cfdb98a3bde54dbc73a0f3eda375162 Mon Sep 17 00:00:00 2001
From: Simon Budig <simon@budig.de>
Date: Tue, 11 Jan 2011 22:28:16 +0000
Subject: fixes for some buffer overflow problems (see bug #639203)
---
diff --git a/plug-ins/common/sphere-designer.c b/plug-ins/common/sphere-designer.c
index 4e5b982..6dea871 100644
--- a/plug-ins/common/sphere-designer.c
+++ b/plug-ins/common/sphere-designer.c
@@ -1993,6 +1993,7 @@ loadit (const gchar * fn)
gchar endbuf[21 * (G_ASCII_DTOSTR_BUF_SIZE + 1)];
gchar *end = endbuf;
gchar line[1024];
+ gchar fmt_str[16];
gint i;
texture *t;
gint majtype, type;
@@ -2017,6 +2018,8 @@ loadit (const gchar * fn)
s.com.numtexture = 0;
+ snprintf (fmt_str, sizeof (fmt_str), "%%d %%d %%%lds", sizeof (endbuf) - 1);
+
while (!feof (f))
{
@@ -2027,7 +2030,7 @@ loadit (const gchar * fn)
t = &s.com.texture[i];
setdefaults (t);
- if (sscanf (line, "%d %d %s", &t->majtype, &t->type, end) != 3)
+ if (sscanf (line, fmt_str, &t->majtype, &t->type, end) != 3)
t->color1.x = g_ascii_strtod (end, &end);
if (end && errno != ERANGE)
t->color1.y = g_ascii_strtod (end, &end);
diff --git a/plug-ins/gfig/gfig-style.c b/plug-ins/gfig/gfig-style.c
index ee1c7b2..eae78f8 100644
--- a/plug-ins/gfig/gfig-style.c
+++ b/plug-ins/gfig/gfig-style.c
@@ -164,6 +164,7 @@ gfig_read_parameter_gimp_rgb (gchar **text,
gchar *ptr;
gchar *tmpstr;
gchar *endptr;
+ gchar fmt_str[32];
gchar colorstr_r[G_ASCII_DTOSTR_BUF_SIZE];
gchar colorstr_g[G_ASCII_DTOSTR_BUF_SIZE];
gchar colorstr_b[G_ASCII_DTOSTR_BUF_SIZE];
@@ -171,6 +172,10 @@ gfig_read_parameter_gimp_rgb (gchar **text,
style_entry->r = style_entry->g = style_entry->b = style_entry->a = 0.;
+ snprintf (fmt_str, sizeof (fmt_str), "%%%lds %%%lds %%%lds %%%lds",
+ sizeof (colorstr_r) - 1, sizeof (colorstr_g) - 1,
+ sizeof (colorstr_b) - 1, sizeof (colorstr_a) - 1);
+
while (n < nitems)
{
ptr = strchr (text[n], ':');
@@ -180,7 +185,8 @@ gfig_read_parameter_gimp_rgb (gchar **text,
ptr++;
if (!strcmp (tmpstr, name))
{
- sscanf (ptr, "%s %s %s %s", colorstr_r, colorstr_g, colorstr_b, colorstr_a);
+ sscanf (ptr, fmt_str,
+ colorstr_r, colorstr_g, colorstr_b, colorstr_a);
style_entry->r = g_ascii_strtod (colorstr_r, &endptr);
style_entry->g = g_ascii_strtod (colorstr_g, &endptr);
style_entry->b = g_ascii_strtod (colorstr_b, &endptr);
diff --git a/plug-ins/lighting/lighting-ui.c b/plug-ins/lighting/lighting-ui.c
index 99fb348..126f6e2 100644
--- a/plug-ins/lighting/lighting-ui.c
+++ b/plug-ins/lighting/lighting-ui.c
@@ -1345,6 +1345,7 @@ load_preset_response (GtkFileChooser *chooser,
gchar buffer3[G_ASCII_DTOSTR_BUF_SIZE];
gchar type_label[21];
gchar *endptr;
+ gchar fmt_str[32];
if (response_id == GTK_RESPONSE_OK)
{
@@ -1384,23 +1385,41 @@ load_preset_response (GtkFileChooser *chooser,
return;
}
- fscanf (fp, " Position: %s %s %s", buffer1, buffer2, buffer3);
+ snprintf (fmt_str, sizeof (fmt_str),
+ " Position: %%%lds %%%lds %%%lds",
+ sizeof (buffer1) - 1,
+ sizeof (buffer2) - 1,
+ sizeof (buffer3) - 1);
+ fscanf (fp, fmt_str, buffer1, buffer2, buffer3);
source->position.x = g_ascii_strtod (buffer1, &endptr);
source->position.y = g_ascii_strtod (buffer2, &endptr);
source->position.z = g_ascii_strtod (buffer3, &endptr);
- fscanf (fp, " Direction: %s %s %s", buffer1, buffer2, buffer3);
+ snprintf (fmt_str, sizeof (fmt_str),
+ " Direction: %%%lds %%%lds %%%lds",
+ sizeof (buffer1) - 1,
+ sizeof (buffer2) - 1,
+ sizeof (buffer3) - 1);
+ fscanf (fp, fmt_str, buffer1, buffer2, buffer3);
source->direction.x = g_ascii_strtod (buffer1, &endptr);
source->direction.y = g_ascii_strtod (buffer2, &endptr);
source->direction.z = g_ascii_strtod (buffer3, &endptr);
- fscanf (fp, " Color: %s %s %s", buffer1, buffer2, buffer3);
+ snprintf (fmt_str, sizeof (fmt_str),
+ " Color: %%%lds %%%lds %%%lds",
+ sizeof (buffer1) - 1,
+ sizeof (buffer2) - 1,
+ sizeof (buffer3) - 1);
+ fscanf (fp, fmt_str, buffer1, buffer2, buffer3);
source->color.r = g_ascii_strtod (buffer1, &endptr);
source->color.g = g_ascii_strtod (buffer2, &endptr);
source->color.b = g_ascii_strtod (buffer3, &endptr);
source->color.a = 1.0;
- fscanf (fp, " Intensity: %s", buffer1);
+ snprintf (fmt_str, sizeof (fmt_str),
+ " Intensity: %%%lds",
+ sizeof (buffer1) - 1);
+ fscanf (fp, fmt_str, buffer1);
source->intensity = g_ascii_strtod (buffer1, &endptr);
}
--
cgit v0.8.3.1

View File

@ -1,23 +0,0 @@
From 48ec15890e1751dede061f6d1f469b6508c13439 Mon Sep 17 00:00:00 2001
From: Simon Budig <simon@budig.de>
Date: Mon, 14 Feb 2011 20:46:31 +0000
Subject: file-psp: fix for bogus input data. Fixes bug #639203
---
diff --git a/plug-ins/common/file-psp.c b/plug-ins/common/file-psp.c
index ef39d5b..04897d5 100644
--- a/plug-ins/common/file-psp.c
+++ b/plug-ins/common/file-psp.c
@@ -1197,6 +1197,10 @@ read_channel_data (FILE *f,
}
else
fread (buf, runcount, 1, f);
+
+ /* prevent buffer overflow for bogus data */
+ runcount = MIN (runcount, endq - q);
+
if (bytespp == 1)
{
memmove (q, buf, runcount);
--
cgit v0.8.3.1

View File

@ -1,109 +0,0 @@
From 0eae221c7c6eb84591d718587a17ea90c8852d5b Mon Sep 17 00:00:00 2001
From: Nils Philippsen <nils@redhat.com>
Date: Thu, 04 Aug 2011 10:47:44 +0000
Subject: file-gif-load: ensure return value of LZWReadByte() is <= 255
(cherry picked from commit b1a3de761362db982c0ddfaff60ab4a3c4267f32)
---
diff --git a/plug-ins/common/file-gif-load.c b/plug-ins/common/file-gif-load.c
index 9a0720b..a4d98fc 100644
--- a/plug-ins/common/file-gif-load.c
+++ b/plug-ins/common/file-gif-load.c
@@ -743,11 +743,11 @@ LZWReadByte (FILE *fd,
}
while (firstcode == clear_code);
- return firstcode;
+ return firstcode & 255;
}
if (sp > stack)
- return *--sp;
+ return (*--sp) & 255;
while ((code = GetCode (fd, code_size, FALSE)) >= 0)
{
@@ -770,7 +770,7 @@ LZWReadByte (FILE *fd,
sp = stack;
firstcode = oldcode = GetCode (fd, code_size, FALSE);
- return firstcode;
+ return firstcode & 255;
}
else if (code == end_code)
{
@@ -826,10 +826,10 @@ LZWReadByte (FILE *fd,
oldcode = incode;
if (sp > stack)
- return *--sp;
+ return (*--sp) & 255;
}
- return code;
+ return code & 255;
}
static gint32
--
cgit v0.9.0.2
From 62718f821b7c79a6860b8b25f0a21a91daa6e22d Mon Sep 17 00:00:00 2001
From: Nils Philippsen <nils@redhat.com>
Date: Thu, 04 Aug 2011 10:51:42 +0000
Subject: file-gif-load: fix heap corruption and buffer overflow (CVE-2011-2896)
(cherry picked from commit 376ad788c1a1c31d40f18494889c383f6909ebfc)
---
diff --git a/plug-ins/common/file-gif-load.c b/plug-ins/common/file-gif-load.c
index a4d98fc..8460ec0 100644
--- a/plug-ins/common/file-gif-load.c
+++ b/plug-ins/common/file-gif-load.c
@@ -697,7 +697,8 @@ LZWReadByte (FILE *fd,
static gint firstcode, oldcode;
static gint clear_code, end_code;
static gint table[2][(1 << MAX_LZW_BITS)];
- static gint stack[(1 << (MAX_LZW_BITS)) * 2], *sp;
+#define STACK_SIZE ((1 << (MAX_LZW_BITS)) * 2)
+ static gint stack[STACK_SIZE], *sp;
gint i;
if (just_reset_LZW)
@@ -772,7 +773,7 @@ LZWReadByte (FILE *fd,
return firstcode & 255;
}
- else if (code == end_code)
+ else if (code == end_code || code > max_code)
{
gint count;
guchar buf[260];
@@ -791,13 +792,14 @@ LZWReadByte (FILE *fd,
incode = code;
- if (code >= max_code)
+ if (code == max_code)
{
- *sp++ = firstcode;
+ if (sp < &(stack[STACK_SIZE]))
+ *sp++ = firstcode;
code = oldcode;
}
- while (code >= clear_code)
+ while (code >= clear_code && sp < &(stack[STACK_SIZE]))
{
*sp++ = table[1][code];
if (code == table[0][code])
@@ -808,7 +810,8 @@ LZWReadByte (FILE *fd,
code = table[0][code];
}
- *sp++ = firstcode = table[1][code];
+ if (sp < &(stack[STACK_SIZE]))
+ *sp++ = firstcode = table[1][code];
if ((code = max_code) < (1 << MAX_LZW_BITS))
{
--
cgit v0.9.0.2

View File

@ -1,39 +0,0 @@
From 582cb0f14eb9f145bd2a2f5c9fda12309ae0229f Mon Sep 17 00:00:00 2001
From: Manish Singh <yosh@gimp.org>
Date: Sun, 24 May 2009 17:42:39 +0000
Subject: Explicitly specify library dependencies at link time, so we can use gold.
---
(limited to 'libgimpthumb/Makefile.am')
diff --git a/libgimpthumb/Makefile.am b/libgimpthumb/Makefile.am
index a78a83a..98acd24 100644
--- a/libgimpthumb/Makefile.am
+++ b/libgimpthumb/Makefile.am
@@ -86,7 +86,10 @@ noinst_PROGRAMS = gimp-thumbnail-list
gimp_thumbnail_list_SOURCES = gimp-thumbnail-list.c
-gimp_thumbnail_list_LDADD = libgimpthumb-$(GIMP_API_VERSION).la
+gimp_thumbnail_list_LDADD = \
+ libgimpthumb-$(GIMP_API_VERSION).la \
+ $(GDK_PIXBUF_LIBS) \
+ $(GLIB_LIBS)
install-data-local: install-ms-lib install-libtool-import-lib
--
cgit v0.9.0.2
Index: gimp-2.6.11/plug-ins/script-fu/Makefile.am
===================================================================
--- gimp-2.6.11.orig/plug-ins/script-fu/Makefile.am
+++ gimp-2.6.11/plug-ins/script-fu/Makefile.am
@@ -8,7 +8,7 @@ libgimpbase = $(top_builddir)/libgimpbas
libgimpconfig = $(top_builddir)/libgimpconfig/libgimpconfig-$(GIMP_API_VERSION).la
libgimpmath = $(top_builddir)/libgimpmath/libgimpmath-$(GIMP_API_VERSION).la
-libtinyscheme=tinyscheme/libtinyscheme.a
+libtinyscheme=tinyscheme/libtinyscheme.a -lm
libftx=ftx/libftx.a
if OS_WIN32

View File

@ -1,476 +0,0 @@
From 69f69eed816b89be9a01a48a1f0643d1fd496118 Mon Sep 17 00:00:00 2001
From: Nils Philippsen <nils@redhat.com>
Date: Fri, 6 May 2011 11:58:44 +0200
Subject: [PATCH] patch: poppler-0.17
Squashed commit of the following:
commit 529d940222dfc352d41fbf72de29134421aa4002
Author: Nils Philippsen <nils@redhat.com>
Date: Fri May 6 11:50:30 2011 +0200
use code based on pixbufs instead of cairo surfaces
this is done to avoid adding to libgimp, thanks to Mukund Sivaraman for
hints how to do this
commit f8671d8767d4cdab830dc06310e96c63a88ec0fd
Author: Mukund Sivaraman <muks@banu.com>
Date: Thu Apr 21 13:57:13 2011 +0530
file-pdf-load: Update attribution, removing bogus copyright
(cherry picked from commit e999122e0b20b6ccd6bde3ce039bb64068fc0019)
commit 89a78f2590d298dac2f42e6d9a3016fc5d672c70
Author: Nils Philippsen <nils@redhat.com>
Date: Thu Apr 21 13:52:18 2011 +0200
file-pdf-load: Use better API + cleanups
* fixes issues with poppler 0.17 completely
* uses new libgimp API to pass surfaces instead of pixbufs
* uses GTK+ 3 API to convert surfaces to pixbufs where available
(backported from commit 7bdadd80ba479d6ff904e276d805e16f6b940ee2)
commit 4e92302c4a14a961f112587a0ad86696c88da2f8
Author: Nils Philippsen <nils@redhat.com>
Date: Thu Apr 21 13:38:08 2011 +0200
file-pdf-load: Don't use deprecated API (bug #646947)
(cherry picked from commit 9b3e1c91fd2eac69da6947ec9c7fbf10096ba237)
Conflicts:
plug-ins/common/file-pdf.c
---
plug-ins/common/file-pdf.c | 323 ++++++++++++++++++++++++++++++++++++++------
1 files changed, 283 insertions(+), 40 deletions(-)
diff --git a/plug-ins/common/file-pdf.c b/plug-ins/common/file-pdf.c
index a43b459..43c2b7d 100644
--- a/plug-ins/common/file-pdf.c
+++ b/plug-ins/common/file-pdf.c
@@ -4,6 +4,9 @@
*
* Copyright (C) 2005 Nathan Summers
*
+ * Some code in render_page_to_surface() borrowed from
+ * poppler.git/glib/poppler-page.cc.
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -80,16 +83,20 @@ static gboolean load_dialog (PopplerDocument *doc,
static PopplerDocument * open_document (const gchar *filename,
GError **error);
-static GdkPixbuf * get_thumbnail (PopplerDocument *doc,
+static cairo_surface_t * get_thumb_surface (PopplerDocument *doc,
+ gint page,
+ gint preferred_size);
+
+static GdkPixbuf * get_thumb_pixbuf (PopplerDocument *doc,
gint page,
gint preferred_size);
static gint32 layer_from_pixbuf (gint32 image,
- const gchar *layer_name,
- gint position,
- GdkPixbuf *buf,
- gdouble progress_start,
- gdouble progress_scale);
+ const gchar *layer_name,
+ gint position,
+ GdkPixbuf *pixbuf,
+ gdouble progress_start,
+ gdouble progress_scale);
/**
** the following was formerly part of
@@ -433,11 +440,12 @@ run (const gchar *name,
}
else
{
- gdouble width = 0;
- gdouble height = 0;
- gdouble scale;
- gint32 image = -1;
- GdkPixbuf *pixbuf = NULL;
+ gdouble width = 0;
+ gdouble height = 0;
+ gdouble scale;
+ gint32 image = -1;
+ gint num_pages = 0;
+ GdkPixbuf *pixbuf = NULL;
/* Possibly retrieve last settings */
gimp_get_data (LOAD_PROC, &loadvals);
@@ -455,7 +463,10 @@ run (const gchar *name,
g_object_unref (page);
}
- pixbuf = get_thumbnail (doc, 0, param[1].data.d_int32);
+ num_pages = poppler_document_get_n_pages (doc);
+
+ pixbuf = get_thumb_pixbuf (doc, 0, param[1].data.d_int32);
+
g_object_unref (doc);
}
@@ -548,6 +559,187 @@ open_document (const gchar *filename,
return doc;
}
+/* FIXME: Remove this someday when we depend fully on GTK+ >= 3 */
+
+#if (!GTK_CHECK_VERSION (3, 0, 0))
+
+static cairo_format_t
+gdk_cairo_format_for_content (cairo_content_t content)
+{
+ switch (content)
+ {
+ case CAIRO_CONTENT_COLOR:
+ return CAIRO_FORMAT_RGB24;
+ case CAIRO_CONTENT_ALPHA:
+ return CAIRO_FORMAT_A8;
+ case CAIRO_CONTENT_COLOR_ALPHA:
+ default:
+ return CAIRO_FORMAT_ARGB32;
+ }
+}
+
+static cairo_surface_t *
+gdk_cairo_surface_coerce_to_image (cairo_surface_t *surface,
+ cairo_content_t content,
+ int src_x,
+ int src_y,
+ int width,
+ int height)
+{
+ cairo_surface_t *copy;
+ cairo_t *cr;
+
+ copy = cairo_image_surface_create (gdk_cairo_format_for_content (content),
+ width,
+ height);
+
+ cr = cairo_create (copy);
+ cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+ cairo_set_source_surface (cr, surface, -src_x, -src_y);
+ cairo_paint (cr);
+ cairo_destroy (cr);
+
+ return copy;
+}
+
+static void
+convert_alpha (guchar *dest_data,
+ int dest_stride,
+ guchar *src_data,
+ int src_stride,
+ int src_x,
+ int src_y,
+ int width,
+ int height)
+{
+ int x, y;
+
+ src_data += src_stride * src_y + src_x * 4;
+
+ for (y = 0; y < height; y++) {
+ guint32 *src = (guint32 *) src_data;
+
+ for (x = 0; x < width; x++) {
+ guint alpha = src[x] >> 24;
+
+ if (alpha == 0)
+ {
+ dest_data[x * 4 + 0] = 0;
+ dest_data[x * 4 + 1] = 0;
+ dest_data[x * 4 + 2] = 0;
+ }
+ else
+ {
+ dest_data[x * 4 + 0] = (((src[x] & 0xff0000) >> 16) * 255 + alpha / 2) / alpha;
+ dest_data[x * 4 + 1] = (((src[x] & 0x00ff00) >> 8) * 255 + alpha / 2) / alpha;
+ dest_data[x * 4 + 2] = (((src[x] & 0x0000ff) >> 0) * 255 + alpha / 2) / alpha;
+ }
+ dest_data[x * 4 + 3] = alpha;
+ }
+
+ src_data += src_stride;
+ dest_data += dest_stride;
+ }
+}
+
+static void
+convert_no_alpha (guchar *dest_data,
+ int dest_stride,
+ guchar *src_data,
+ int src_stride,
+ int src_x,
+ int src_y,
+ int width,
+ int height)
+{
+ int x, y;
+
+ src_data += src_stride * src_y + src_x * 4;
+
+ for (y = 0; y < height; y++) {
+ guint32 *src = (guint32 *) src_data;
+
+ for (x = 0; x < width; x++) {
+ dest_data[x * 3 + 0] = src[x] >> 16;
+ dest_data[x * 3 + 1] = src[x] >> 8;
+ dest_data[x * 3 + 2] = src[x];
+ }
+
+ src_data += src_stride;
+ dest_data += dest_stride;
+ }
+}
+
+/**
+ * gdk_pixbuf_get_from_surface:
+ * @surface: surface to copy from
+ * @src_x: Source X coordinate within @surface
+ * @src_y: Source Y coordinate within @surface
+ * @width: Width in pixels of region to get
+ * @height: Height in pixels of region to get
+ *
+ * Transfers image data from a #cairo_surface_t and converts it to an RGB(A)
+ * representation inside a #GdkPixbuf. This allows you to efficiently read
+ * individual pixels from cairo surfaces. For #GdkWindows, use
+ * gdk_pixbuf_get_from_window() instead.
+ *
+ * This function will create an RGB pixbuf with 8 bits per channel.
+ * The pixbuf will contain an alpha channel if the @surface contains one.
+ *
+ * Return value: (transfer full): A newly-created pixbuf with a reference
+ * count of 1, or %NULL on error
+ */
+static GdkPixbuf *
+gdk_pixbuf_get_from_surface (cairo_surface_t *surface,
+ gint src_x,
+ gint src_y,
+ gint width,
+ gint height)
+{
+ cairo_content_t content;
+ GdkPixbuf *dest;
+
+ /* General sanity checks */
+ g_return_val_if_fail (surface != NULL, NULL);
+ g_return_val_if_fail (width > 0 && height > 0, NULL);
+
+ content = cairo_surface_get_content (surface) | CAIRO_CONTENT_COLOR;
+ dest = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
+ !!(content & CAIRO_CONTENT_ALPHA),
+ 8,
+ width, height);
+
+ surface = gdk_cairo_surface_coerce_to_image (surface, content,
+ src_x, src_y,
+ width, height);
+ cairo_surface_flush (surface);
+ if (cairo_surface_status (surface) || dest == NULL)
+ {
+ cairo_surface_destroy (surface);
+ return NULL;
+ }
+
+ if (gdk_pixbuf_get_has_alpha (dest))
+ convert_alpha (gdk_pixbuf_get_pixels (dest),
+ gdk_pixbuf_get_rowstride (dest),
+ cairo_image_surface_get_data (surface),
+ cairo_image_surface_get_stride (surface),
+ 0, 0,
+ width, height);
+ else
+ convert_no_alpha (gdk_pixbuf_get_pixels (dest),
+ gdk_pixbuf_get_rowstride (dest),
+ cairo_image_surface_get_data (surface),
+ cairo_image_surface_get_stride (surface),
+ 0, 0,
+ width, height);
+
+ cairo_surface_destroy (surface);
+ return dest;
+}
+
+#endif
+
static gint32
layer_from_pixbuf (gint32 image,
const gchar *layer_name,
@@ -566,6 +758,54 @@ layer_from_pixbuf (gint32 image,
return layer;
}
+static cairo_surface_t *
+render_page_to_surface (PopplerPage *page,
+ int width,
+ int height,
+ double scale)
+{
+ cairo_surface_t *surface;
+ cairo_t *cr;
+
+ surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
+ cr = cairo_create (surface);
+
+ cairo_save (cr);
+ cairo_translate (cr, 0.0, 0.0);
+
+ if (scale != 1.0)
+ cairo_scale (cr, scale, scale);
+
+ poppler_page_render (page, cr);
+ cairo_restore (cr);
+
+ cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER);
+ cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
+ cairo_paint (cr);
+
+ cairo_destroy (cr);
+
+ return surface;
+}
+
+static GdkPixbuf *
+render_page_to_pixbuf (PopplerPage *page,
+ int width,
+ int height,
+ double scale)
+{
+ GdkPixbuf *pixbuf;
+ cairo_surface_t *surface;
+
+ surface = render_page_to_surface (page, width, height, scale);
+ pixbuf = gdk_pixbuf_get_from_surface (surface, 0, 0,
+ cairo_image_surface_get_width (surface),
+ cairo_image_surface_get_height (surface));
+ cairo_surface_destroy (surface);
+
+ return pixbuf;
+}
+
static gint32
load_image (PopplerDocument *doc,
const gchar *filename,
@@ -597,7 +837,7 @@ load_image (PopplerDocument *doc,
gdouble page_width;
gdouble page_height;
- GdkPixbuf *buf;
+ GdkPixbuf *pixbuf;
gint width;
gint height;
@@ -627,15 +867,13 @@ load_image (PopplerDocument *doc,
gimp_image_set_resolution (image_ID, resolution, resolution);
}
- buf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, width, height);
-
- poppler_page_render_to_pixbuf (page, 0, 0, width, height, scale, 0, buf);
+ pixbuf = render_page_to_pixbuf (page, width, height, scale);
- layer_from_pixbuf (image_ID, page_label, i, buf,
+ layer_from_pixbuf (image_ID, page_label, i, pixbuf,
doc_progress, 1.0 / pages->n_pages);
g_free (page_label);
- g_object_unref (buf);
+ g_object_unref(pixbuf);
doc_progress = (double) (i + 1) / pages->n_pages;
gimp_progress_update (doc_progress);
@@ -676,30 +914,22 @@ load_image (PopplerDocument *doc,
return image_ID;
}
-static GdkPixbuf *
-get_thumbnail (PopplerDocument *doc,
- gint page_num,
- gint preferred_size)
+static cairo_surface_t *
+get_thumb_surface (PopplerDocument *doc,
+ gint page_num,
+ gint preferred_size)
{
PopplerPage *page;
- GdkPixbuf *pixbuf;
+ cairo_surface_t *surface;
page = poppler_document_get_page (doc, page_num);
if (! page)
return NULL;
- /* XXX: Remove conditional when we depend on poppler 0.8.0, but also
- * add configure check to make sure POPPLER_WITH_GDK is enabled!
- */
-#ifdef POPPLER_WITH_GDK
- pixbuf = poppler_page_get_thumbnail_pixbuf (page);
-#else
- pixbuf = poppler_page_get_thumbnail (page);
-#endif
-
+ surface = poppler_page_get_thumbnail (page);
- if (! pixbuf)
+ if (! surface)
{
gdouble width;
gdouble height;
@@ -712,15 +942,28 @@ get_thumbnail (PopplerDocument *doc,
width *= scale;
height *= scale;
- pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
- width, height);
-
- poppler_page_render_to_pixbuf (page,
- 0, 0, width, height, scale, 0, pixbuf);
+ surface = render_page_to_surface (page, width, height, scale);
}
g_object_unref (page);
+ return surface;
+}
+
+static GdkPixbuf *
+get_thumb_pixbuf (PopplerDocument *doc,
+ gint page_num,
+ gint preferred_size)
+{
+ cairo_surface_t *surface;
+ GdkPixbuf *pixbuf;
+
+ surface = get_thumb_surface (doc, page_num, preferred_size);
+ pixbuf = gdk_pixbuf_get_from_surface (surface, 0, 0,
+ cairo_image_surface_get_width (surface),
+ cairo_image_surface_get_height (surface));
+ cairo_surface_destroy (surface);
+
return pixbuf;
}
@@ -769,8 +1012,8 @@ thumbnail_thread (gpointer data)
idle_data->page_no = i;
/* FIXME get preferred size from somewhere? */
- idle_data->pixbuf = get_thumbnail (thread_data->document, i,
- THUMBNAIL_SIZE);
+ idle_data->pixbuf = get_thumb_pixbuf (thread_data->document, i,
+ THUMBNAIL_SIZE);
g_idle_add (idle_set_thumbnail, idle_data);
--
1.7.5

View File

@ -1,24 +0,0 @@
From 16d77f975b2c398a515f91e34ef868dc3bb49228 Mon Sep 17 00:00:00 2001
From: Nils Philippsen <nils@redhat.com>
Date: Wed, 02 Feb 2011 16:11:28 +0000
Subject: Bug 641259 - [abrt] gimp-2:2.6.11-1.fc14: py-slice.py:172:slice:TypeError: integer argument expected, got float
py-slice: cast cellspacing to int in pyslice() to avoid tracebacks
(cherry picked from commit 0af966b63fcc55b36380d6538dfb30000f71fef9)
---
diff --git a/plug-ins/pygimp/plug-ins/py-slice.py b/plug-ins/pygimp/plug-ins/py-slice.py
index 40743f3..ac35f23 100755
--- a/plug-ins/pygimp/plug-ins/py-slice.py
+++ b/plug-ins/pygimp/plug-ins/py-slice.py
@@ -36,6 +36,9 @@ gettext.install("gimp20-python", gimp.locale_directory, unicode=True)
def pyslice(image, drawable, save_path, html_filename,
image_basename, image_extension, separate,
image_path, cellspacing, animate, skip_caps):
+
+ cellspacing = int (cellspacing)
+
if animate:
count = 0
drw = []
--
cgit v0.9.0.2

View File

@ -1,3 +1,20 @@
-------------------------------------------------------------------
Wed Feb 1 09:09:46 UTC 2012 - vuntz@opensuse.org
- Update to version 2.6.12:
+ Bugs fixed: bgo#623045, bgo#627328, bgo#631728, bgo#631885,
bgo#639203, bgo#640219, bgo#640612, bgo#641259, bgo#646947,
bgo#652280, bgo#660305.
+ Updated translations.
- Drop gimp-CVE-2010-4540-and-more.patch: fixed upstream.
- Drop gimp-CVE-2010-4543.patch: fixed upstream.
- Drop gimp-fix-linking.patch: fixed upstream.
- Drop gimp-CVE-2011-2896.patch: fixed upstream.
- Drop gimp-pyslice-cellspacing-fix.patch: fixed upstream.
- Drop gimp-poppler-0.18.patch: fixed upstream.
- Remove call to autoreconf and libtool BuildRequires: they were
only needed for gimp-fix-linking.patch.
-------------------------------------------------------------------
Fri Oct 21 11:19:42 UTC 2011 - vuntz@opensuse.org

View File

@ -1,7 +1,7 @@
#
# spec file for package gimp
#
# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -15,7 +15,6 @@
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
%define build_hal 0%{?suse_version} <= 1140
%global abiver 4
@ -44,7 +43,6 @@ BuildRequires: libpoppler-glib-devel
BuildRequires: librsvg-devel
BuildRequires: libtiff-devel
BuildRequires: libwebkit-devel
BuildRequires: libtool
BuildRequires: libwmf-devel
BuildRequires: pango-devel
BuildRequires: python-gtk-devel
@ -52,28 +50,16 @@ BuildRequires: translation-update-upstream
BuildRequires: update-desktop-files
BuildRequires: xorg-x11-libXfixes-devel
Url: http://www.gimp.org/
Version: 2.6.11
Release: 23
Version: 2.6.12
Release: 0
Summary: The GNU Image Manipulation Program
License: GPL-2.0+
Group: Productivity/Graphics/Bitmap Editors
Summary: The GNU Image Manipulation Program
Source: ftp://ftp.gimp.org/pub/gimp/v2.6/%{name}-%{version}.tar.bz2
Source: ftp://ftp.gimp.org/pub/gimp/stable/%{name}-%{version}.tar.bz2
Source1: macros.gimp
# openSUSE palette file
Source2: openSUSE.gpl
Source99: baselibs.conf
# PATCH-FIX-UPSTREAM gimp-CVE-2010-4540-and-more.patch CVE-2010-4540 CVE-2010-4541 CVE-2010-4542 bgo#639203 bnc#662043 vuntz@opensuse.org -- Fix various buffer overflows
Patch0: gimp-CVE-2010-4540-and-more.patch
# PATCH-FIX-UPSTREAM gimp-CVE-2010-4543.patch CVE-2010-4543 bgo#639203 bnc#662043 vuntz@opensuse.org -- Fix a buffer overflow when reading a psp file
Patch1: gimp-CVE-2010-4543.patch
# PATCH-FIX-UPSTREAM gimp-fix-linking.patch bgo#659586 vuntz@opensuse.org -- Fix linking issue because of missing libs
Patch2: gimp-fix-linking.patch
# PATCH-FIX-UPSTREAM gimp-CVE-2011-2896.patch CVE-2011-2896 bnc#711491 vuntz@opensuse.org -- Fix heap corruption and buffer overflow
Patch3: gimp-CVE-2011-2896.patch
# PATCH-FIX-UPSTREAM gimp-pyslice-cellspacing-fix.patch vuntz@opensuse.org -- Fix pyslice to not crash
Patch4: gimp-pyslice-cellspacing-fix.patch
# PATCH-FIX-UPSTREAM gimp-poppler-0.18.patch vuntz@opensuse.org -- Fix build with poppler 0.18, taken from fedora
Patch5: gimp-poppler-0.18.patch
Requires: %{name}-branding = %{version}
Recommends: %{name}-lang
Recommends: %{name}-help-browser
@ -104,7 +90,6 @@ distribute.
%package -n libgimp-2_0-0
License: GPL-2.0+
Summary: The GNU Image Manipulation Program - Libraries
Group: Productivity/Graphics/Bitmap Editors
@ -124,7 +109,6 @@ This package provides GIMP libraries.
%package -n libgimpui-2_0-0
License: GPL-2.0+
Summary: The GNU Image Manipulation Program - UI Libraries
Group: Productivity/Graphics/Bitmap Editors
@ -144,7 +128,6 @@ This package provides GIMP UI libraries.
%package branding-upstream
License: GPL-2.0+
Summary: The GNU Image Manipulation Program -- Upstream Splash Screen
Group: Productivity/Graphics/Bitmap Editors
Requires: %{name} = %{version}
@ -177,13 +160,12 @@ This package contains the upstream splash screen for the GIMP.
%package plugins-python
License: GPL-2.0+
Summary: The GNU Image Manipulation Program - python-gtk based plugins
Group: Productivity/Graphics/Bitmap Editors
Requires: %{name} = %{version} python-gtk
Supplements: %{name}
Provides: gimp-2.0-plugins-python = %{version}
Obsoletes: gimp-unstable-plugins-python < 2.6.0
Group: Productivity/Graphics/Bitmap Editors
# For update from <= 10.3 and SLED 10:
Provides: %{name}:%{_libdir}/gimp/2.0/plug-ins/pyconsole.py = %{version}
%py_requires
@ -202,13 +184,12 @@ distribute.
%package devel
License: GPL-2.0+
Summary: The GNU Image Manipulation Program
Group: Productivity/Graphics/Bitmap Editors
Requires: libgimp-2_0-0 = %{version}
Requires: libgimpui-2_0-0 = %{version}
Provides: gimp-2.0-devel = %{version}
Obsoletes: gimp-unstable-devel < 2.6.0
Group: Productivity/Graphics/Bitmap Editors
Obsoletes: gimp-doc <= 2.6.4
Provides: gimp-doc = 2.6.4
@ -226,7 +207,6 @@ distribute.
%package help-browser
License: GPL-2.0+
Summary: The GNU Image Manipulation Program - Help Browser
Group: Productivity/Graphics/Bitmap Editors
Requires: %{name} = %{version}
@ -239,11 +219,10 @@ This package contains the help browser for the GIMP.
%if %{build_hal}
%package module-hal
License: GPL-2.0+
Summary: The GNU Image Manipulation Program - module to detect input devices with HAL
Group: Productivity/Graphics/Bitmap Editors
Requires: %{name} = %{version}
Supplements: packageand(%{name}:hal)
Group: Productivity/Graphics/Bitmap Editors
%description module-hal
The GIMP (GNU Image Manipulation Program) is a powerful image
@ -270,12 +249,6 @@ translation-update-upstream po-python gimp20-python
translation-update-upstream po-script-fu gimp20-script-fu
translation-update-upstream po-plug-ins gimp20-std-plug-ins
translation-update-upstream po-tips gimp20-tips
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
# Safety check for ABI version change.
vabi=`printf "%d" $(sed -n '/#define GIMP_MODULE_ABI_VERSION/{s/.* //;p}' libgimpmodule/gimpmodule.h)`
if test "x${vabi}" != "x%{abiver}"; then
@ -292,8 +265,6 @@ if test "x${vapi}" != "x%{apiver}"; then
fi
%build
# needed for patch2
autoreconf -fi
export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
%configure --with-pic\
--disable-static\