diff options
Diffstat (limited to 'extra/cairo')
-rw-r--r-- | extra/cairo/fix-mask-usage-in-image-compositor.patch | 172 | ||||
-rw-r--r-- | extra/cairo/musl-stacksize.patch | 23 | ||||
-rw-r--r-- | extra/cairo/pdf-font-subset-Generate-valid-font-names.patch | 58 |
3 files changed, 0 insertions, 253 deletions
diff --git a/extra/cairo/fix-mask-usage-in-image-compositor.patch b/extra/cairo/fix-mask-usage-in-image-compositor.patch deleted file mode 100644 index 8d5717f..0000000 --- a/extra/cairo/fix-mask-usage-in-image-compositor.patch +++ /dev/null @@ -1,172 +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 - -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; -diff --git a/test/bug-image-compositor.c b/test/bug-image-compositor.c -new file mode 100644 -index 000000000..fc4fd370b ---- /dev/null -+++ b/test/bug-image-compositor.c -@@ -0,0 +1,39 @@ -+#include "cairo-test.h" -+ -+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_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); -+ -+ cairo_pattern_destroy(p); -+ -+ return CAIRO_TEST_SUCCESS; -+} -+ -+ -+CAIRO_TEST (bug_image_compositor, -+ "Crash in image-compositor", -+ "stroke, stress", /* keywords */ -+ NULL, /* requirements */ -+ 10000, 1, -+ NULL, draw) -+ -+ - -From 8bc14a6bba3bc8a64ff0749c74d9b96305bf6429 Mon Sep 17 00:00:00 2001 -From: Heiko Lewin <heiko.lewin@worldiety.de> -Date: Tue, 15 Dec 2020 17:14:18 +0100 -Subject: [PATCH 2/3] Minor cleanups - ---- - test/bug-image-compositor.c | 33 ++++++++++++++++++++++++++++++--- - 1 file changed, 30 insertions(+), 3 deletions(-) - -diff --git a/test/bug-image-compositor.c b/test/bug-image-compositor.c -index fc4fd370b..304ea089c 100644 ---- a/test/bug-image-compositor.c -+++ b/test/bug-image-compositor.c -@@ -1,5 +1,34 @@ -+/* -+ * 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) - { -@@ -13,6 +42,7 @@ draw (cairo_t *cr, int width, int 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) { -@@ -23,8 +53,6 @@ draw (cairo_t *cr, int width, int height) - cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); - cairo_stroke (cr); - -- cairo_pattern_destroy(p); -- - return CAIRO_TEST_SUCCESS; - } - -@@ -36,4 +64,3 @@ CAIRO_TEST (bug_image_compositor, - 10000, 1, - NULL, draw) - -- --- -GitLab - diff --git a/extra/cairo/musl-stacksize.patch b/extra/cairo/musl-stacksize.patch deleted file mode 100644 index d10469e..0000000 --- a/extra/cairo/musl-stacksize.patch +++ /dev/null @@ -1,23 +0,0 @@ -Reduce the footprint of stack frame usage by turning -some large(r) structures as `static __thread` instead. - ---- a/src/cairo-rectangular-scan-converter.c 2015-10-27 22:04:21.000000000 +0100 -+++ b/src/cairo-rectangular-scan-converter.c 2016-05-07 04:25:26.640851782 +0200 -@@ -489,7 +489,7 @@ - cairo_span_renderer_t *renderer, - rectangle_t **rectangles) - { -- sweep_line_t sweep_line; -+ static __thread sweep_line_t sweep_line; - rectangle_t *start, *stop; - cairo_status_t status; - -@@ -656,7 +656,7 @@ - cairo_span_renderer_t *renderer) - { - cairo_rectangular_scan_converter_t *self = converter; -- rectangle_t *rectangles_stack[CAIRO_STACK_ARRAY_LENGTH (rectangle_t *)]; -+ static __thread rectangle_t *rectangles_stack[CAIRO_STACK_ARRAY_LENGTH (rectangle_t *)]; - rectangle_t **rectangles; - struct _cairo_rectangular_scan_converter_chunk *chunk; - cairo_status_t status; diff --git a/extra/cairo/pdf-font-subset-Generate-valid-font-names.patch b/extra/cairo/pdf-font-subset-Generate-valid-font-names.patch deleted file mode 100644 index d5cfe2f..0000000 --- a/extra/cairo/pdf-font-subset-Generate-valid-font-names.patch +++ /dev/null @@ -1,58 +0,0 @@ -From a3b69a0215fdface0fd5730872a4b3242d979dca Mon Sep 17 00:00:00 2001 -From: Uli Schlachter <psychon@znc.in> -Date: Tue, 9 Feb 2021 16:54:35 +0100 -Subject: [PATCH] pdf font subset: Generate valid font names - -A hash value is encoded in base 26 with upper case letters for font -names. - -Commit ed984146 replaced "numerator = abs (hash);" with "numerator = -hash;" in this code, because hash has type uint32_t and the compiler -warned about taking the absolute value of an unsigned value. However, -abs() is actually defined to take an int argument. Thus, there was some -implicit cast. - -Since numerator has type long, i.e. is signed, it is now actually -possible to get an overflow in the implicit cast and then have a -negative number. The following code is not prepared for this and -produces non-letters when encoding the hash. - -This commit fixes that problem by not using ldiv() and instead using / -and % to directly compute the needed values. This gets rid of the need -to convert to type long. Since now everything works with uint32_t, there -is no more chance for negative numbers messing things up. - -Fixes: https://gitlab.freedesktop.org/cairo/cairo/-/issues/449 -Signed-off-by: Uli Schlachter <psychon@znc.in> ---- - src/cairo-pdf-surface.c | 8 ++------ - 1 file changed, 2 insertions(+), 6 deletions(-) - -diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c -index 6da460878..52c49b6d2 100644 ---- a/src/cairo-pdf-surface.c -+++ b/src/cairo-pdf-surface.c -@@ -5310,18 +5310,14 @@ _create_font_subset_tag (cairo_scaled_font_subset_t *font_subset, - { - uint32_t hash; - int i; -- long numerator; -- ldiv_t d; - - hash = _hash_data ((unsigned char *) font_name, strlen(font_name), 0); - hash = _hash_data ((unsigned char *) (font_subset->glyphs), - font_subset->num_glyphs * sizeof(unsigned long), hash); - -- numerator = hash; - for (i = 0; i < 6; i++) { -- d = ldiv (numerator, 26); -- numerator = d.quot; -- tag[i] = 'A' + d.rem; -+ tag[i] = 'A' + (hash % 26); -+ hash /= 26; - } - tag[i] = 0; - } --- -GitLab - |