6 commits - src/cairo-pattern.c test/gradient-scale-crash.c test/meson.build
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri May 24 15:41:47 UTC 2024
src/cairo-pattern.c | 6 ++++
test/gradient-scale-crash.c | 55 ++++++++++++++++++++++++++++++++++++++++++++
test/meson.build | 1
3 files changed, 62 insertions(+)
New commits:
commit f43dcc212deea499c901af2c6503f5145cc4e5da
Merge: 4796138f3 d163670f9
Author: Uli Schlachter <psychon at znc.in>
Date: Fri May 24 15:41:38 2024 +0000
Merge branch 'fix-gradient-scale-crash' into 'master'
Fix "out of memory" when using linear gradient
Closes #789
See merge request cairo/cairo!535
commit d163670f975fe0c6df39944642f36e44cecb79b6
Merge: 820bb0ba7 d25318865
Author: Koichi Akabe <vbkaisetsu at gmail.com>
Date: Wed May 22 10:19:50 2024 +0900
Merge branch 'master' into fix-gradient-scale-crash
commit 820bb0ba7f5d9f916594219d4093073d33253ba1
Author: Emmanuele Bassi <ebassi at gmail.com>
Date: Tue May 21 22:43:36 2024 +0000
Apply 1 suggestion(s) to 1 file(s)
Co-authored-by: Emmanuele Bassi <ebassi at gmail.com>
diff --git a/test/gradient-scale-crash.c b/test/gradient-scale-crash.c
index b073dc1b3..b265e429b 100644
--- a/test/gradient-scale-crash.c
+++ b/test/gradient-scale-crash.c
@@ -48,7 +48,7 @@ draw (cairo_t *cr, int width, int height)
}
CAIRO_TEST (gradient_scale_crash,
- "Exercises a bug found in scaling gradient pattern",
+ "Verify fix for https://gitlab.freedesktop.org/cairo/cairo/-/issues/789",
"gradient, pattern", /* keywords */
NULL, /* requirements */
0, 0,
commit ad93bbad1933efe11986be8614e3f8192d2dd2f9
Author: Koichi Akabe <vbkaisetsu at gmail.com>
Date: Wed Feb 7 23:21:13 2024 +0900
coding style
diff --git a/test/gradient-scale-crash.c b/test/gradient-scale-crash.c
index 269b6a457..b073dc1b3 100644
--- a/test/gradient-scale-crash.c
+++ b/test/gradient-scale-crash.c
@@ -29,16 +29,21 @@
static cairo_test_status_t
draw (cairo_t *cr, int width, int height)
{
- cairo_pattern_t *p = cairo_pattern_create_linear(0, 0, 0, 100);
- cairo_pattern_add_color_stop_rgb(p, 0, 1, 1, 1);
- cairo_pattern_add_color_stop_rgb(p, 1, 1, 0, 0);
+ cairo_pattern_t *p = cairo_pattern_create_linear (0, 0, 0, 100);
+
+ cairo_pattern_add_color_stop_rgb (p, 0, 1, 1, 1);
+ cairo_pattern_add_color_stop_rgb (p, 1, 1, 0, 0);
+
cairo_matrix_t m;
- cairo_matrix_init(&m, 100000, 0, 0, 100000, 0, 0);
- cairo_pattern_set_matrix(p, &m);
- cairo_set_source(cr, p);
- cairo_rectangle(cr, 0, 0, 100, 100);
- cairo_paint(cr);
- cairo_pattern_destroy(p);
+ cairo_matrix_init (&m, 100000, 0, 0, 100000, 0, 0);
+ cairo_pattern_set_matrix (p, &m);
+
+ cairo_set_source (cr, p);
+ cairo_rectangle (cr, 0, 0, 100, 100);
+ cairo_paint (cr);
+
+ cairo_pattern_destroy (p);
+
return CAIRO_TEST_SUCCESS;
}
commit 3a06998b6ad9e5226854c1e90dcfe4a5bcf69052
Author: Koichi Akabe <vbkaisetsu at gmail.com>
Date: Wed Feb 7 00:19:13 2024 +0900
Destroy used pattern
diff --git a/test/gradient-scale-crash.c b/test/gradient-scale-crash.c
index bf005cd38..269b6a457 100644
--- a/test/gradient-scale-crash.c
+++ b/test/gradient-scale-crash.c
@@ -38,6 +38,7 @@ draw (cairo_t *cr, int width, int height)
cairo_set_source(cr, p);
cairo_rectangle(cr, 0, 0, 100, 100);
cairo_paint(cr);
+ cairo_pattern_destroy(p);
return CAIRO_TEST_SUCCESS;
}
commit d517773ff145d06c5b9efb21841fbc95caf5f540
Author: Koichi Akabe <vbkaisetsu at gmail.com>
Date: Tue Feb 6 22:18:06 2024 +0900
Fix "out of memory" when using linear gradient
diff --git a/src/cairo-pattern.c b/src/cairo-pattern.c
index fcaaf46b8..742c51b2e 100644
--- a/src/cairo-pattern.c
+++ b/src/cairo-pattern.c
@@ -2801,6 +2801,12 @@ _cairo_gradient_pattern_fit_to_range (const cairo_gradient_pattern_t *gradient,
dim = MAX (dim, fabs (radial->cd1.center.y - radial->cd2.center.y));
dim = MAX (dim, fabs (radial->cd1.radius - radial->cd2.radius));
}
+ dim = MAX (dim, fabs (gradient->base.matrix.xx));
+ dim = MAX (dim, fabs (gradient->base.matrix.xy));
+ dim = MAX (dim, fabs (gradient->base.matrix.x0));
+ dim = MAX (dim, fabs (gradient->base.matrix.yx));
+ dim = MAX (dim, fabs (gradient->base.matrix.yy));
+ dim = MAX (dim, fabs (gradient->base.matrix.y0));
if (unlikely (dim > max_value)) {
cairo_matrix_t scale;
diff --git a/test/gradient-scale-crash.c b/test/gradient-scale-crash.c
new file mode 100644
index 000000000..bf005cd38
--- /dev/null
+++ b/test/gradient-scale-crash.c
@@ -0,0 +1,49 @@
+/*
+ * Copyright © 2024 Koichi Akabe
+ *
+ * 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: Koichi Akabe <vbkaisetsu at gmail.com>
+ */
+
+#include "cairo-test.h"
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+ cairo_pattern_t *p = cairo_pattern_create_linear(0, 0, 0, 100);
+ cairo_pattern_add_color_stop_rgb(p, 0, 1, 1, 1);
+ cairo_pattern_add_color_stop_rgb(p, 1, 1, 0, 0);
+ cairo_matrix_t m;
+ cairo_matrix_init(&m, 100000, 0, 0, 100000, 0, 0);
+ cairo_pattern_set_matrix(p, &m);
+ cairo_set_source(cr, p);
+ cairo_rectangle(cr, 0, 0, 100, 100);
+ cairo_paint(cr);
+ return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (gradient_scale_crash,
+ "Exercises a bug found in scaling gradient pattern",
+ "gradient, pattern", /* keywords */
+ NULL, /* requirements */
+ 0, 0,
+ NULL, draw)
diff --git a/test/meson.build b/test/meson.build
index d7834438f..dff2f2efe 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -160,6 +160,7 @@ test_sources = [
'get-path-extents.c',
'gradient-alpha.c',
'gradient-constant-alpha.c',
+ 'gradient-scale-crash.c',
'gradient-zero-stops.c',
'gradient-zero-stops-mask.c',
'group-clip.c',
More information about the cairo-commit
mailing list