summaryrefslogtreecommitdiffstats
path: root/libass/ass_font.c
diff options
context:
space:
mode:
Diffstat (limited to 'libass/ass_font.c')
-rw-r--r--libass/ass_font.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/libass/ass_font.c b/libass/ass_font.c
index 69675c6..f1c2069 100644
--- a/libass/ass_font.c
+++ b/libass/ass_font.c
@@ -392,16 +392,23 @@ static int ass_strike_outline_glyph(FT_Face face, ASS_Font *font,
return 0;
}
-void outline_copy(FT_Library lib, FT_Outline *source, FT_Outline **dest)
+FT_Outline *outline_copy(FT_Library lib, FT_Outline *source)
{
- if (source == NULL) {
- *dest = NULL;
- return;
+ FT_Outline *dest;
+ if (!source)
+ return NULL;
+
+ dest = calloc(1, sizeof(*dest));
+ if (!dest)
+ return NULL;
+
+ if (FT_Outline_New(lib, source->n_points, source->n_contours, dest)) {
+ free(dest);
+ return NULL;
}
- *dest = calloc(1, sizeof(**dest));
- FT_Outline_New(lib, source->n_points, source->n_contours, *dest);
- FT_Outline_Copy(source, *dest);
+ FT_Outline_Copy(source, dest);
+ return dest;
}
void outline_free(FT_Library lib, FT_Outline *outline)
@@ -679,7 +686,7 @@ static int get_contour_direction(FT_Vector *points, int start, int end)
* \param border_x border size, x direction, d6 format
* \param border_x border size, y direction, d6 format
*/
-void fix_freetype_stroker(FT_Outline *outline, int border_x, int border_y)
+bool fix_freetype_stroker(FT_Outline *outline, int border_x, int border_y)
{
int nc = outline->n_contours;
int begin, stop;
@@ -691,6 +698,12 @@ void fix_freetype_stroker(FT_Outline *outline, int border_x, int border_y)
int i, j;
int inside_direction;
+ if (!valid_cont || !boxes) {
+ free(valid_cont);
+ free(boxes);
+ return false;
+ }
+
inside_direction = FT_Outline_Get_Orientation(outline) ==
FT_ORIENTATION_TRUETYPE;
@@ -769,5 +782,7 @@ void fix_freetype_stroker(FT_Outline *outline, int border_x, int border_y)
free(boxes);
free(valid_cont);
+
+ return true;
}