!47 update to 1.17.8

From: @zhangqiumiao 
Reviewed-by: @t_feng 
Signed-off-by: @t_feng
This commit is contained in:
openeuler-ci-bot 2023-07-28 02:13:48 +00:00 committed by Gitee
commit 360365efcd
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
9 changed files with 289 additions and 183 deletions

View File

@ -1,56 +0,0 @@
From 12a5b7384f35d9a3f4c6b151fac4857444db3d6a Mon Sep 17 00:00:00 2001
From: Nikolaus Waxweiler <madigens@gmail.com>
Date: Sat, 10 Nov 2018 16:44:23 +0000
Subject: [PATCH] Set default LCD filter to FreeType's default
---
src/cairo-ft-font.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/cairo-ft-font.c b/src/cairo-ft-font.c
index 325dd61b4..3c47dc12e 100644
--- a/src/cairo-ft-font.c
+++ b/src/cairo-ft-font.c
@@ -1404,7 +1404,7 @@ _render_glyph_outline (FT_Face face,
cairo_image_surface_t **surface)
{
int rgba = FC_RGBA_UNKNOWN;
- int lcd_filter = FT_LCD_FILTER_LEGACY;
+ int lcd_filter = FT_LCD_FILTER_DEFAULT;
FT_GlyphSlot glyphslot = face->glyph;
FT_Outline *outline = &glyphslot->outline;
FT_Bitmap bitmap;
@@ -1439,13 +1439,13 @@ _render_glyph_outline (FT_Face face,
case CAIRO_LCD_FILTER_NONE:
lcd_filter = FT_LCD_FILTER_NONE;
break;
- case CAIRO_LCD_FILTER_DEFAULT:
case CAIRO_LCD_FILTER_INTRA_PIXEL:
lcd_filter = FT_LCD_FILTER_LEGACY;
break;
case CAIRO_LCD_FILTER_FIR3:
lcd_filter = FT_LCD_FILTER_LIGHT;
break;
+ case CAIRO_LCD_FILTER_DEFAULT:
case CAIRO_LCD_FILTER_FIR5:
lcd_filter = FT_LCD_FILTER_DEFAULT;
break;
@@ -3416,7 +3416,6 @@ _cairo_ft_font_options_substitute (const cairo_font_options_t *options,
case CAIRO_LCD_FILTER_NONE:
lcd_filter = FT_LCD_FILTER_NONE;
break;
- case CAIRO_LCD_FILTER_DEFAULT:
case CAIRO_LCD_FILTER_INTRA_PIXEL:
lcd_filter = FT_LCD_FILTER_LEGACY;
break;
@@ -3424,6 +3423,7 @@ _cairo_ft_font_options_substitute (const cairo_font_options_t *options,
lcd_filter = FT_LCD_FILTER_LIGHT;
break;
default:
+ case CAIRO_LCD_FILTER_DEFAULT:
case CAIRO_LCD_FILTER_FIR5:
lcd_filter = FT_LCD_FILTER_DEFAULT;
break;
--
2.19.1

View File

@ -1,13 +0,0 @@
diff --git a/src/cairo-arc.c b/src/cairo-arc.c
index 390397bae..f9249dbeb 100644
--- a/src/cairo-arc.c
+++ b/src/cairo-arc.c
@@ -99,7 +99,7 @@ _arc_max_angle_for_tolerance_normalized (double tolerance)
do {
angle = M_PI / i++;
error = _arc_error_normalized (angle);
- } while (error > tolerance);
+ } while (error > tolerance && error > __DBL_EPSILON__);
return angle;
}

View File

@ -1,51 +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] Fix mask usage in image-compositor
Conflict:NA
Reference:https://gitlab.freedesktop.org/cairo/cairo/-/commit/03a820b173ed1fdef6ff14b4468f5dbc02ff59be
---
src/cairo-image-compositor.c | 8 ++--
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/cairo-image-compositor.c b/src/cairo-image-compositor.c
index 79ad69f68..4f8aaed99 100644
--- a/src/cairo-image-compositor.c
+++ b/src/cairo-image-compositor.c
@@ -2610,14 +2610,14 @@ _inplace_src_spans (void *abstract_renderer, int y, int h,
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) {
@@ -2655,7 +2655,7 @@ _inplace_src_spans (void *abstract_renderer, int y, int h,
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) {
@@ -2684,7 +2684,7 @@ _inplace_src_spans (void *abstract_renderer, int y, int h,
#endif
}
- m = r->_buf;
+ m = base;
x0 = spans[1].x;
} else {
*m++ = spans[0].coverage;

View File

@ -0,0 +1,63 @@
From 2766d9feeccd5d66e346b0abab38726b8e0aa1e9 Mon Sep 17 00:00:00 2001
From: Adrian Johnson <ajohnson@redneon.com>
Date: Tue, 7 Mar 2023 19:40:21 +1030
Subject: [PATCH] ft: Use normal font size when detecting the format
The format may depend on the font size.
Fixes #643
Reference:https://gitlab.freedesktop.org/cairo/cairo/-/commit/2766d9feeccd5d66e346b0abab38726b8e0aa1e9
Conflict:NA
---
src/cairo-ft-font.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/src/cairo-ft-font.c b/src/cairo-ft-font.c
index 22a6a622b..89af6193d 100644
--- a/src/cairo-ft-font.c
+++ b/src/cairo-ft-font.c
@@ -3314,11 +3314,13 @@ _cairo_ft_scaled_glyph_init_metrics (cairo_ft_scaled_font_t *scaled_font,
if (scaled_font->unscaled->have_color && scaled_font->base.options.color_mode != CAIRO_COLOR_MODE_NO_COLOR)
color_flag = FT_LOAD_COLOR;
#endif
+ /* Ensure use_em_size = FALSE as the format (bitmap or outline)
+ * may change with the size. */
status = _cairo_ft_scaled_glyph_load_glyph (scaled_font,
scaled_glyph,
face,
load_flags | color_flag,
- !hint_metrics,
+ FALSE,
vertical_layout);
if (unlikely (status))
return status;
@@ -3344,6 +3346,18 @@ _cairo_ft_scaled_glyph_init_metrics (cairo_ft_scaled_font_t *scaled_font,
glyph_priv->format = CAIRO_FT_GLYPH_TYPE_BITMAP;
}
+ /* If hinting is off, load the glyph with font size set the the em size. */
+ if (!hint_metrics) {
+ status = _cairo_ft_scaled_glyph_load_glyph (scaled_font,
+ scaled_glyph,
+ face,
+ load_flags | color_flag,
+ TRUE,
+ vertical_layout);
+ if (unlikely (status))
+ return status;
+ }
+
_cairo_ft_scaled_glyph_get_metrics (scaled_font,
face,
vertical_layout,
@@ -3369,6 +3383,7 @@ _cairo_ft_scaled_glyph_init_metrics (cairo_ft_scaled_font_t *scaled_font,
}
if (glyph_priv->format == CAIRO_FT_GLYPH_TYPE_COLR_V1) {
+ /* Restore font size if previously loaded at em_size. */
if (!hint_metrics) {
status = _cairo_ft_scaled_glyph_load_glyph (scaled_font,
scaled_glyph,
--
GitLab

View File

@ -0,0 +1,110 @@
From 5e42a5277eddafd312a73e355d7775a4401dae4e Mon Sep 17 00:00:00 2001
From: Emmanuele Bassi <ebassi@gnome.org>
Date: Fri, 3 Feb 2023 15:40:12 +0100
Subject: [PATCH] tee: Fix cairo wrapper functions
Follow-up to !391 to apply the same changes to the (disabled by default)
tee surface.
Fixes: #634
Reference:https://gitlab.freedesktop.org/cairo/cairo/-/commit/5e42a5277eddafd312a73e355d7775a4401dae4e
Conflict:NA
---
src/cairo-tee-surface.c | 24 ++++++++++++++----------
1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/src/cairo-tee-surface.c b/src/cairo-tee-surface.c
index 7a94c9bca..4994a5a60 100644
--- a/src/cairo-tee-surface.c
+++ b/src/cairo-tee-surface.c
@@ -220,12 +220,12 @@ _cairo_tee_surface_paint (void *abstract_surface,
num_slaves = _cairo_array_num_elements (&surface->slaves);
slaves = _cairo_array_index (&surface->slaves, 0);
for (n = 0; n < num_slaves; n++) {
- status = _cairo_surface_wrapper_paint (&slaves[n], op, source, clip);
+ status = _cairo_surface_wrapper_paint (&slaves[n], op, source, 0, clip);
if (unlikely (status))
return status;
}
- return _cairo_surface_wrapper_paint (&surface->master, op, source, clip);
+ return _cairo_surface_wrapper_paint (&surface->master, op, source, 0, clip);
}
static cairo_int_status_t
@@ -244,13 +244,17 @@ _cairo_tee_surface_mask (void *abstract_surface,
slaves = _cairo_array_index (&surface->slaves, 0);
for (n = 0; n < num_slaves; n++) {
status = _cairo_surface_wrapper_mask (&slaves[n],
- op, source, mask, clip);
+ op, source, 0,
+ mask, 0,
+ clip);
if (unlikely (status))
return status;
}
return _cairo_surface_wrapper_mask (&surface->master,
- op, source, mask, clip);
+ op, source, 0,
+ mask, 0,
+ clip);
}
static cairo_int_status_t
@@ -274,7 +278,7 @@ _cairo_tee_surface_stroke (void *abstract_surface,
slaves = _cairo_array_index (&surface->slaves, 0);
for (n = 0; n < num_slaves; n++) {
status = _cairo_surface_wrapper_stroke (&slaves[n],
- op, source,
+ op, source, 0,
path, style,
ctm, ctm_inverse,
tolerance, antialias,
@@ -284,7 +288,7 @@ _cairo_tee_surface_stroke (void *abstract_surface,
}
return _cairo_surface_wrapper_stroke (&surface->master,
- op, source,
+ op, source, 0,
path, style,
ctm, ctm_inverse,
tolerance, antialias,
@@ -310,7 +314,7 @@ _cairo_tee_surface_fill (void *abstract_surface,
slaves = _cairo_array_index (&surface->slaves, 0);
for (n = 0; n < num_slaves; n++) {
status = _cairo_surface_wrapper_fill (&slaves[n],
- op, source,
+ op, source, 0,
path, fill_rule,
tolerance, antialias,
clip);
@@ -319,7 +323,7 @@ _cairo_tee_surface_fill (void *abstract_surface,
}
return _cairo_surface_wrapper_fill (&surface->master,
- op, source,
+ op, source, 0,
path, fill_rule,
tolerance, antialias,
clip);
@@ -361,7 +365,7 @@ _cairo_tee_surface_show_text_glyphs (void *abstract_surface,
for (n = 0; n < num_slaves; n++) {
memcpy (glyphs_copy, glyphs, sizeof (cairo_glyph_t) * num_glyphs);
status = _cairo_surface_wrapper_show_text_glyphs (&slaves[n], op,
- source,
+ source, 0,
utf8, utf8_len,
glyphs_copy, num_glyphs,
clusters, num_clusters,
@@ -374,7 +378,7 @@ _cairo_tee_surface_show_text_glyphs (void *abstract_surface,
memcpy (glyphs_copy, glyphs, sizeof (cairo_glyph_t) * num_glyphs);
status = _cairo_surface_wrapper_show_text_glyphs (&surface->master, op,
- source,
+ source, 0,
utf8, utf8_len,
glyphs_copy, num_glyphs,
clusters, num_clusters,
--
GitLab

View File

@ -0,0 +1,71 @@
From 10cc34f521cf272f881bbad9a6fc4e794cca8687 Mon Sep 17 00:00:00 2001
From: Adrian Johnson <ajohnson@redneon.com>
Date: Sat, 13 May 2023 18:51:40 +0930
Subject: [PATCH] ft: don't use scaled_glyph->dev_private to store data
It is also used by the xlib surface.
Fixes #778
Reference:https://gitlab.freedesktop.org/cairo/cairo/-/commit/10cc34f521cf272f881bbad9a6fc4e794cca8687
Conflict:NA
---
src/cairo-ft-font.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/src/cairo-ft-font.c b/src/cairo-ft-font.c
index 834e4ba31..76c9e008f 100644
--- a/src/cairo-ft-font.c
+++ b/src/cairo-ft-font.c
@@ -2600,6 +2600,7 @@ _cairo_ft_scaled_glyph_set_foreground_color (cairo_ft_scaled_font_t *scaled_font
static cairo_int_status_t
_cairo_ft_scaled_glyph_init_surface (cairo_ft_scaled_font_t *scaled_font,
cairo_scaled_glyph_t *scaled_glyph,
+ cairo_ft_glyph_private_t *glyph_priv,
cairo_scaled_glyph_info_t info,
FT_Face face,
const cairo_color_t *foreground_color,
@@ -2611,7 +2612,6 @@ _cairo_ft_scaled_glyph_init_surface (cairo_ft_scaled_font_t *scaled_font,
cairo_status_t status;
cairo_image_surface_t *surface;
cairo_bool_t uses_foreground_color = FALSE;
- cairo_ft_glyph_private_t *glyph_priv = scaled_glyph->dev_private;
/* Only one info type at a time handled in this function */
assert (info == CAIRO_SCALED_GLYPH_INFO_COLOR_SURFACE || info == CAIRO_SCALED_GLYPH_INFO_SURFACE);
@@ -3302,7 +3302,6 @@ _cairo_ft_scaled_glyph_init_metrics (cairo_ft_scaled_font_t *scaled_font,
_cairo_scaled_glyph_attach_private (scaled_glyph, &glyph_priv->base,
&ft_glyph_private_key,
_cairo_ft_glyph_fini);
- scaled_glyph->dev_private = glyph_priv;
/* We need to load color to determine if this is a color format. */
int color_flag = 0;
@@ -3461,8 +3460,8 @@ _cairo_ft_scaled_glyph_init (void *abstract_font,
goto FAIL;
}
- /* scaled_glyph->dev_private is intialized by _cairo_ft_scaled_glyph_init_metrics() */
- glyph_priv = scaled_glyph->dev_private;
+ glyph_priv = (cairo_ft_glyph_private_t *) _cairo_scaled_glyph_find_private (scaled_glyph,
+ &ft_glyph_private_key);
assert (glyph_priv != NULL);
if (info & CAIRO_SCALED_GLYPH_INFO_RECORDING_SURFACE) {
@@ -3514,6 +3513,7 @@ _cairo_ft_scaled_glyph_init (void *abstract_font,
} else {
status = _cairo_ft_scaled_glyph_init_surface (scaled_font,
scaled_glyph,
+ glyph_priv,
CAIRO_SCALED_GLYPH_INFO_COLOR_SURFACE,
face,
foreground_color,
@@ -3527,6 +3527,7 @@ _cairo_ft_scaled_glyph_init (void *abstract_font,
if (info & CAIRO_SCALED_GLYPH_INFO_SURFACE) {
status = _cairo_ft_scaled_glyph_init_surface (scaled_font,
scaled_glyph,
+ glyph_priv,
CAIRO_SCALED_GLYPH_INFO_SURFACE,
face,
NULL, /* foreground color */
--
GitLab

View File

@ -1,35 +0,0 @@
From 53738879bd6bc400d27b96cf0fe759dadc9f4fb0 Mon Sep 17 00:00:00 2001
From: sun_hai_10 <sunhai10@huawei.com>
Date: Wed, 14 Jun 2023 16:00:24 +0800
Subject: [PATCH] fix call get_unaligned_be32 heap buffer overflow
---
src/cairo-image-info.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/cairo-image-info.c b/src/cairo-image-info.c
index d147e37..0310c4b 100644
--- a/src/cairo-image-info.c
+++ b/src/cairo-image-info.c
@@ -190,7 +190,7 @@ _jpx_match_box (const unsigned char *p, const unsigned char *end, uint32_t type)
static const unsigned char *
_jpx_find_box (const unsigned char *p, const unsigned char *end, uint32_t type)
{
- while (p < end) {
+ while ((p < end) && (p + 4 < end)) {
if (_jpx_match_box (p, end, type))
return p;
p = _jpx_next_box (p);
@@ -346,6 +346,9 @@ _jbig2_get_next_segment (const unsigned char *p,
big_page_size = (p[4] & 0x40) != 0;
p += 5;
+ if (p + 4 >= end)
+ return NULL;
+
num_segs = p[0] >> 5;
if (num_segs == 7) {
num_segs = get_unaligned_be32 (p) & 0x1fffffff;
--
2.23.0

View File

@ -1,29 +1,32 @@
%global cairogl --disable-gl
Name: cairo Name: cairo
Version: 1.17.4 Version: 1.17.8
Release: 4 Release: 1
Summary: A 2D graphics library Summary: A 2D graphics library
License: LGPLv2 or MPLv1.1 License: LGPLv2 or MPLv1.1
URL: http://cairographics.org URL: http://cairographics.org
Source0: http://cairographics.org/snapshots/%{name}-%{version}.tar.xz Source0: http://cairographics.org/snapshots/%{name}-%{version}.tar.xz
Patch0001: 0001-Set-default-LCD-filter-to-FreeType-s-default.patch
Patch6000: CVE-2019-6461.patch Patch6000: CVE-2019-6461.patch
Patch6001: CVE-2019-6462.patch
Patch6002: backport-CVE-2020-35492.patch
Patch9002: bugfix-cairo-truetype-reverse-cmap-detected-memory-leaks.patch Patch9000: bugfix-cairo-truetype-reverse-cmap-detected-memory-leaks.patch
Patch9003: bugfix-fix-read-memory-access.patch Patch9001: bugfix-fix-read-memory-access.patch
Patch9004: bugfix-fix-call-get_unaligned_be32-heap-buffer-overflow.patch Patch9002: bugfix-fix-heap-buffer-overflow-in-cairo_cff_parse_charstring.patch
Patch9005: bugfix-fix-heap-buffer-overflow-in-cairo_cff_parse_charstring.patch
BuildRequires: gcc make Patch6001: backport-tee-Fix-cairo-wrapper-functions.patch
BuildRequires: pkgconfig glib2-devel librsvg2-devel Patch6002: backport-ft-Use-normal-font-size-when-detecting-the-format.patch
BuildRequires: libXrender-devel libX11-devel libpng-devel libxml2-devel Patch6003: backport-tee-ft-dont-use-scaled_glyph-dev_private-to-store-data.patch
BuildRequires: pixman-devel >= 0.36.0
BuildRequires: freetype-devel >= 2.1.9 BuildRequires: gcc gcc-c++ gtk-doc meson
BuildRequires: fontconfig-devel >= 2.2.95 BuildRequires: pkgconfig(expat)
BuildRequires: pkgconfig(pixman-1) >= 0.36.0
BuildRequires: pkgconfig(freetype2) >= 2.1.9
BuildRequires: pkgconfig(fontconfig) >= 2.2.95
BuildRequires: pkgconfig(gobject-2.0)
BuildRequires: pkgconfig(libpng)
BuildRequires: pkgconfig(librsvg-2.0)
BuildRequires: pkgconfig(xext)
BuildRequires: pkgconfig(xcb-render)
BuildRequires: pkgconfig(xrender)
%description %description
Cairo is a 2D graphics libarary with support for multiple output devices. Cairo is a 2D graphics libarary with support for multiple output devices.
@ -66,6 +69,7 @@ needed for developing software which uses the cairo Gobject library.
%package tools %package tools
Summary: Development tools for cairo Summary: Development tools for cairo
Requires: %{name}%{?_isa} = %{version}-%{release}
%description tools %description tools
Cairo is a 2D graphics library designed to provide high-quality display Cairo is a 2D graphics library designed to provide high-quality display
@ -78,25 +82,30 @@ This package contains tools for working with the cairo graphics library.
%autosetup -p1 %autosetup -p1
%build %build
%configure --disable-static --enable-xlib --enable-ft --enable-ps \ %meson \
--enable-pdf --enable-svg --enable-tee --enable-gobject \ -Dfreetype=enabled \
%{cairogl} --disable-gtk-doc --disable-symbol-lookup -Dfontconfig=enabled \
sed -i -e 's/^hardcode_libdir_flag_spec=.*/hardcode_libdir_flag_spec=""/g' \ -Dglib=enabled \
-e 's/^runpath_var=LD_RUN_PATH/runpath_var=DIE_RPATH_DIE/g' libtool -Dgtk_doc=true \
%make_build V=1 -Dspectre=disabled \
-Dsymbol-lookup=disabled \
-Dtee=enabled \
-Dtests=disabled \
-Dxcb=enabled \
-Dxlib=enabled \
-Dxml=disabled
%meson_build
%install %install
%make_install %meson_install
find $RPM_BUILD_ROOT -name '*.la' -delete
%files %files
%license COPYING COPYING-LGPL-2.1 COPYING-MPL-1.1 %license COPYING COPYING-LGPL-2.1 COPYING-MPL-1.1
%doc AUTHORS BIBLIOGRAPHY BUGS NEWS README %doc AUTHORS BUGS NEWS README.md
%{_libdir}/libcairo.so.2* %{_libdir}/libcairo.so.2*
%{_libdir}/libcairo-script-interpreter.so.2* %{_libdir}/libcairo-script-interpreter.so.2*
%files devel %files devel
%doc ChangeLog PORTING_GUIDE
%dir %{_includedir}/cairo/ %dir %{_includedir}/cairo/
%{_includedir}/cairo/cairo-deprecated.h %{_includedir}/cairo/cairo-deprecated.h
%{_includedir}/cairo/cairo-features.h %{_includedir}/cairo/cairo-features.h
@ -120,6 +129,7 @@ find $RPM_BUILD_ROOT -name '*.la' -delete
%{_libdir}/pkgconfig/cairo-pdf.pc %{_libdir}/pkgconfig/cairo-pdf.pc
%{_libdir}/pkgconfig/cairo-png.pc %{_libdir}/pkgconfig/cairo-png.pc
%{_libdir}/pkgconfig/cairo-ps.pc %{_libdir}/pkgconfig/cairo-ps.pc
%{_libdir}/pkgconfig/cairo-script-interpreter.pc
%{_libdir}/pkgconfig/cairo-svg.pc %{_libdir}/pkgconfig/cairo-svg.pc
%{_libdir}/pkgconfig/cairo-tee.pc %{_libdir}/pkgconfig/cairo-tee.pc
%{_libdir}/pkgconfig/cairo-xlib.pc %{_libdir}/pkgconfig/cairo-xlib.pc
@ -138,10 +148,17 @@ find $RPM_BUILD_ROOT -name '*.la' -delete
%{_libdir}/pkgconfig/cairo-gobject.pc %{_libdir}/pkgconfig/cairo-gobject.pc
%files tools %files tools
%{_bindir}/cairo-sphinx
%{_bindir}/cairo-trace %{_bindir}/cairo-trace
%{_libdir}/cairo/ %{_libdir}/cairo/
%changelog %changelog
* Wed Jul 26 2023 zhangqiumiao<zhangqiumiao1@huawei.com> - 1.17.8-1
- Type:bugfix
- ID:NA
- SUG:NA
- DESC:update to 1.17.8
* Wed Jun 14 2023 sunhai<sunhai10@huawei.com> - 1.17.4-4 * Wed Jun 14 2023 sunhai<sunhai10@huawei.com> - 1.17.4-4
- Type:bugfix - Type:bugfix
- ID:NA - ID:NA