[arch-commits] Commit in cairo/trunk (3 files)
andyrtr at archlinux.org
andyrtr at archlinux.org
Sun Nov 4 17:19:53 UTC 2012
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 <brice at daknet.org>
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 <chris at chris-wilson.co.uk>
-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 <chris at chris-wilson.co.uk>
-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 <psychon at znc.in>
-Reported-by: Martin Husemann <martin at duskware.de>
-Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
----
-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 <chris at chris-wilson.co.uk>
-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 <martin at duskware.de>
-Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
----
-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 <ajohnson at redneon.com>
-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 <chris at chris-wilson.co.uk>
-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 <sehaas at gmail.com>
-Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
----
-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 <chris at chris-wilson.co.uk>
-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 <sehaas at gmail.com>
-Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
----
-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 <ajohnson at redneon.com>
-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 <ajohnson at redneon.com>
-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 <kiyoka at gmail.com>
-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 <chris at chris-wilson.co.uk>
-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 <chris at chris-wilson.co.uk>
-Date: Fri Aug 17 21:33:54 2012 +0100
-
- xlib/shm: Use an impromptu upload ShmSegment
-
-Reported-by: John Lindgren <john.lindgren at aol.com>
-Reported-by: Kalev Lember <kalevlember at gmail.com>
-Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=56547
-Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
----
-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
More information about the arch-commits
mailing list