Date: Sunday, November 4, 2012 @ 12:19:52 Author: andyrtr Revision: 170192
upgpkg: cairo 1.12.8-1 upstream update 1.12.8 Modified: cairo/trunk/PKGBUILD Deleted: cairo/trunk/cairo-1.10.0-buggy_gradients.patch cairo/trunk/git_fixes.diff ------------------------------------+ PKGBUILD | 22 cairo-1.10.0-buggy_gradients.patch | 13 git_fixes.diff | 934 ----------------------------------- 3 files changed, 5 insertions(+), 964 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2012-11-04 17:11:22 UTC (rev 170191) +++ PKGBUILD 2012-11-04 17:19:52 UTC (rev 170192) @@ -3,8 +3,8 @@ # Contributor: Brice Carpentier <[email protected]> pkgname=cairo -pkgver=1.12.6 -pkgrel=2 +pkgver=1.12.8 +pkgrel=1 pkgdesc="Cairo vector graphics library" arch=(i686 x86_64) license=('LGPL' 'MPL') @@ -15,23 +15,11 @@ provides=('cairo-xcb') replaces=('cairo-xcb') options=('!libtool') -source=(http://cairographics.org/releases/$pkgname-$pkgver.tar.xz - cairo-1.10.0-buggy_gradients.patch - git_fixes.diff) -sha1sums=('a383c6cb4495e18848ea43e1031c294aa9417a43' - '8b843a9934e5112b6188e5bcf4adfc1fdaf9fa04' - '31b3179cda0afa2e2f037d6850fd8607383cb95a') +source=(http://cairographics.org/releases/$pkgname-$pkgver.tar.xz) +sha1sums=('56a10bf3b804367c97734d655c23a9f652d5c297') build() { cd "$srcdir/$pkgname-$pkgver" -# patch -Np1 -i ${srcdir}/cairo-1.10.0-buggy_gradients.patch - - # status: http://cgit.freedesktop.org/cairo/commit/?id=66625cb46c985321c46b79d2163a4d676d6700ba - # 2012-10-30 12:40:41 (GMT) - # xlib: Apply the image offsets to the destination rather the source - patch -Np1 -i ${srcdir}/git_fixes.diff - -# autoreconf -vfi ./configure --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ @@ -45,7 +33,7 @@ #check() { # cd "$srcdir/$pkgname-$pkgver" -# make -k check || /bin/true # 161 Passed, 328 Failed [8 crashed, 10 expected], 26 Skipped +# make -k check || /bin/true # 162 Passed, 328 Failed [8 crashed, 10 expected], 26 Skipped #} package() { Deleted: cairo-1.10.0-buggy_gradients.patch =================================================================== --- cairo-1.10.0-buggy_gradients.patch 2012-11-04 17:11:22 UTC (rev 170191) +++ cairo-1.10.0-buggy_gradients.patch 2012-11-04 17:19:52 UTC (rev 170192) @@ -1,13 +0,0 @@ ---- a/src/cairo-xlib-display.c.ubuntu 2010-08-04 11:57:49.000000000 +0200 -+++ b/src/cairo-xlib-display.c 2010-08-04 11:58:28.000000000 +0200 -@@ -353,11 +353,7 @@ - /* Prior to Render 0.10, there is no protocol support for gradients and - * we call function stubs instead, which would silently consume the drawing. - */ --#if RENDER_MAJOR == 0 && RENDER_MINOR < 10 - display->buggy_gradients = TRUE; --#else -- display->buggy_gradients = FALSE; --#endif - display->buggy_pad_reflect = FALSE; - display->buggy_repeat = FALSE; Deleted: git_fixes.diff =================================================================== --- git_fixes.diff 2012-11-04 17:11:22 UTC (rev 170191) +++ git_fixes.diff 2012-11-04 17:19:52 UTC (rev 170192) @@ -1,934 +0,0 @@ -From e43f53bf7f3d371116f31f22ab9754b08b5abe7f Mon Sep 17 00:00:00 2001 -From: Chris Wilson <[email protected]> -Date: Mon, 22 Oct 2012 12:47:11 +0000 -Subject: version: Post release bump to 1.12.7 - ---- -diff --git a/cairo-version.h b/cairo-version.h -index dc89a19..c685909 100644 ---- a/cairo-version.h -+++ b/cairo-version.h -@@ -3,6 +3,6 @@ - - #define CAIRO_VERSION_MAJOR 1 - #define CAIRO_VERSION_MINOR 12 --#define CAIRO_VERSION_MICRO 6 -+#define CAIRO_VERSION_MICRO 7 - - #endif --- -cgit v0.9.0.2-2-gbebe -From 00feb8ce530a472abbde445b52d9ae8c99ec97f0 Mon Sep 17 00:00:00 2001 -From: Chris Wilson <[email protected]> -Date: Fri, 26 Oct 2012 09:51:31 +0000 -Subject: xlib/shm: Sanity check that the server handles XSendEvent with ShmCompletion - -Uli Schlachter suggested it would be wiser to complement our blacklist -of known broken X/libXext with an explicit roundtrip to check for a -BadValue error return when we try to use XSendEvent. - -Suggested-by: Uli Schlachter <[email protected]> -Reported-by: Martin Husemann <[email protected]> -Signed-off-by: Chris Wilson <[email protected]> ---- -diff --git a/src/cairo-xlib-surface-shm.c b/src/cairo-xlib-surface-shm.c -index ec0d334..17594b1 100644 ---- a/src/cairo-xlib-surface-shm.c -+++ b/src/cairo-xlib-surface-shm.c -@@ -1128,8 +1128,60 @@ _cairo_xlib_shm_surface_is_idle (cairo_surface_t *surface) - (((major) * 10000000) + ((minor) * 100000) + ((patch) * 1000) + snap) - - static cairo_bool_t --xorg_has_buggy_send_shm_completion_event(Display *dpy) -+has_broken_send_shm_event (cairo_xlib_display_t *display, -+ cairo_xlib_shm_display_t *shm) - { -+ Display *dpy = display->display; -+ int (*old_handler) (Display *display, XErrorEvent *event); -+ XShmCompletionEvent ev; -+ XShmSegmentInfo info; -+ -+ info.shmid = shmget (IPC_PRIVATE, 0x1000, IPC_CREAT | 0600); -+ if (info.shmid == -1) -+ return TRUE; -+ -+ info.readOnly = FALSE; -+ info.shmaddr = shmat (info.shmid, NULL, 0); -+ if (info.shmaddr == (char *) -1) { -+ shmctl (info.shmid, IPC_RMID, NULL); -+ return TRUE; -+ } -+ -+ ev.type = shm->event; -+ ev.drawable = shm->window; -+ ev.major_code = shm->opcode; -+ ev.minor_code = X_ShmPutImage; -+ -+ ev.shmseg = info.shmid; -+ ev.offset = 0; -+ -+ assert (CAIRO_MUTEX_IS_LOCKED (_cairo_xlib_display_mutex)); -+ _x_error_occurred = FALSE; -+ -+ XLockDisplay (dpy); -+ XSync (dpy, False); -+ old_handler = XSetErrorHandler (_check_error_handler); -+ -+ XShmAttach (dpy, &info); -+ XSendEvent (dpy, ev.drawable, False, 0, (XEvent *)&ev); -+ XShmDetach (dpy, &info); -+ -+ XSync (dpy, False); -+ XSetErrorHandler (old_handler); -+ XUnlockDisplay (dpy); -+ -+ shmctl (info.shmid, IPC_RMID, NULL); -+ shmdt (info.shmaddr); -+ -+ return _x_error_occurred; -+} -+ -+static cairo_bool_t -+xorg_has_buggy_send_shm_completion_event(cairo_xlib_display_t *display, -+ cairo_xlib_shm_display_t *shm) -+{ -+ Display *dpy = display->display; -+ - /* As libXext sets the SEND_EVENT bit in the ShmCompletionEvent, - * the Xserver may crash if it does not take care when processing - * the event type. For instance versions of Xorg prior to 1.11.1 -@@ -1141,8 +1193,12 @@ xorg_has_buggy_send_shm_completion_event(Display *dpy) - * - * Remove the SendEvent bit (0x80) before doing range checks on event type. - */ -- return (strstr (ServerVendor (dpy), "X.Org") != NULL && -- VendorRelease (dpy) < XORG_VERSION_ENCODE(1,11,0,1)); -+ if (strstr (ServerVendor (dpy), "X.Org") != NULL && -+ VendorRelease (dpy) < XORG_VERSION_ENCODE(1,11,0,1)) -+ return TRUE; -+ -+ /* For everyone else check that no error is generated */ -+ return has_broken_send_shm_event (display, shm); - } - - void -@@ -1162,6 +1218,15 @@ _cairo_xlib_display_init_shm (cairo_xlib_display_t *display) - if (unlikely (shm == NULL)) - return; - -+ codes = XInitExtension (display->display, SHMNAME); -+ if (codes == NULL) { -+ free (shm); -+ return; -+ } -+ -+ shm->opcode = codes ->major_opcode; -+ shm->event = codes->first_event; -+ - if (unlikely (_pqueue_init (&shm->info))) { - free (shm); - return; -@@ -1177,16 +1242,12 @@ _cairo_xlib_display_init_shm (cairo_xlib_display_t *display) - DefaultVisual (display->display, scr), - CWOverrideRedirect, &attr); - -- if (xorg_has_buggy_send_shm_completion_event(display->display)) -+ if (xorg_has_buggy_send_shm_completion_event(display, shm)) - has_pixmap = 0; - - shm->has_pixmaps = has_pixmap ? MIN_PIXMAP_SIZE : 0; - cairo_list_init (&shm->pool); - -- codes = XInitExtension (display->display, SHMNAME); -- shm->opcode = codes ->major_opcode; -- shm->event = codes->first_event; -- - cairo_list_init (&shm->surfaces); - - display->shm = shm; --- -cgit v0.9.0.2-2-gbebe -From fdd2082f923012a1354be7086d03f78fb166695b Mon Sep 17 00:00:00 2001 -From: Chris Wilson <[email protected]> -Date: Fri, 26 Oct 2012 09:51:31 +0000 -Subject: xlib: Check for both X.org and Xorg ServerVendors - -Martin Husemann reported that on his NetBSD machine the vendor was being -reported as "The Xorg Foundation", a non-conformist separatist split of -the Peoples' Liberation Army^W^W^W "The X.Org Foundation". Simply check -for both during initialisation. - -Reported-by: Martin Husemann <[email protected]> -Signed-off-by: Chris Wilson <[email protected]> ---- -diff --git a/src/cairo-xlib-display.c b/src/cairo-xlib-display.c -index 67c0673..04c89b2 100644 ---- a/src/cairo-xlib-display.c -+++ b/src/cairo-xlib-display.c -@@ -315,7 +315,7 @@ _cairo_xlib_device_create (Display *dpy) - * safest to just blacklist all old-versioning-scheme X servers, - * (just using VendorRelease < 70000000), as buggy_repeat=TRUE. - */ -- if (strstr (ServerVendor (dpy), "X.Org") != NULL) { -+ if (_cairo_xlib_vendor_is_xorg (dpy)) { - if (VendorRelease (dpy) >= 60700000) { - if (VendorRelease (dpy) < 70000000) - display->buggy_repeat = TRUE; -diff --git a/src/cairo-xlib-private.h b/src/cairo-xlib-private.h -index d2bd588..c328302 100644 ---- a/src/cairo-xlib-private.h -+++ b/src/cairo-xlib-private.h -@@ -216,6 +216,13 @@ struct _cairo_xlib_proxy { - cairo_surface_t *owner; - }; - -+inline static cairo_bool_t -+_cairo_xlib_vendor_is_xorg (Display *dpy) -+{ -+ const char *const vendor = ServerVendor (dpy); -+ return strstr (vendor, "X.Org") || strstr (vendor, "Xorg"); -+} -+ - cairo_private cairo_status_t - _cairo_xlib_surface_get_gc (cairo_xlib_display_t *display, - cairo_xlib_surface_t *surface, -diff --git a/src/cairo-xlib-surface-shm.c b/src/cairo-xlib-surface-shm.c -index 17594b1..89f51a9 100644 ---- a/src/cairo-xlib-surface-shm.c -+++ b/src/cairo-xlib-surface-shm.c -@@ -1193,7 +1193,7 @@ xorg_has_buggy_send_shm_completion_event(cairo_xlib_display_t *display, - * - * Remove the SendEvent bit (0x80) before doing range checks on event type. - */ -- if (strstr (ServerVendor (dpy), "X.Org") != NULL && -+ if (_cairo_xlib_vendor_is_xorg (dpy) && - VendorRelease (dpy) < XORG_VERSION_ENCODE(1,11,0,1)) - return TRUE; - --- -cgit v0.9.0.2-2-gbebe -From d57e652f08f5ff7c334d01bc071962e6a131928f Mon Sep 17 00:00:00 2001 -From: Adrian Johnson <[email protected]> -Date: Fri, 26 Oct 2012 12:30:01 +0000 -Subject: type1-subset: parse all operators - -The PDF at bug 56265 contained a Type 1 font that used the "div" -operator to compute the glyph width. As the "div" operator was -not handled by the charstring parser this resulted in an incorrect -glyph width in the PDF output. - -Fix this by upgrading the charstring parsing to handle all Type 1 -operators. ---- -diff --git a/src/cairo-type1-subset.c b/src/cairo-type1-subset.c -index 1bdb12b..c7f613a 100644 ---- a/src/cairo-type1-subset.c -+++ b/src/cairo-type1-subset.c -@@ -137,13 +137,10 @@ typedef struct _cairo_type1_font_subset { - int hex_column; - - struct { -- int stack[TYPE1_STACKSIZE], sp, top_value; -+ double stack[TYPE1_STACKSIZE]; -+ int sp; - } build_stack; - -- struct { -- int other_subr_args[TYPE1_STACKSIZE], num_other_subr_args, cur_other_subr_arg; -- } ps_stack; -- - - } cairo_type1_font_subset_t; - -@@ -742,15 +739,33 @@ use_standard_encoding_glyph (cairo_type1_font_subset_t *font, int index) - return CAIRO_INT_STATUS_UNSUPPORTED; - } - --#define TYPE1_CHARSTRING_COMMAND_ESCAPE 0x0c --#define TYPE1_CHARSTRING_COMMAND_SEAC 0x0c06 --#define TYPE1_CHARSTRING_COMMAND_SBW 0x0c07 --#define TYPE1_CHARSTRING_COMMAND_HSBW 0x0d --#define TYPE1_CHARSTRING_COMMAND_CALLSUBR 0x0a --#define TYPE1_CHARSTRING_COMMAND_CALLOTHERSUBR 0x0c10 --#define TYPE1_CHARSTRING_COMMAND_POP 0x0c11 -- - -+#define TYPE1_CHARSTRING_COMMAND_HSTEM 0x01 -+#define TYPE1_CHARSTRING_COMMAND_VSTEM 0x03 -+#define TYPE1_CHARSTRING_COMMAND_VMOVETO 0x04 -+#define TYPE1_CHARSTRING_COMMAND_RLINETO 0x05 -+#define TYPE1_CHARSTRING_COMMAND_HLINETO 0x06 -+#define TYPE1_CHARSTRING_COMMAND_VLINETO 0x07 -+#define TYPE1_CHARSTRING_COMMAND_RRCURVETO 0x08 -+#define TYPE1_CHARSTRING_COMMAND_CLOSEPATH 0x09 -+#define TYPE1_CHARSTRING_COMMAND_CALLSUBR 0x0a -+#define TYPE1_CHARSTRING_COMMAND_RETURN 0x0b -+#define TYPE1_CHARSTRING_COMMAND_ESCAPE 0x0c -+#define TYPE1_CHARSTRING_COMMAND_HSBW 0x0d -+#define TYPE1_CHARSTRING_COMMAND_ENDCHAR 0x0e -+#define TYPE1_CHARSTRING_COMMAND_RMOVETO 0x15 -+#define TYPE1_CHARSTRING_COMMAND_HMOVETO 0x16 -+#define TYPE1_CHARSTRING_COMMAND_VHCURVETO 0x1e -+#define TYPE1_CHARSTRING_COMMAND_HVCURVETO 0x1f -+#define TYPE1_CHARSTRING_COMMAND_DOTSECTION 0x0c00 -+#define TYPE1_CHARSTRING_COMMAND_VSTEM3 0x0c01 -+#define TYPE1_CHARSTRING_COMMAND_HSTEM3 0x0c02 -+#define TYPE1_CHARSTRING_COMMAND_SEAC 0x0c06 -+#define TYPE1_CHARSTRING_COMMAND_SBW 0x0c07 -+#define TYPE1_CHARSTRING_COMMAND_DIV 0x0c0c -+#define TYPE1_CHARSTRING_COMMAND_CALLOTHERSUBR 0x0c10 -+#define TYPE1_CHARSTRING_COMMAND_POP 0x0c11 -+#define TYPE1_CHARSTRING_COMMAND_SETCURRENTPOINT 0x0c21 - - /* Get glyph width and look for seac operatorParse charstring */ - static cairo_status_t -@@ -765,7 +780,6 @@ cairo_type1_font_subset_parse_charstring (cairo_type1_font_subset_t *font, - const unsigned char *p; - cairo_bool_t last_op_was_integer; - int command; -- int subr_num, i; - - charstring = malloc (encrypted_charstring_length); - if (unlikely (charstring == NULL)) -@@ -785,37 +799,60 @@ cairo_type1_font_subset_parse_charstring (cairo_type1_font_subset_t *font, - if (*p < 32) { - command = *p++; - switch (command) { -- case TYPE1_CHARSTRING_COMMAND_HSBW: -- if (! last_op_was_integer) -- return CAIRO_INT_STATUS_UNSUPPORTED; -- -- font->glyphs[glyph].width = font->build_stack.stack[1]/font->base.units_per_em; -+ case TYPE1_CHARSTRING_COMMAND_HSTEM: -+ case TYPE1_CHARSTRING_COMMAND_VSTEM: -+ case TYPE1_CHARSTRING_COMMAND_VMOVETO: -+ case TYPE1_CHARSTRING_COMMAND_RLINETO: -+ case TYPE1_CHARSTRING_COMMAND_HLINETO: -+ case TYPE1_CHARSTRING_COMMAND_VLINETO: -+ case TYPE1_CHARSTRING_COMMAND_RRCURVETO: -+ case TYPE1_CHARSTRING_COMMAND_CLOSEPATH: -+ case TYPE1_CHARSTRING_COMMAND_RMOVETO: -+ case TYPE1_CHARSTRING_COMMAND_HMOVETO: -+ case TYPE1_CHARSTRING_COMMAND_VHCURVETO: -+ case TYPE1_CHARSTRING_COMMAND_HVCURVETO: -+ case TYPE1_CHARSTRING_COMMAND_RETURN: -+ case TYPE1_CHARSTRING_COMMAND_ENDCHAR: -+ default: - font->build_stack.sp = 0; -- last_op_was_integer = FALSE; - break; - - case TYPE1_CHARSTRING_COMMAND_CALLSUBR: -- if (font->subset_subrs && -- last_op_was_integer && -- font->build_stack.top_value >= 0 && -- font->build_stack.top_value < font->num_subrs) -- { -- subr_num = font->build_stack.top_value; -- font->build_stack.sp--; -- font->subrs[subr_num].used = TRUE; -- last_op_was_integer = FALSE; -- status = cairo_type1_font_subset_parse_charstring (font, -- glyph, -- font->subrs[subr_num].subr_string, -- font->subrs[subr_num].subr_length); -- } else { -- font->subset_subrs = FALSE; -+ if (font->subset_subrs && font->build_stack.sp > 0) { -+ int subr_num = font->build_stack.stack[--font->build_stack.sp]; -+ if (subr_num >= 0 && subr_num < font->num_subrs) { -+ font->subrs[subr_num].used = TRUE; -+ status = cairo_type1_font_subset_parse_charstring ( -+ font, -+ glyph, -+ font->subrs[subr_num].subr_string, -+ font->subrs[subr_num].subr_length); -+ break; -+ } - } -+ font->subset_subrs = FALSE; -+ break; -+ -+ case TYPE1_CHARSTRING_COMMAND_HSBW: -+ if (font->build_stack.sp < 2) -+ return CAIRO_INT_STATUS_UNSUPPORTED; -+ -+ font->glyphs[glyph].width = font->build_stack.stack[1]/font->base.units_per_em; -+ font->build_stack.sp = 0; - break; - - case TYPE1_CHARSTRING_COMMAND_ESCAPE: - command = command << 8 | *p++; - switch (command) { -+ case TYPE1_CHARSTRING_COMMAND_DOTSECTION: -+ case TYPE1_CHARSTRING_COMMAND_VSTEM3: -+ case TYPE1_CHARSTRING_COMMAND_HSTEM3: -+ case TYPE1_CHARSTRING_COMMAND_SETCURRENTPOINT: -+ case TYPE1_CHARSTRING_COMMAND_CALLOTHERSUBR: -+ default: -+ font->build_stack.sp = 0; -+ break; -+ - case TYPE1_CHARSTRING_COMMAND_SEAC: - /* The seac command takes five integer arguments. The - * last two are glyph indices into the PS standard -@@ -823,6 +860,9 @@ cairo_type1_font_subset_parse_charstring (cairo_type1_font_subset_t *font, - * glyph is composed from. All we need to do is to - * make sure those glyphs are present in the subset - * under their standard names. */ -+ if (font->build_stack.sp < 5) -+ return CAIRO_INT_STATUS_UNSUPPORTED; -+ - status = use_standard_encoding_glyph (font, font->build_stack.stack[3]); - if (unlikely (status)) - return status; -@@ -832,55 +872,49 @@ cairo_type1_font_subset_parse_charstring (cairo_type1_font_subset_t *font, - return status; - - font->build_stack.sp = 0; -- last_op_was_integer = FALSE; - break; - - case TYPE1_CHARSTRING_COMMAND_SBW: -- if (! last_op_was_integer) -+ if (font->build_stack.sp < 4) - return CAIRO_INT_STATUS_UNSUPPORTED; - - font->glyphs[glyph].width = font->build_stack.stack[2]/font->base.units_per_em; - font->build_stack.sp = 0; -- last_op_was_integer = FALSE; -- break; -- -- case TYPE1_CHARSTRING_COMMAND_CALLOTHERSUBR: -- for (i = 0; i < font->build_stack.sp; i++) -- font->ps_stack.other_subr_args[i] = font->build_stack.stack[i]; -- font->ps_stack.num_other_subr_args = font->build_stack.sp; -- font->ps_stack.cur_other_subr_arg = 0; -- font->build_stack.sp = 0; -- last_op_was_integer = FALSE; - break; - -- case TYPE1_CHARSTRING_COMMAND_POP: -- if (font->ps_stack.num_other_subr_args > font->ps_stack.cur_other_subr_arg) { -- font->build_stack.top_value = font->ps_stack.other_subr_args[font->ps_stack.cur_other_subr_arg++]; -- last_op_was_integer = TRUE; -+ case TYPE1_CHARSTRING_COMMAND_DIV: -+ if (font->build_stack.sp < 2) { -+ return CAIRO_INT_STATUS_UNSUPPORTED; - } else { -- font->subset_subrs = FALSE; -+ double num1 = font->build_stack.stack[font->build_stack.sp - 2]; -+ double num2 = font->build_stack.stack[font->build_stack.sp - 1]; -+ font->build_stack.sp--; -+ if (num2 == 0.0) -+ return CAIRO_INT_STATUS_UNSUPPORTED; -+ -+ font->build_stack.stack[font->build_stack.sp - 1] = num1/num2; - } - break; - -- default: -- font->build_stack.sp = 0; -- last_op_was_integer = FALSE; -+ case TYPE1_CHARSTRING_COMMAND_POP: -+ if (font->build_stack.sp < TYPE1_STACKSIZE) { -+ /* use negative number to prevent it being used as a subr_num */ -+ font->build_stack.stack[font->build_stack.sp++] = -1.0; -+ } - break; - } - break; -- -- default: -- font->build_stack.sp = 0; -- last_op_was_integer = FALSE; -- break; - } -- } else { -+ } else { - /* integer argument */ -- p = cairo_type1_font_subset_decode_integer (p, &font->build_stack.top_value); -- last_op_was_integer = TRUE; -- if (font->build_stack.sp < TYPE1_STACKSIZE) -- font->build_stack.stack[font->build_stack.sp++] = font->build_stack.top_value; -- } -+ if (font->build_stack.sp < TYPE1_STACKSIZE) { -+ int val; -+ p = cairo_type1_font_subset_decode_integer (p, &val); -+ font->build_stack.stack[font->build_stack.sp++] = val; -+ } else { -+ return CAIRO_INT_STATUS_UNSUPPORTED; -+ } -+ } - } - - free (charstring); -@@ -1321,7 +1355,6 @@ skip_subrs: - for (j = 0; j < font->num_glyphs; j++) { - glyph = font->subset_index_to_glyphs[j]; - font->build_stack.sp = 0; -- font->ps_stack.num_other_subr_args = 0; - status = cairo_type1_font_subset_parse_charstring (font, - glyph, - font->glyphs[glyph].encrypted_charstring, --- -cgit v0.9.0.2-2-gbebe -From f18199fcfb3b052c198041fc05156ae3d9e6aee7 Mon Sep 17 00:00:00 2001 -From: Chris Wilson <[email protected]> -Date: Sun, 28 Oct 2012 10:04:12 +0000 -Subject: xlib/shm: Check for XShm headers - -Not all version of libXext ship the same set of headers, so play safe -and check during configure that we have the headers we depend upon in -the code. - -Reported-by: Sebastian Haas <[email protected]> -Signed-off-by: Chris Wilson <[email protected]> ---- -diff --git a/configure.ac b/configure.ac -index 7adbeb1..021ec8e 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -105,6 +105,10 @@ CAIRO_ENABLE_SURFACE_BACKEND(xlib, Xlib, auto, [ - AC_MSG_RESULT(no), - AC_MSG_RESULT(assuming no)) - fi -+ -+ AC_CHECK_HEADERS([X11/extensions/XShm.h X11/extensions/shmproto.h], [], [], -+ [#include <X11/Xlibint.h> -+ #include <X11/Xproto.h>]) - ]) - - CAIRO_ENABLE_SURFACE_BACKEND(xlib_xrender, Xlib Xrender, auto, [ -diff --git a/src/cairo-xlib-surface-shm.c b/src/cairo-xlib-surface-shm.c -index 89f51a9..a3d4385 100644 ---- a/src/cairo-xlib-surface-shm.c -+++ b/src/cairo-xlib-surface-shm.c -@@ -41,12 +41,105 @@ - - #include "cairo-xlib-private.h" - #include "cairo-xlib-surface-private.h" --#include "cairo-image-surface-private.h" --#include "cairo-mempool-private.h" -+ -+#if !HAVE_X11_EXTENSIONS_XSHM_H || !HAVE_X11_EXTENSIONS_SHMPROTO_H -+void _cairo_xlib_display_init_shm (cairo_xlib_display_t *display) {} -+ -+cairo_surface_t * -+_cairo_xlib_surface_get_shm (cairo_xlib_surface_t *surface, -+ cairo_bool_t overwrite) -+{ -+ return NULL; -+} -+ -+cairo_int_status_t -+_cairo_xlib_surface_put_shm (cairo_xlib_surface_t *surface) -+{ -+ ASSERT_NOT_REACHED; -+ return CAIRO_INT_STATUS_SUCCESS; -+} -+ -+cairo_surface_t * -+_cairo_xlib_surface_create_shm (cairo_xlib_surface_t *other, -+ pixman_format_code_t format, -+ int width, int height) -+{ -+ return NULL; -+} -+ -+cairo_surface_t * -+_cairo_xlib_surface_create_shm__image (cairo_xlib_surface_t *surface, -+ pixman_format_code_t format, -+ int width, int height) -+{ -+ return NULL; -+} -+ -+cairo_surface_t * -+_cairo_xlib_surface_create_similar_shm (void *other, -+ cairo_format_t format, -+ int width, int height) -+{ -+ return cairo_image_surface_create (format, width, height); -+} -+ -+void -+_cairo_xlib_shm_surface_mark_active (cairo_surface_t *_shm) -+{ -+ ASSERT_NOT_REACHED; -+} -+ -+void -+_cairo_xlib_shm_surface_get_ximage (cairo_surface_t *surface, -+ XImage *ximage) -+{ -+ ASSERT_NOT_REACHED; -+} -+ -+void * -+_cairo_xlib_shm_surface_get_obdata (cairo_surface_t *surface) -+{ -+ ASSERT_NOT_REACHED; -+ return NULL; -+} -+ -+Pixmap -+_cairo_xlib_shm_surface_get_pixmap (cairo_surface_t *surface) -+{ -+ ASSERT_NOT_REACHED; -+ return 0; -+} -+ -+XRenderPictFormat * -+_cairo_xlib_shm_surface_get_xrender_format (cairo_surface_t *surface) -+{ -+ ASSERT_NOT_REACHED; -+ return NULL; -+} -+ -+cairo_bool_t -+_cairo_xlib_shm_surface_is_active (cairo_surface_t *surface) -+{ -+ ASSERT_NOT_REACHED; -+ return FALSE; -+} -+ -+cairo_bool_t -+_cairo_xlib_shm_surface_is_idle (cairo_surface_t *surface) -+{ -+ ASSERT_NOT_REACHED; -+ return TRUE; -+} -+ -+void _cairo_xlib_display_fini_shm (cairo_xlib_display_t *display) {} -+ -+#else - - #include "cairo-damage-private.h" - #include "cairo-default-context-private.h" -+#include "cairo-image-surface-private.h" - #include "cairo-list-inline.h" -+#include "cairo-mempool-private.h" - - #include <X11/Xlibint.h> - #include <X11/Xproto.h> -@@ -1281,5 +1374,5 @@ _cairo_xlib_display_fini_shm (cairo_xlib_display_t *display) - free (shm); - display->shm = NULL; - } -- -+#endif - #endif --- -cgit v0.9.0.2-2-gbebe -From 0e2458697848cf8c89c9d57fa9b64f0ea7bd0877 Mon Sep 17 00:00:00 2001 -From: Chris Wilson <[email protected]> -Date: Sun, 28 Oct 2012 10:08:39 +0000 -Subject: xlib/shm: Use shmstr.h instead of shmproto.h if available - -Before it was known as shmproto.h, the wire protocol definition was to -be found in shmstr.h, so if we don't have the current version of libXext -try to use the older includes. - -Reported-by: Sebastian Haas <[email protected]> -Signed-off-by: Chris Wilson <[email protected]> ---- -diff --git a/configure.ac b/configure.ac -index 021ec8e..f523284 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -106,7 +106,7 @@ CAIRO_ENABLE_SURFACE_BACKEND(xlib, Xlib, auto, [ - AC_MSG_RESULT(assuming no)) - fi - -- AC_CHECK_HEADERS([X11/extensions/XShm.h X11/extensions/shmproto.h], [], [], -+ AC_CHECK_HEADERS([X11/extensions/XShm.h X11/extensions/shmproto.h X11/extensions/shmstr.h], [], [], - [#include <X11/Xlibint.h> - #include <X11/Xproto.h>]) - ]) -diff --git a/src/cairo-xlib-surface-shm.c b/src/cairo-xlib-surface-shm.c -index a3d4385..44e6284 100644 ---- a/src/cairo-xlib-surface-shm.c -+++ b/src/cairo-xlib-surface-shm.c -@@ -42,7 +42,7 @@ - #include "cairo-xlib-private.h" - #include "cairo-xlib-surface-private.h" - --#if !HAVE_X11_EXTENSIONS_XSHM_H || !HAVE_X11_EXTENSIONS_SHMPROTO_H -+#if !HAVE_X11_EXTENSIONS_XSHM_H || !(HAVE_X11_EXTENSIONS_SHMPROTO_H || HAVE_X11_EXTENSIONS_SHMSTR_H) - void _cairo_xlib_display_init_shm (cairo_xlib_display_t *display) {} - - cairo_surface_t * -@@ -144,7 +144,11 @@ void _cairo_xlib_display_fini_shm (cairo_xlib_display_t *display) {} - #include <X11/Xlibint.h> - #include <X11/Xproto.h> - #include <X11/extensions/XShm.h> -+#if HAVE_X11_EXTENSIONS_SHMPROTO_H - #include <X11/extensions/shmproto.h> -+#elif HAVE_X11_EXTENSIONS_SHMSTR_H -+#include <X11/extensions/shmstr.h> -+#endif - #include <sys/ipc.h> - #include <sys/shm.h> - --- -cgit v0.9.0.2-2-gbebe -From 5a6e1d680a5bf1c4091e74f999abd611abd92334 Mon Sep 17 00:00:00 2001 -From: Adrian Johnson <[email protected]> -Date: Sun, 28 Oct 2012 10:28:52 +0000 -Subject: type1-subset: restore correct callothersub behavior - -that was removed in d57e652f. Without this subsetting of subroutines -won't work for some fonts. ---- -diff --git a/src/cairo-type1-subset.c b/src/cairo-type1-subset.c -index c7f613a..786055a 100644 ---- a/src/cairo-type1-subset.c -+++ b/src/cairo-type1-subset.c -@@ -141,6 +141,11 @@ typedef struct _cairo_type1_font_subset { - int sp; - } build_stack; - -+ struct { -+ int stack[TYPE1_STACKSIZE]; -+ int sp; -+ } ps_stack; -+ - - } cairo_type1_font_subset_t; - -@@ -767,7 +772,9 @@ use_standard_encoding_glyph (cairo_type1_font_subset_t *font, int index) - #define TYPE1_CHARSTRING_COMMAND_POP 0x0c11 - #define TYPE1_CHARSTRING_COMMAND_SETCURRENTPOINT 0x0c21 - --/* Get glyph width and look for seac operatorParse charstring */ -+/* Parse the charstring, including recursing into subroutines. Find -+ * the glyph width, subroutines called, and glyphs required by the -+ * SEAC operator. */ - static cairo_status_t - cairo_type1_font_subset_parse_charstring (cairo_type1_font_subset_t *font, - int glyph, -@@ -814,6 +821,7 @@ cairo_type1_font_subset_parse_charstring (cairo_type1_font_subset_t *font, - case TYPE1_CHARSTRING_COMMAND_RETURN: - case TYPE1_CHARSTRING_COMMAND_ENDCHAR: - default: -+ /* stack clearing operator */ - font->build_stack.sp = 0; - break; - -@@ -848,8 +856,8 @@ cairo_type1_font_subset_parse_charstring (cairo_type1_font_subset_t *font, - case TYPE1_CHARSTRING_COMMAND_VSTEM3: - case TYPE1_CHARSTRING_COMMAND_HSTEM3: - case TYPE1_CHARSTRING_COMMAND_SETCURRENTPOINT: -- case TYPE1_CHARSTRING_COMMAND_CALLOTHERSUBR: - default: -+ /* stack clearing operator */ - font->build_stack.sp = 0; - break; - -@@ -896,11 +904,25 @@ cairo_type1_font_subset_parse_charstring (cairo_type1_font_subset_t *font, - } - break; - -+ case TYPE1_CHARSTRING_COMMAND_CALLOTHERSUBR: -+ if (font->build_stack.sp < 1) -+ return CAIRO_INT_STATUS_UNSUPPORTED; -+ -+ font->build_stack.sp--; -+ font->ps_stack.sp = 0; -+ while (font->build_stack.sp) -+ font->ps_stack.stack[font->ps_stack.sp++] = font->build_stack.stack[--font->build_stack.sp]; -+ -+ break; -+ - case TYPE1_CHARSTRING_COMMAND_POP: -- if (font->build_stack.sp < TYPE1_STACKSIZE) { -- /* use negative number to prevent it being used as a subr_num */ -- font->build_stack.stack[font->build_stack.sp++] = -1.0; -- } -+ if (font->ps_stack.sp < 1) -+ return CAIRO_INT_STATUS_UNSUPPORTED; -+ -+ /* T1 spec states that if the interpreter does not -+ * support executing the callothersub, the results -+ * must be taken from the callothersub arguments. */ -+ font->build_stack.stack[font->build_stack.sp++] = font->ps_stack.stack[--font->ps_stack.sp]; - break; - } - break; -@@ -1355,6 +1377,7 @@ skip_subrs: - for (j = 0; j < font->num_glyphs; j++) { - glyph = font->subset_index_to_glyphs[j]; - font->build_stack.sp = 0; -+ font->ps_stack.sp = 0; - status = cairo_type1_font_subset_parse_charstring (font, - glyph, - font->glyphs[glyph].encrypted_charstring, --- -cgit v0.9.0.2-2-gbebe -From 0c800dc3f64ee030df1cd0a6a1dcd6df71502dea Mon Sep 17 00:00:00 2001 -From: Adrian Johnson <[email protected]> -Date: Tue, 30 Oct 2012 08:53:30 +0000 -Subject: type1-subset: ensure subroutine numnber is an integer - ---- -diff --git a/src/cairo-type1-subset.c b/src/cairo-type1-subset.c -index 786055a..dff4a95 100644 ---- a/src/cairo-type1-subset.c -+++ b/src/cairo-type1-subset.c -@@ -827,15 +827,18 @@ cairo_type1_font_subset_parse_charstring (cairo_type1_font_subset_t *font, - - case TYPE1_CHARSTRING_COMMAND_CALLSUBR: - if (font->subset_subrs && font->build_stack.sp > 0) { -- int subr_num = font->build_stack.stack[--font->build_stack.sp]; -- if (subr_num >= 0 && subr_num < font->num_subrs) { -- font->subrs[subr_num].used = TRUE; -- status = cairo_type1_font_subset_parse_charstring ( -- font, -- glyph, -- font->subrs[subr_num].subr_string, -- font->subrs[subr_num].subr_length); -- break; -+ double int_val; -+ if (modf(font->build_stack.stack[--font->build_stack.sp], &int_val) == 0.0) { -+ int subr_num = int_val; -+ if (subr_num >= 0 && subr_num < font->num_subrs) { -+ font->subrs[subr_num].used = TRUE; -+ status = cairo_type1_font_subset_parse_charstring ( -+ font, -+ glyph, -+ font->subrs[subr_num].subr_string, -+ font->subrs[subr_num].subr_length); -+ break; -+ } - } - } - font->subset_subrs = FALSE; --- -cgit v0.9.0.2-2-gbebe -From 65176b7380f0d633da514be1febe16f17b99d876 Mon Sep 17 00:00:00 2001 -From: Kevin Tardif <[email protected]> -Date: Tue, 30 Oct 2012 04:27:27 +0000 -Subject: type1-subset, cff-subset: Plugged 2 memory leaks - -- _cairo_type1_font_subset_fini doesn't free font->cleartext -- _cairo_cff_font_create can exit without freeing font->font_name and/or - font->data; _cairo_cff_font_load_opentype_cff is called to allocate - font_name, then _cairo_cff_font_load_cff is called to allocate - font->data, then _cairo_cff_font_load_cff's return status is checked - and if it failed, it jumps to fail1. This can cause font_name to leak - since the fail1 target only frees the font variable. In addition, - _cairo_cff_font_load_cff can fail -after- allocating data, and then - data won't be freed either. - -Bug 56566 ---- -diff --git a/src/cairo-cff-subset.c b/src/cairo-cff-subset.c -index e3040fc..bd8d5b5 100644 ---- a/src/cairo-cff-subset.c -+++ b/src/cairo-cff-subset.c -@@ -2787,7 +2787,7 @@ _cairo_cff_font_create (cairo_scaled_font_subset_t *scaled_font_subset, - if (backend->is_synthetic && backend->is_synthetic (scaled_font_subset->scaled_font)) - return CAIRO_INT_STATUS_UNSUPPORTED; - -- font = malloc (sizeof (cairo_cff_font_t)); -+ font = calloc (1, sizeof (cairo_cff_font_t)); - if (unlikely (font == NULL)) - return _cairo_error (CAIRO_STATUS_NO_MEMORY); - -@@ -2862,11 +2862,11 @@ fail4: - fail3: - free (font->subset_font_name); - fail2: -- free (font->data); -- free (font->font_name); - free (font->ps_name); - _cairo_array_fini (&font->output); - fail1: -+ free (font->data); -+ free (font->font_name); - free (font); - - return status; -diff --git a/src/cairo-type1-subset.c b/src/cairo-type1-subset.c -index dff4a95..2ec56f1 100644 ---- a/src/cairo-type1-subset.c -+++ b/src/cairo-type1-subset.c -@@ -1670,6 +1670,8 @@ _cairo_type1_font_subset_fini (cairo_type1_font_subset_t *font) - - free (font->subset_index_to_glyphs); - -+ free (font->cleartext); -+ - return status; - } - --- -cgit v0.9.0.2-2-gbebe -From 66625cb46c985321c46b79d2163a4d676d6700ba Mon Sep 17 00:00:00 2001 -From: Chris Wilson <[email protected]> -Date: Tue, 30 Oct 2012 12:40:41 +0000 -Subject: xlib: Apply the image offsets to the destination rather the source - -So that we can specify the entire source surface as the region to copy -and not introduce clipping errors. - -Fixes regression from -commit c068691ff57c2f6cd750a54db17393c0e132cb00 -Author: Chris Wilson <[email protected]> -Date: Fri Aug 17 21:33:54 2012 +0100 - - xlib/shm: Use an impromptu upload ShmSegment - -Reported-by: John Lindgren <[email protected]> -Reported-by: Kalev Lember <[email protected]> -Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=56547 -Signed-off-by: Chris Wilson <[email protected]> ---- -diff --git a/src/cairo-xlib-render-compositor.c b/src/cairo-xlib-render-compositor.c -index e325382..74c43e9 100644 ---- a/src/cairo-xlib-render-compositor.c -+++ b/src/cairo-xlib-render-compositor.c -@@ -179,22 +179,19 @@ copy_image_boxes (void *_dst, - int x2 = _cairo_fixed_integer_part (chunk->base[i].p2.x); - int y2 = _cairo_fixed_integer_part (chunk->base[i].p2.y); - -- rects[j].x = x1; -- rects[j].y = y1; -- rects[j].width = x2 - x1; -- rects[j].height = y2 - y1; -- j++; -+ if (x2 > x1 && y2 > y1) { -+ rects[j].x = x1; -+ rects[j].y = y1; -+ rects[j].width = x2 - x1; -+ rects[j].height = y2 - y1; -+ j++; -+ } - } - } -- assert (j == boxes->num_boxes); - - XSetClipRectangles (dst->dpy, gc, 0, 0, rects, j, Unsorted); -- - XCopyArea (dst->dpy, src, dst->drawable, gc, -- dx, dy, -- image->width, image->height, -- 0, 0); -- -+ 0, 0, image->width, image->height, -dx, -dy); - XSetClipMask (dst->dpy, gc, None); - - if (rects != stack_rects) -@@ -337,7 +334,8 @@ draw_image_boxes (void *_dst, - - if (_cairo_xlib_shm_surface_get_pixmap (&image->base)) { - status = copy_image_boxes (dst, image, boxes, dx, dy); -- goto out; -+ if (status != CAIRO_INT_STATUS_UNSUPPORTED) -+ goto out; - } - } - } --- -cgit v0.9.0.2-2-gbebe
