summaryrefslogtreecommitdiffstats
path: root/external/freetype/ubsan.patch
diff options
context:
space:
mode:
Diffstat (limited to 'external/freetype/ubsan.patch')
-rw-r--r--external/freetype/ubsan.patch135
1 files changed, 22 insertions, 113 deletions
diff --git a/external/freetype/ubsan.patch b/external/freetype/ubsan.patch
index 27a36eb880bd..43ce217c4b7d 100644
--- a/external/freetype/ubsan.patch
+++ b/external/freetype/ubsan.patch
@@ -1,114 +1,23 @@
---- 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 @@
- */
+--- src/psaux/psobjs.c.orig 2023-02-04 23:00:05.000000000 +0900
++++ src/psaux/psobjs.c 2023-02-22 16:28:26.632283841 +0900
+@@ -200,7 +200,8 @@
+ /* add the object to the base block and adjust offset */
+ table->elements[idx] = FT_OFFSET( table->block, table->cursor );
+ table->lengths [idx] = length;
+- FT_MEM_COPY( table->block + table->cursor, object, length );
++ if (length != 0)
++ FT_MEM_COPY( table->block + table->cursor, object, length );
+
+ table->cursor += length;
+ return FT_Err_Ok;
+--- src/truetype/ttgxvar.c
++++ src/truetype/ttgxvar.c
+@@ -1045,7 +1045,7 @@
+ if ( varData->longWords )
+ per_region_size *= 2;
+
+- bytes = varData->deltaSet + per_region_size * innerIndex;
++ bytes = varData->deltaSet ? varData->deltaSet + per_region_size * innerIndex : NULL;
+
+ if ( varData->longWords )
{
- 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;