summaryrefslogtreecommitdiff
path: root/Build/source/libs/cairo/cairo-src
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/cairo/cairo-src')
-rw-r--r--Build/source/libs/cairo/cairo-src/NEWS45
-rw-r--r--Build/source/libs/cairo/cairo-src/build/aclocal.float.m44
-rw-r--r--Build/source/libs/cairo/cairo-src/cairo-version.h2
-rw-r--r--Build/source/libs/cairo/cairo-src/src/cairo-debug.c2
-rw-r--r--Build/source/libs/cairo/cairo-src/src/cairo-pattern.c2
-rw-r--r--Build/source/libs/cairo/cairo-src/src/cairo-scaled-font.c24
-rw-r--r--Build/source/libs/cairo/cairo-src/src/cairo-surface-observer.c2
-rw-r--r--Build/source/libs/cairo/cairo-src/src/cairo-truetype-subset.c30
-rw-r--r--Build/source/libs/cairo/cairo-src/src/cairo-xcb-surface-render.c2
-rw-r--r--Build/source/libs/cairo/cairo-src/src/cairo-xlib-surface-shm.c8
-rw-r--r--Build/source/libs/cairo/cairo-src/src/cairo-xlib-surface.c4
11 files changed, 98 insertions, 27 deletions
diff --git a/Build/source/libs/cairo/cairo-src/NEWS b/Build/source/libs/cairo/cairo-src/NEWS
index 3ec0e6c898e..08889d2d054 100644
--- a/Build/source/libs/cairo/cairo-src/NEWS
+++ b/Build/source/libs/cairo/cairo-src/NEWS
@@ -1,10 +1,53 @@
+Release 1.14.8 (2016-12-07 Bryce Harrington <bryce@osg.samsung.com>)
+========================================================================
+Bugfix release rolling up backported fixes for the past year.
+
+For a complete log of changes since 1.14.6, please see:
+
+ http://cairographics.org/releases/ChangeLog.cairo-1.14.8
+
+Features
+--------
+None
+
+API Changes
+-----------
+None
+
+Dependency Changes
+------------------
+None
+
+Performance Optimizations
+-------------------------
+None
+
+Bug Fixes
+---------
+* Fix "invalidfont" error on some printers when printing PDFs with
+ embedded fonts that have glyphs (such as spaces) with
+ num_contours == 0. (Bug #79897)
+* Fix deadlock when destruction of a scaled font indirectly triggers
+ destruction of a second scaled font, causing the global cache to be
+ locked twice. (Bug #93891)
+* Fix X errors reported to applications when shmdt() is called before
+ the Attach request is processed, due to missing xcb and xlib calls.
+* Fix random failure in record-paint-alpha-clip-mast test case, caused
+ by an incorrect assumption that a deferred clear can be skipped.
+ (Bug #84330)
+* Fix crash when dealing with an XShmGetImage() failure, caused by a
+ double free in _get_image_surface(). (Bug #91967)
+* Fix build issue when using non-GNU strings utility. (Bug #88639)
+* Cleanup debugging text sent to stdout instead of log. (Bug #95227)
+
+
Release 1.14.6 (2015-12-09 Bryce Harrington <bryce@osg.samsung.com>)
========================================================================
Simple bugfix release to fix one Windows issue.
For a complete log of changes since 1.14.4, please see:
- http://cairographics.org/releases/ChangeLog.1.14.6
+ http://cairographics.org/releases/ChangeLog.cairo-1.14.6
Features
--------
diff --git a/Build/source/libs/cairo/cairo-src/build/aclocal.float.m4 b/Build/source/libs/cairo/cairo-src/build/aclocal.float.m4
index 8f85f0862ba..ca14ea37707 100644
--- a/Build/source/libs/cairo/cairo-src/build/aclocal.float.m4
+++ b/Build/source/libs/cairo/cairo-src/build/aclocal.float.m4
@@ -31,10 +31,10 @@ int main() { return 0; }
]])], [
-if strings - conftest$ac_exeext | grep noonsees >/dev/null ; then
+if strings -a conftest$ac_exeext | grep noonsees >/dev/null ; then
ax_cv_c_float_words_bigendian=yes
fi
-if strings - conftest$ac_exeext | grep seesnoon >/dev/null ; then
+if strings -a conftest$ac_exeext | grep seesnoon >/dev/null ; then
if test "$ax_cv_c_float_words_bigendian" = unknown; then
ax_cv_c_float_words_bigendian=no
else
diff --git a/Build/source/libs/cairo/cairo-src/cairo-version.h b/Build/source/libs/cairo/cairo-src/cairo-version.h
index 4c1de000c1c..6c0b0902d3f 100644
--- a/Build/source/libs/cairo/cairo-src/cairo-version.h
+++ b/Build/source/libs/cairo/cairo-src/cairo-version.h
@@ -3,6 +3,6 @@
#define CAIRO_VERSION_MAJOR 1
#define CAIRO_VERSION_MINOR 14
-#define CAIRO_VERSION_MICRO 6
+#define CAIRO_VERSION_MICRO 8
#endif
diff --git a/Build/source/libs/cairo/cairo-src/src/cairo-debug.c b/Build/source/libs/cairo/cairo-src/src/cairo-debug.c
index 33d46aa3f79..e7ffe48d28c 100644
--- a/Build/source/libs/cairo/cairo-src/src/cairo-debug.c
+++ b/Build/source/libs/cairo/cairo-src/src/cairo-debug.c
@@ -262,7 +262,7 @@ _cairo_debug_print_path (FILE *stream, cairo_path_fixed_t *path)
box.p1.x, box.p1.y, box.p2.x, box.p2.y);
}
- printf ("\n");
+ fprintf (stream, "\n");
}
void
diff --git a/Build/source/libs/cairo/cairo-src/src/cairo-pattern.c b/Build/source/libs/cairo/cairo-src/src/cairo-pattern.c
index ac5d7af20a2..f0b879836df 100644
--- a/Build/source/libs/cairo/cairo-src/src/cairo-pattern.c
+++ b/Build/source/libs/cairo/cairo-src/src/cairo-pattern.c
@@ -4614,7 +4614,7 @@ static void
_cairo_debug_print_raster_source_pattern (FILE *file,
const cairo_raster_source_pattern_t *raster)
{
- printf (" content: %x, size %dx%d\n", raster->content, raster->extents.width, raster->extents.height);
+ fprintf (file, " content: %x, size %dx%d\n", raster->content, raster->extents.width, raster->extents.height);
}
static void
diff --git a/Build/source/libs/cairo/cairo-src/src/cairo-scaled-font.c b/Build/source/libs/cairo/cairo-src/src/cairo-scaled-font.c
index ac80c97d1c5..a22b36eef19 100644
--- a/Build/source/libs/cairo/cairo-src/src/cairo-scaled-font.c
+++ b/Build/source/libs/cairo/cairo-src/src/cairo-scaled-font.c
@@ -818,23 +818,35 @@ _cairo_scaled_font_thaw_cache (cairo_scaled_font_t *scaled_font)
void
_cairo_scaled_font_reset_cache (cairo_scaled_font_t *scaled_font)
{
+ cairo_scaled_glyph_page_t *page;
+
CAIRO_MUTEX_LOCK (scaled_font->mutex);
assert (! scaled_font->cache_frozen);
assert (! scaled_font->global_cache_frozen);
CAIRO_MUTEX_LOCK (_cairo_scaled_glyph_page_cache_mutex);
- while (! cairo_list_is_empty (&scaled_font->glyph_pages)) {
- cairo_scaled_glyph_page_t *page =
- cairo_list_first_entry (&scaled_font->glyph_pages,
- cairo_scaled_glyph_page_t,
- link);
+ cairo_list_foreach_entry (page,
+ cairo_scaled_glyph_page_t,
+ &scaled_font->glyph_pages,
+ link) {
cairo_scaled_glyph_page_cache.size -= page->cache_entry.size;
_cairo_hash_table_remove (cairo_scaled_glyph_page_cache.hash_table,
(cairo_hash_entry_t *) &page->cache_entry);
+ }
+ CAIRO_MUTEX_UNLOCK (_cairo_scaled_glyph_page_cache_mutex);
+
+ /* Destroy scaled_font's pages while holding its lock only, and not the
+ * global page cache lock. The destructor can cause us to recurse and
+ * end up back here for a different scaled_font. */
+
+ while (! cairo_list_is_empty (&scaled_font->glyph_pages)) {
+ page = cairo_list_first_entry (&scaled_font->glyph_pages,
+ cairo_scaled_glyph_page_t,
+ link);
_cairo_scaled_glyph_page_destroy (scaled_font, page);
}
- CAIRO_MUTEX_UNLOCK (_cairo_scaled_glyph_page_cache_mutex);
+
CAIRO_MUTEX_UNLOCK (scaled_font->mutex);
}
diff --git a/Build/source/libs/cairo/cairo-src/src/cairo-surface-observer.c b/Build/source/libs/cairo/cairo-src/src/cairo-surface-observer.c
index 52b013644db..e6f78e6da6f 100644
--- a/Build/source/libs/cairo/cairo-src/src/cairo-surface-observer.c
+++ b/Build/source/libs/cairo/cairo-src/src/cairo-surface-observer.c
@@ -1218,8 +1218,6 @@ _cairo_surface_observer_mark_dirty (void *abstract_surface,
cairo_surface_observer_t *surface = abstract_surface;
cairo_status_t status;
- printf ("mark-dirty (%d, %d) x (%d, %d)\n", x, y, width, height);
-
status = CAIRO_STATUS_SUCCESS;
if (surface->target->backend->mark_dirty_rectangle)
status = surface->target->backend->mark_dirty_rectangle (surface->target,
diff --git a/Build/source/libs/cairo/cairo-src/src/cairo-truetype-subset.c b/Build/source/libs/cairo/cairo-src/src/cairo-truetype-subset.c
index 645a89abf21..9137ef3aa38 100644
--- a/Build/source/libs/cairo/cairo-src/src/cairo-truetype-subset.c
+++ b/Build/source/libs/cairo/cairo-src/src/cairo-truetype-subset.c
@@ -653,16 +653,34 @@ cairo_truetype_font_write_glyf_table (cairo_truetype_font_t *font,
if (unlikely (status))
goto FAIL;
- if (size != 0) {
- status = font->backend->load_truetype_table (font->scaled_font_subset->scaled_font,
+ if (size > 1) {
+ tt_glyph_data_t *glyph_data;
+ int num_contours;
+
+ status = font->backend->load_truetype_table (font->scaled_font_subset->scaled_font,
TT_TAG_glyf, begin, buffer, &size);
if (unlikely (status))
goto FAIL;
- status = cairo_truetype_font_remap_composite_glyph (font, buffer, size);
- if (unlikely (status))
- goto FAIL;
- }
+ glyph_data = (tt_glyph_data_t *) buffer;
+ num_contours = (int16_t)be16_to_cpu (glyph_data->num_contours);
+ if (num_contours < 0) {
+ status = cairo_truetype_font_remap_composite_glyph (font, buffer, size);
+ if (unlikely (status))
+ goto FAIL;
+ } else if (num_contours == 0) {
+ /* num_contours == 0 is undefined in the Opentype
+ * spec. There are some embedded fonts that have a
+ * space glyph with num_contours = 0 that fails on
+ * some printers. The spec requires glyphs without
+ * contours to have a 0 size glyph entry in the loca
+ * table.
+ *
+ * If num_contours == 0, truncate the glyph to 0 size.
+ */
+ _cairo_array_truncate (&font->output, _cairo_array_num_elements (&font->output) - size);
+ }
+ }
}
status = cairo_truetype_font_align_output (font, &next);
diff --git a/Build/source/libs/cairo/cairo-src/src/cairo-xcb-surface-render.c b/Build/source/libs/cairo/cairo-src/src/cairo-xcb-surface-render.c
index 044339bce8f..139dcda827a 100644
--- a/Build/source/libs/cairo/cairo-src/src/cairo-xcb-surface-render.c
+++ b/Build/source/libs/cairo/cairo-src/src/cairo-xcb-surface-render.c
@@ -3399,8 +3399,6 @@ _composite_mask_clip (void *closure,
}
}
- dst->deferred_clear = FALSE; /* assert(trap extents == extents); */
-
status = _composite_traps (&info,
dst, CAIRO_OPERATOR_SOURCE, mask_pattern,
dst_x, dst_y,
diff --git a/Build/source/libs/cairo/cairo-src/src/cairo-xlib-surface-shm.c b/Build/source/libs/cairo/cairo-src/src/cairo-xlib-surface-shm.c
index fb40699dc1d..9824eff823b 100644
--- a/Build/source/libs/cairo/cairo-src/src/cairo-xlib-surface-shm.c
+++ b/Build/source/libs/cairo/cairo-src/src/cairo-xlib-surface-shm.c
@@ -441,7 +441,7 @@ static void send_event(cairo_xlib_display_t *display,
ev.type = display->shm->event;
ev.send_event = 1; /* XXX or lie? */
- ev.serial = NextRequest (display->display);
+ ev.serial = XNextRequest (display->display);
ev.drawable = display->shm->window;
ev.major_code = display->shm->opcode;
ev.minor_code = X_ShmPutImage;
@@ -599,7 +599,7 @@ _cairo_xlib_shm_pool_create(cairo_xlib_display_t *display,
goto cleanup;
}
- pool->attached = NextRequest (dpy);
+ pool->attached = XNextRequest (dpy);
success = XShmAttach (dpy, &pool->shm);
#if !IPC_RMID_DEFERRED_RELEASE
XSync (dpy, FALSE);
@@ -1199,7 +1199,7 @@ _cairo_xlib_shm_surface_mark_active (cairo_surface_t *_shm)
cairo_xlib_shm_surface_t *shm = (cairo_xlib_shm_surface_t *) _shm;
cairo_xlib_display_t *display = (cairo_xlib_display_t *) _shm->device;
- shm->active = NextRequest (display->display);
+ shm->active = XNextRequest (display->display);
}
void
@@ -1241,7 +1241,7 @@ _cairo_xlib_shm_surface_get_obdata (cairo_surface_t *surface)
cairo_xlib_display_t *display = (cairo_xlib_display_t *) surface->device;
cairo_xlib_shm_surface_t *shm = (cairo_xlib_shm_surface_t *) surface;
- display->shm->last_event = shm->active = NextRequest (display->display);
+ display->shm->last_event = shm->active = XNextRequest (display->display);
return &shm->info->pool->shm;
}
diff --git a/Build/source/libs/cairo/cairo-src/src/cairo-xlib-surface.c b/Build/source/libs/cairo/cairo-src/src/cairo-xlib-surface.c
index 029a542b946..ffea476f68f 100644
--- a/Build/source/libs/cairo/cairo-src/src/cairo-xlib-surface.c
+++ b/Build/source/libs/cairo/cairo-src/src/cairo-xlib-surface.c
@@ -807,6 +807,7 @@ _get_image_surface (cairo_xlib_surface_t *surface,
}
cairo_surface_destroy (&image->base);
+ image = NULL;
}
}
@@ -1011,7 +1012,8 @@ _get_image_surface (cairo_xlib_surface_t *surface,
cairo_device_release (&display->base);
if (unlikely (status)) {
- cairo_surface_destroy (&image->base);
+ if (image)
+ cairo_surface_destroy (&image->base);
return _cairo_surface_create_in_error (status);
}