summaryrefslogtreecommitdiff
path: root/external
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2022-01-06 08:47:22 +0100
committerStephan Bergmann <sbergman@redhat.com>2022-01-07 09:47:46 +0100
commit982ecf4407854208a909898b8a69b1d8ca35d519 (patch)
treeb326ed3c5953edd9803e81951ac6df03e568212a /external
parent6d0956c8a61bacc154bef225f83eb74cdf442c57 (diff)
Silence various UBSan warnings in external/freetype
> workdir/UnpackedTarball/freetype/src/autofit/aflatin.c:1992:44: runtime error: applying zero offset to null pointer etc. seen during CppunitTest_sd_misc_tests etc. Change-Id: Id85c4331f9a892d99e4f3b9cae37b4ffe8c53973 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128034 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'external')
-rw-r--r--external/freetype/UnpackedTarball_freetype.mk3
-rw-r--r--external/freetype/ubsan.patch114
2 files changed, 117 insertions, 0 deletions
diff --git a/external/freetype/UnpackedTarball_freetype.mk b/external/freetype/UnpackedTarball_freetype.mk
index 6f724d1776fc..076edb9e3d97 100644
--- a/external/freetype/UnpackedTarball_freetype.mk
+++ b/external/freetype/UnpackedTarball_freetype.mk
@@ -13,6 +13,9 @@ $(eval $(call gb_UnpackedTarball_set_tarball,freetype,$(FREETYPE_TARBALL),,freet
$(eval $(call gb_UnpackedTarball_add_patches,freetype,\
external/freetype/freetype-2.6.5.patch.1 \
+ external/freetype/ubsan.patch \
))
+$(eval $(call gb_UnpackedTarball_set_patchlevel,freetype,0))
+
# vim: set noet sw=4 ts=4:
diff --git a/external/freetype/ubsan.patch b/external/freetype/ubsan.patch
new file mode 100644
index 000000000000..27a36eb880bd
--- /dev/null
+++ b/external/freetype/ubsan.patch
@@ -0,0 +1,114 @@
+--- src/autofit/afcjk.c
++++ src/autofit/afcjk.c
+@@ -843,7 +843,7 @@
+ {
+ AF_AxisHints axis = &hints->axis[dim];
+ AF_Segment segments = axis->segments;
+- AF_Segment segment_limit = segments + axis->num_segments;
++ AF_Segment segment_limit = axis->num_segments == 0 ? segments : segments + axis->num_segments;
+ AF_Direction major_dir = axis->major_dir;
+ AF_Segment seg1, seg2;
+ FT_Pos len_threshold;
+@@ -1005,7 +1005,7 @@
+ AF_CJKAxis laxis = &((AF_CJKMetrics)hints->metrics)->axis[dim];
+
+ AF_Segment segments = axis->segments;
+- AF_Segment segment_limit = segments + axis->num_segments;
++ AF_Segment segment_limit = axis->num_segments == 0 ? segments : segments + axis->num_segments;
+ AF_Segment seg;
+
+ FT_Fixed scale;
+@@ -1153,7 +1153,7 @@
+ */
+ {
+ AF_Edge edges = axis->edges;
+- AF_Edge edge_limit = edges + axis->num_edges;
++ AF_Edge edge_limit = axis->num_edges == 0 ? edges : edges + axis->num_edges;
+ AF_Edge edge;
+
+
+@@ -1291,7 +1291,7 @@
+ {
+ AF_AxisHints axis = &hints->axis[dim];
+ AF_Edge edge = axis->edges;
+- AF_Edge edge_limit = edge + axis->num_edges;
++ AF_Edge edge_limit = axis->num_edges == 0 ? edge : edge + axis->num_edges;
+ AF_CJKAxis cjk = &metrics->axis[dim];
+ FT_Fixed scale = cjk->scale;
+ FT_Pos best_dist0; /* initial threshold */
+@@ -1798,7 +1798,7 @@
+ {
+ AF_AxisHints axis = &hints->axis[dim];
+ AF_Edge edges = axis->edges;
+- AF_Edge edge_limit = edges + axis->num_edges;
++ AF_Edge edge_limit = axis->num_edges == 0 ? edges : edges + axis->num_edges;
+ FT_PtrDist n_edges;
+ AF_Edge edge;
+ AF_Edge anchor = NULL;
+@@ -2177,7 +2177,7 @@
+ {
+ AF_AxisHints axis = & hints->axis[dim];
+ AF_Edge edges = axis->edges;
+- AF_Edge edge_limit = edges + axis->num_edges;
++ AF_Edge edge_limit = axis->num_edges == 0 ? edges : edges + axis->num_edges;
+ AF_Edge edge;
+ FT_Bool snapping;
+
+--- src/autofit/afhints.c
++++ src/autofit/afhints.c
+@@ -1316,7 +1316,7 @@
+ {
+ AF_AxisHints axis = & hints->axis[dim];
+ AF_Segment segments = axis->segments;
+- AF_Segment segment_limit = segments + axis->num_segments;
++ AF_Segment segment_limit = axis->num_segments == 0 ? segments : segments + axis->num_segments;
+ AF_Segment seg;
+
+
+@@ -1393,7 +1393,7 @@
+ AF_Point point_limit = points + hints->num_points;
+ AF_AxisHints axis = &hints->axis[dim];
+ AF_Edge edges = axis->edges;
+- AF_Edge edge_limit = edges + axis->num_edges;
++ AF_Edge edge_limit = axis->num_edges == 0 ? edges : edges + axis->num_edges;
+ FT_UInt touch_flag;
+
+
+--- src/autofit/aflatin.c
++++ src/autofit/aflatin.c
+@@ -1989,7 +1989,7 @@
+ {
+ AF_AxisHints axis = &hints->axis[dim];
+ AF_Segment segments = axis->segments;
+- AF_Segment segment_limit = segments + axis->num_segments;
++ AF_Segment segment_limit = axis->num_segments == 0 ? segments : segments + axis->num_segments;
+ FT_Pos len_threshold, len_score, dist_score, max_width;
+ AF_Segment seg1, seg2;
+
+@@ -2134,7 +2134,7 @@
+ FT_Bool top_to_bottom_hinting = 0;
+
+ AF_Segment segments = axis->segments;
+- AF_Segment segment_limit = segments + axis->num_segments;
++ AF_Segment segment_limit = axis->num_segments == 0 ? segments : segments + axis->num_segments;
+ AF_Segment seg;
+
+ #if 0
+@@ -2500,7 +2500,7 @@
+ {
+ AF_AxisHints axis = &hints->axis[AF_DIMENSION_VERT];
+ AF_Edge edge = axis->edges;
+- AF_Edge edge_limit = edge + axis->num_edges;
++ AF_Edge edge_limit = axis->num_edges == 0 ? edge : edge + axis->num_edges;
+ AF_LatinAxis latin = &metrics->axis[AF_DIMENSION_VERT];
+ FT_Fixed scale = latin->scale;
+
+@@ -2993,7 +2993,7 @@
+ {
+ AF_AxisHints axis = &hints->axis[dim];
+ AF_Edge edges = axis->edges;
+- AF_Edge edge_limit = edges + axis->num_edges;
++ AF_Edge edge_limit = axis->num_edges == 0 ? edges : edges + axis->num_edges;
+ FT_PtrDist n_edges;
+ AF_Edge edge;
+ AF_Edge anchor = NULL;