summaryrefslogtreecommitdiff
path: root/print/poppler/patches/patch-bb
diff options
context:
space:
mode:
Diffstat (limited to 'print/poppler/patches/patch-bb')
-rw-r--r--print/poppler/patches/patch-bb51
1 files changed, 51 insertions, 0 deletions
diff --git a/print/poppler/patches/patch-bb b/print/poppler/patches/patch-bb
new file mode 100644
index 00000000000..421a5adc77f
--- /dev/null
+++ b/print/poppler/patches/patch-bb
@@ -0,0 +1,51 @@
+$NetBSD: patch-bb,v 1.3 2009/10/21 10:18:57 drochner Exp $
+
+--- glib/poppler-page.cc.orig 2009-09-09 23:22:31.000000000 +0200
++++ glib/poppler-page.cc
+@@ -609,28 +609,28 @@ create_surface_from_thumbnail_data (guch
+ gint rowstride)
+ {
+ guchar *cairo_pixels;
++ gint cairo_stride;
+ cairo_surface_t *surface;
+- static cairo_user_data_key_t key;
+ int j;
+
+- cairo_pixels = (guchar *)g_malloc (4 * width * height);
+- surface = cairo_image_surface_create_for_data ((unsigned char *)cairo_pixels,
+- CAIRO_FORMAT_RGB24,
+- width, height, 4 * width);
+- cairo_surface_set_user_data (surface, &key,
+- cairo_pixels, (cairo_destroy_func_t)g_free);
++ surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
++ if (cairo_surface_status (surface))
++ return NULL;
++
++ cairo_pixels = cairo_image_surface_get_data (surface);
++ cairo_stride = cairo_image_surface_get_stride (surface);
+
+ for (j = height; j; j--) {
+ guchar *p = data;
+ guchar *q = cairo_pixels;
+ guchar *end = p + 3 * width;
+-
++
+ while (p < end) {
+ #if G_BYTE_ORDER == G_LITTLE_ENDIAN
+ q[0] = p[2];
+ q[1] = p[1];
+ q[2] = p[0];
+-#else
++#else
+ q[1] = p[0];
+ q[2] = p[1];
+ q[3] = p[2];
+@@ -640,7 +640,7 @@ create_surface_from_thumbnail_data (guch
+ }
+
+ data += rowstride;
+- cairo_pixels += 4 * width;
++ cairo_pixels += cairo_stride;
+ }
+
+ return surface;