mirror of
https://github.com/openwrt/video.git
synced 2025-12-21 17:04:37 +04:00
cairo: update to 1.18.2
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
This commit is contained in:
@@ -1,22 +1,19 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=cairo
|
||||
PKG_VERSION:=1.16.0
|
||||
PKG_VERSION:=1.18.2
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||
PKG_SOURCE_URL:=https://cairo.freedesktop.org/releases/
|
||||
PKG_HASH:=5e7b29b3f113ef870d1e3ecf8adf21f923396401604bda16d44be45e66052331
|
||||
PKG_HASH:=a62b9bb42425e844cc3d6ddde043ff39dbabedd1542eba57a2eb79f85889d45a
|
||||
|
||||
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
|
||||
PKG_LICENSE:=LGPL-2.1-or-later MPL-1.1
|
||||
PKG_LICENSE_FILES:=COPYING COPYING-LGPL-2.1 COPYING-MPL-1.1
|
||||
|
||||
PKG_FIXUP:=autoreconf
|
||||
PKG_INSTALL:=1
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/meson.mk
|
||||
|
||||
define Package/libcairo
|
||||
SECTION:=libs
|
||||
@@ -31,35 +28,15 @@ define Package/libcairo/description
|
||||
Cairo is a 2D graphics library with support for multiple output devices.
|
||||
endef
|
||||
|
||||
CONFIGURE_ARGS += \
|
||||
--oldincludedir="$(STAGING_DIR)/usr/include" \
|
||||
--x-includes="$(STAGING_DIR)/usr/include" \
|
||||
--x-libraries="$(STAGING_DIR)/usr/lib" \
|
||||
--without-x \
|
||||
--without-gallium \
|
||||
--enable-pdf \
|
||||
--enable-png \
|
||||
--enable-ps \
|
||||
--enable-svg \
|
||||
--enable-tee \
|
||||
--enable-ft \
|
||||
--enable-glesv3 \
|
||||
--enable-test-surfaces=no \
|
||||
--enable-drm=no \
|
||||
--enable-gallium=no \
|
||||
--enable-x=no \
|
||||
--enable-xcb=no \
|
||||
--enable-xlib-xrender=no \
|
||||
--enable-xcb=no \
|
||||
--enable-xlib-xcb=no \
|
||||
--enable-xcb-shm=no
|
||||
|
||||
define Package/libcairo/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so* $(1)/usr/lib
|
||||
$(INSTALL_DIR) $(1)/usr/lib/cairo
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/cairo/*.so $(1)/usr/lib/cairo
|
||||
endef
|
||||
MESON_ARGS += \
|
||||
-Ddwrite=disabled \
|
||||
-Dfontconfig=enabled \
|
||||
-Dfreetype=enabled \
|
||||
-Dpng=enabled \
|
||||
-Dxcb=disabled \
|
||||
-Dxlib=disabled \
|
||||
-Dxlib-xcb=disabled \
|
||||
-Dzlib=enabled
|
||||
|
||||
define Build/InstallDev
|
||||
$(INSTALL_DIR) $(1)/usr/include/cairo
|
||||
@@ -72,4 +49,11 @@ define Build/InstallDev
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/*.pc $(1)/usr/lib/pkgconfig
|
||||
endef
|
||||
|
||||
define Package/libcairo/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so* $(1)/usr/lib
|
||||
$(INSTALL_DIR) $(1)/usr/lib/cairo
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/cairo/*.so $(1)/usr/lib/cairo
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,libcairo))
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
From 90e85c2493fdfa3551f202ff10282463f1e36645 Mon Sep 17 00:00:00 2001
|
||||
From: Carlos Garcia Campos <cgarcia@igalia.com>
|
||||
Date: Mon, 19 Nov 2018 12:33:07 +0100
|
||||
Subject: [PATCH] ft: Use FT_Done_MM_Var instead of free when available in
|
||||
cairo_ft_apply_variations
|
||||
|
||||
Fixes a crash when using freetype >= 2.9
|
||||
---
|
||||
src/cairo-ft-font.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
--- a/src/cairo-ft-font.c
|
||||
+++ b/src/cairo-ft-font.c
|
||||
@@ -2393,7 +2393,11 @@ skip:
|
||||
done:
|
||||
free (coords);
|
||||
free (current_coords);
|
||||
+#if HAVE_FT_DONE_MM_VAR
|
||||
+ FT_Done_MM_Var (face->glyph->library, ft_mm_var);
|
||||
+#else
|
||||
free (ft_mm_var);
|
||||
+#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
From https://cgit.freedesktop.org/cairo/commit/?id=4c8813f0eaacc32c27126ad2296951a626300b89
|
||||
|
||||
Fixes https://gitlab.freedesktop.org/cairo/cairo/issues/342
|
||||
|
||||
From 4c8813f0eaacc32c27126ad2296951a626300b89 Mon Sep 17 00:00:00 2001
|
||||
From: Adrian Johnson <ajohnson@redneon.com>
|
||||
Date: Thu, 25 Oct 2018 18:46:17 +1030
|
||||
Subject: pdf: add missing flush
|
||||
|
||||
Issue #342
|
||||
---
|
||||
src/cairo-pdf-surface.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
--- a/src/cairo-pdf-surface.c
|
||||
+++ b/src/cairo-pdf-surface.c
|
||||
@@ -7711,6 +7711,11 @@ _cairo_pdf_surface_mask (void *abstrac
|
||||
* and most common, case to handle. */
|
||||
if (_cairo_pattern_is_constant_alpha (mask, &extents.bounded, &alpha) &&
|
||||
_can_paint_pattern (source)) {
|
||||
+
|
||||
+ status = _cairo_pdf_operators_flush (&surface->pdf_operators);
|
||||
+ if (unlikely (status))
|
||||
+ goto cleanup;
|
||||
+
|
||||
_cairo_output_stream_printf (surface->output, "q\n");
|
||||
status = _cairo_pdf_surface_paint_pattern (surface,
|
||||
op,
|
||||
@@ -1,120 +0,0 @@
|
||||
From 03a820b173ed1fdef6ff14b4468f5dbc02ff59be Mon Sep 17 00:00:00 2001
|
||||
From: Heiko Lewin <heiko.lewin@worldiety.de>
|
||||
Date: Tue, 15 Dec 2020 16:48:19 +0100
|
||||
Subject: [PATCH 1/3] Fix mask usage in image-compositor
|
||||
|
||||
---
|
||||
src/cairo-image-compositor.c | 8 ++--
|
||||
test/Makefile.sources | 1 +
|
||||
test/bug-image-compositor.c | 39 ++++++++++++++++++++
|
||||
test/reference/bug-image-compositor.ref.png | Bin 0 -> 185 bytes
|
||||
4 files changed, 44 insertions(+), 4 deletions(-)
|
||||
create mode 100644 test/bug-image-compositor.c
|
||||
create mode 100644 test/reference/bug-image-compositor.ref.png
|
||||
|
||||
--- a/src/cairo-image-compositor.c
|
||||
+++ b/src/cairo-image-compositor.c
|
||||
@@ -2601,14 +2601,14 @@ _inplace_src_spans (void *abstract_rende
|
||||
unsigned num_spans)
|
||||
{
|
||||
cairo_image_span_renderer_t *r = abstract_renderer;
|
||||
- uint8_t *m;
|
||||
+ uint8_t *m, *base = (uint8_t*)pixman_image_get_data(r->mask);
|
||||
int x0;
|
||||
|
||||
if (num_spans == 0)
|
||||
return CAIRO_STATUS_SUCCESS;
|
||||
|
||||
x0 = spans[0].x;
|
||||
- m = r->_buf;
|
||||
+ m = base;
|
||||
do {
|
||||
int len = spans[1].x - spans[0].x;
|
||||
if (len >= r->u.composite.run_length && spans[0].coverage == 0xff) {
|
||||
@@ -2646,7 +2646,7 @@ _inplace_src_spans (void *abstract_rende
|
||||
spans[0].x, y,
|
||||
spans[1].x - spans[0].x, h);
|
||||
|
||||
- m = r->_buf;
|
||||
+ m = base;
|
||||
x0 = spans[1].x;
|
||||
} else if (spans[0].coverage == 0x0) {
|
||||
if (spans[0].x != x0) {
|
||||
@@ -2675,7 +2675,7 @@ _inplace_src_spans (void *abstract_rende
|
||||
#endif
|
||||
}
|
||||
|
||||
- m = r->_buf;
|
||||
+ m = base;
|
||||
x0 = spans[1].x;
|
||||
} else {
|
||||
*m++ = spans[0].coverage;
|
||||
--- /dev/null
|
||||
+++ b/test/bug-image-compositor.c
|
||||
@@ -0,0 +1,66 @@
|
||||
+/*
|
||||
+ * Copyright © 2020 Uli Schlachter, Heiko Lewin
|
||||
+ *
|
||||
+ * Permission is hereby granted, free of charge, to any person
|
||||
+ * obtaining a copy of this software and associated documentation
|
||||
+ * files (the "Software"), to deal in the Software without
|
||||
+ * restriction, including without limitation the rights to use, copy,
|
||||
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
+ * of the Software, and to permit persons to whom the Software is
|
||||
+ * furnished to do so, subject to the following conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice shall be
|
||||
+ * included in all copies or substantial portions of the Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
+ * SOFTWARE.
|
||||
+ *
|
||||
+ * Author: Uli Schlachter <psychon@znc.in>
|
||||
+ * Author: Heiko Lewin <hlewin@gmx.de>
|
||||
+ */
|
||||
+#include "cairo-test.h"
|
||||
+
|
||||
+
|
||||
+/* This test reproduces an overflow of a mask-buffer in cairo-image-compositor.c */
|
||||
+
|
||||
+static cairo_test_status_t
|
||||
+draw (cairo_t *cr, int width, int height)
|
||||
+{
|
||||
+ cairo_set_source_rgb (cr, 0., 0., 0.);
|
||||
+ cairo_paint (cr);
|
||||
+
|
||||
+ cairo_set_source_rgb (cr, 1., 1., 1.);
|
||||
+ cairo_set_line_width (cr, 1.);
|
||||
+
|
||||
+ cairo_pattern_t *p = cairo_pattern_create_linear (0, 0, width, height);
|
||||
+ cairo_pattern_add_color_stop_rgb (p, 0, 0.99, 1, 1);
|
||||
+ cairo_pattern_add_color_stop_rgb (p, 1, 1, 1, 1);
|
||||
+ cairo_set_source (cr, p);
|
||||
+ cairo_pattern_destroy(p);
|
||||
+
|
||||
+ cairo_move_to (cr, 0.5, -1);
|
||||
+ for (int i = 0; i < width; i+=3) {
|
||||
+ cairo_rel_line_to (cr, 2, 2);
|
||||
+ cairo_rel_line_to (cr, 1, -2);
|
||||
+ }
|
||||
+
|
||||
+ cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
|
||||
+ cairo_stroke (cr);
|
||||
+
|
||||
+ return CAIRO_TEST_SUCCESS;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+CAIRO_TEST (bug_image_compositor,
|
||||
+ "Crash in image-compositor",
|
||||
+ "stroke, stress", /* keywords */
|
||||
+ NULL, /* requirements */
|
||||
+ 10000, 1,
|
||||
+ NULL, draw)
|
||||
+
|
||||
@@ -1,56 +0,0 @@
|
||||
From 79ad01724161502e8d9d2bd384ff1f0174e5df6e Mon Sep 17 00:00:00 2001
|
||||
From: Matthias Clasen <mclasen@redhat.com>
|
||||
Date: Thu, 30 May 2019 07:30:55 -0400
|
||||
Subject: [PATCH] Fix a thinko in composite_color_glyphs
|
||||
|
||||
We can't just move around the contents of the
|
||||
passed-in string, we need to make a copy. This
|
||||
was showing up as memory corruption in pango.
|
||||
|
||||
See https://gitlab.gnome.org/GNOME/pango/issues/346
|
||||
---
|
||||
src/cairo-surface.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
Patch-Source: https://github.com/matthiasclasen/cairo/commit/79ad01724161502e8d9d2bd384ff1f0174e5df6e
|
||||
|
||||
--- a/src/cairo-surface.c
|
||||
+++ b/src/cairo-surface.c
|
||||
@@ -2820,6 +2820,7 @@ _cairo_surface_show_text_glyphs (cairo_s
|
||||
const cairo_clip_t *clip)
|
||||
{
|
||||
cairo_int_status_t status;
|
||||
+ char *utf8_copy = NULL;
|
||||
|
||||
TRACE ((stderr, "%s\n", __FUNCTION__));
|
||||
if (unlikely (surface->status))
|
||||
@@ -2847,6 +2848,10 @@ _cairo_surface_show_text_glyphs (cairo_s
|
||||
status = CAIRO_INT_STATUS_UNSUPPORTED;
|
||||
|
||||
if (_cairo_scaled_font_has_color_glyphs (scaled_font)) {
|
||||
+ utf8_copy = malloc (sizeof (char) * utf8_len);
|
||||
+ memcpy (utf8_copy, utf8, sizeof (char) * utf8_len);
|
||||
+ utf8 = utf8_copy;
|
||||
+
|
||||
status = composite_color_glyphs (surface, op,
|
||||
source,
|
||||
(char *)utf8, &utf8_len,
|
||||
@@ -2861,6 +2866,8 @@ _cairo_surface_show_text_glyphs (cairo_s
|
||||
if (num_glyphs == 0)
|
||||
goto DONE;
|
||||
}
|
||||
+ else
|
||||
+ utf8_copy = NULL;
|
||||
|
||||
/* The logic here is duplicated in _cairo_analysis_surface show_glyphs and
|
||||
* show_text_glyphs. Keep in synch. */
|
||||
@@ -2918,6 +2925,9 @@ DONE:
|
||||
surface->serial++;
|
||||
}
|
||||
|
||||
+ if (utf8_copy)
|
||||
+ free (utf8_copy);
|
||||
+
|
||||
return _cairo_surface_set_error (surface, status);
|
||||
}
|
||||
|
||||
@@ -1,114 +0,0 @@
|
||||
From ef959bc76e65ea0b0d4ba3ee50dfbce31c3484ad Mon Sep 17 00:00:00 2001
|
||||
From: Marek Kasik <mkasik@redhat.com>
|
||||
Date: Fri, 27 Mar 2020 19:39:46 +0100
|
||||
Subject: [PATCH] cff: Allow empty array of operands for certain operators
|
||||
|
||||
Operators BlueValues, OtherBlues, FamilyBlues, FamilyOtherBlues,
|
||||
StemSnapH and StemSnapV have operands of type delta which can be
|
||||
a number or an array of delta-encoded numbers. This array can be
|
||||
empty according to freetype developers.
|
||||
This commit checks whether current operator is among those listed
|
||||
and permits empty operand in such case.
|
||||
---
|
||||
src/cairo-cff-subset.c | 78 ++++++++++++++++++++++++++----------------
|
||||
1 file changed, 49 insertions(+), 29 deletions(-)
|
||||
|
||||
Patch-Source: https://src.fedoraproject.org/rpms/cairo/blob/ba42ecc23bb1162a1951edc0209f9f48e87bba7e/f/0001-cff-Allow-empty-array-of-operands-for-certain-operat.patch
|
||||
See-Also: https://bugzilla.redhat.com/show_bug.cgi?id=1817958
|
||||
|
||||
--- a/src/cairo-cff-subset.c
|
||||
+++ b/src/cairo-cff-subset.c
|
||||
@@ -56,30 +56,36 @@
|
||||
|
||||
/* CFF Dict Operators. If the high byte is 0 the command is encoded
|
||||
* with a single byte. */
|
||||
-#define BASEFONTNAME_OP 0x0c16
|
||||
-#define CIDCOUNT_OP 0x0c22
|
||||
-#define CHARSET_OP 0x000f
|
||||
-#define CHARSTRINGS_OP 0x0011
|
||||
-#define COPYRIGHT_OP 0x0c00
|
||||
-#define DEFAULTWIDTH_OP 0x0014
|
||||
-#define ENCODING_OP 0x0010
|
||||
-#define FAMILYNAME_OP 0x0003
|
||||
-#define FDARRAY_OP 0x0c24
|
||||
-#define FDSELECT_OP 0x0c25
|
||||
-#define FONTBBOX_OP 0x0005
|
||||
-#define FONTMATRIX_OP 0x0c07
|
||||
-#define FONTNAME_OP 0x0c26
|
||||
-#define FULLNAME_OP 0x0002
|
||||
-#define LOCAL_SUB_OP 0x0013
|
||||
-#define NOMINALWIDTH_OP 0x0015
|
||||
-#define NOTICE_OP 0x0001
|
||||
-#define POSTSCRIPT_OP 0x0c15
|
||||
-#define PRIVATE_OP 0x0012
|
||||
-#define ROS_OP 0x0c1e
|
||||
-#define UNIQUEID_OP 0x000d
|
||||
-#define VERSION_OP 0x0000
|
||||
-#define WEIGHT_OP 0x0004
|
||||
-#define XUID_OP 0x000e
|
||||
+#define BASEFONTNAME_OP 0x0c16
|
||||
+#define CIDCOUNT_OP 0x0c22
|
||||
+#define CHARSET_OP 0x000f
|
||||
+#define CHARSTRINGS_OP 0x0011
|
||||
+#define COPYRIGHT_OP 0x0c00
|
||||
+#define DEFAULTWIDTH_OP 0x0014
|
||||
+#define ENCODING_OP 0x0010
|
||||
+#define FAMILYNAME_OP 0x0003
|
||||
+#define FDARRAY_OP 0x0c24
|
||||
+#define FDSELECT_OP 0x0c25
|
||||
+#define FONTBBOX_OP 0x0005
|
||||
+#define FONTMATRIX_OP 0x0c07
|
||||
+#define FONTNAME_OP 0x0c26
|
||||
+#define FULLNAME_OP 0x0002
|
||||
+#define LOCAL_SUB_OP 0x0013
|
||||
+#define NOMINALWIDTH_OP 0x0015
|
||||
+#define NOTICE_OP 0x0001
|
||||
+#define POSTSCRIPT_OP 0x0c15
|
||||
+#define PRIVATE_OP 0x0012
|
||||
+#define ROS_OP 0x0c1e
|
||||
+#define UNIQUEID_OP 0x000d
|
||||
+#define VERSION_OP 0x0000
|
||||
+#define WEIGHT_OP 0x0004
|
||||
+#define XUID_OP 0x000e
|
||||
+#define BLUEVALUES_OP 0x0006
|
||||
+#define OTHERBLUES_OP 0x0007
|
||||
+#define FAMILYBLUES_OP 0x0008
|
||||
+#define FAMILYOTHERBLUES_OP 0x0009
|
||||
+#define STEMSNAPH_OP 0x0c0c
|
||||
+#define STEMSNAPV_OP 0x0c0d
|
||||
|
||||
#define NUM_STD_STRINGS 391
|
||||
|
||||
@@ -615,13 +621,27 @@ cff_dict_create_operator (int
|
||||
return _cairo_error (CAIRO_STATUS_NO_MEMORY);
|
||||
|
||||
_cairo_dict_init_key (op, operator);
|
||||
- op->operand = _cairo_malloc (size);
|
||||
- if (unlikely (op->operand == NULL)) {
|
||||
- free (op);
|
||||
- return _cairo_error (CAIRO_STATUS_NO_MEMORY);
|
||||
+ if (size != 0) {
|
||||
+ op->operand = _cairo_malloc (size);
|
||||
+ if (unlikely (op->operand == NULL)) {
|
||||
+ free (op);
|
||||
+ return _cairo_error (CAIRO_STATUS_NO_MEMORY);
|
||||
+ }
|
||||
+ memcpy (op->operand, operand, size);
|
||||
+ } else {
|
||||
+ op->operand = NULL;
|
||||
+ /* Delta-encoded arrays can be empty. */
|
||||
+ if (operator != BLUEVALUES_OP &&
|
||||
+ operator != OTHERBLUES_OP &&
|
||||
+ operator != FAMILYBLUES_OP &&
|
||||
+ operator != FAMILYOTHERBLUES_OP &&
|
||||
+ operator != STEMSNAPH_OP &&
|
||||
+ operator != STEMSNAPV_OP) {
|
||||
+ free (op);
|
||||
+ return _cairo_error (CAIRO_STATUS_NO_MEMORY);
|
||||
+ }
|
||||
}
|
||||
|
||||
- memcpy (op->operand, operand, size);
|
||||
op->operand_length = size;
|
||||
op->operand_offset = -1;
|
||||
|
||||
Reference in New Issue
Block a user