summaryrefslogtreecommitdiff
path: root/external
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2020-10-30 15:57:18 +0100
committerStephan Bergmann <sbergman@redhat.com>2020-10-30 20:41:25 +0100
commita499b4eb2ac1bd557dfcd1b00d1bf5916572e6d6 (patch)
treeaab71dd7c790e7c88a4e0abb073cbf57f763cb0d /external
parente64f9356df76c41e3c5c432984e11110ce1d25ca (diff)
external/cairo: Silence some more UBSan warnings
...seen when opening an Impress presentation on GNOME/X11: > cairo-xlib-source.c:570:26: runtime error: left shift of 191 by 24 places cannot be represented in type 'int' > cairo-xlib-render-compositor.c:1852:17: runtime error: left shift of negative value -186 > cairo-xlib-render-compositor.c:1853:17: runtime error: left shift of negative value -646 > cairo-xlib-surface-shm.c:1157:43: runtime error: member access within null pointer of type 'cairo_xlib_shm_surface_t' (aka 'struct _cairo_xlib_shm_surface') > cairo-fixed-private.h:252:8: runtime error: left shift of negative value -146048 Change-Id: I93a5706c2ec3f83bc56d75fc92817668eef57fdb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105074 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'external')
-rw-r--r--external/cairo/cairo/san.patch.050
1 files changed, 50 insertions, 0 deletions
diff --git a/external/cairo/cairo/san.patch.0 b/external/cairo/cairo/san.patch.0
index 112741260ec5..9e187240f240 100644
--- a/external/cairo/cairo/san.patch.0
+++ b/external/cairo/cairo/san.patch.0
@@ -9,6 +9,15 @@
}
/* This is the "magic number" approach to converting a double into fixed
+@@ -249,7 +249,7 @@
+ } else if ((f >> CAIRO_FIXED_FRAC_BITS) > INT16_MAX) {
+ x = INT32_MAX;
+ } else {
+- x = f << (16 - CAIRO_FIXED_FRAC_BITS);
++ x = (uint32_t)f << (16 - CAIRO_FIXED_FRAC_BITS);
+ }
+
+ return x;
--- src/cairo-gstate.c
+++ src/cairo-gstate.c
@@ -2297,7 +2297,7 @@
@@ -109,3 +118,44 @@
#else
# define GRID_AREA_TO_ALPHA(c) (((c)*255 + GRID_XY/2) / GRID_XY)
#endif
+--- src/cairo-xlib-render-compositor.c
++++ src/cairo-xlib-render-compositor.c
+@@ -1849,8 +1849,8 @@
+ return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+ }
+
+- dx = -dst_x << 16;
+- dy = -dst_y << 16;
++ dx = (unsigned)-dst_x << 16;
++ dy = (unsigned)-dst_y << 16;
+ for (i = 0; i < traps->num_traps; i++) {
+ cairo_trapezoid_t *t = &traps->traps[i];
+
+--- src/cairo-xlib-source.c
++++ src/cairo-xlib-source.c
+@@ -567,7 +567,7 @@
+ {
+ cairo_xlib_display_t *display = dst->display;
+ uint32_t pixel =
+- color->alpha_short >> 8 << 24 |
++ (uint32_t)(color->alpha_short >> 8) << 24 |
+ color->red_short >> 8 << 16 |
+ color->green_short >> 8 << 8 |
+ color->blue_short >> 8 << 0;
+--- src/cairo-xlib-surface-shm.c
++++ src/cairo-xlib-surface-shm.c
+@@ -1152,9 +1152,11 @@
+ cairo_surface_t *surface;
+
+ surface = NULL;
+- if (has_shm (other))
+- surface = &_cairo_xlib_shm_surface_create (other, format, width, height,
+- FALSE, has_shm_pixmaps (other))->image.base;
++ if (has_shm (other)) {
++ cairo_xlib_shm_surface_t * shm_surface = _cairo_xlib_shm_surface_create (other, format, width, height,
++ FALSE, has_shm_pixmaps (other));
++ if (shm_surface) surface = &shm_surface->image.base;
++ }
+
+ return surface;
+ }