summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-03-03 15:52:54 +0100
committerwm4 <wm4@nowhere>2014-03-03 16:37:02 +0100
commit04b51c2d70efda779adff96b4eea82c46682565b (patch)
tree6b577976e820cbe4ddbb65d040b2ed41a7919c95
parent14520fbc70eb63a3ce826c4e985f4233fb657196 (diff)
downloadlibass-04b51c2d70efda779adff96b4eea82c46682565b.tar.bz2
libass-04b51c2d70efda779adff96b4eea82c46682565b.tar.xz
Don't crash on \fscx0
Freetype can return a bounding box with all fields set to INT_MIN if an outline with all points set to 0 is used. This can happen e.g. with \fscx0, but also in more complicated cases. (In the original crashing sample, this was probably caused in combination with an embedded font.) Such a bounding box causes libass to crash, because it will enlarge the combined bitmap bounding box to a ridiculous size. Just skip outlines that have en empty bounding box. This is probably the correct thing to do, and won't pass INT_MAX down to other parts of libass.
-rw-r--r--libass/ass_bitmap.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/libass/ass_bitmap.c b/libass/ass_bitmap.c
index 144c8c0..98c8d74 100644
--- a/libass/ass_bitmap.c
+++ b/libass/ass_bitmap.c
@@ -166,6 +166,9 @@ Bitmap *outline_to_bitmap(ASS_Library *library, FT_Library ftlib,
FT_Bitmap bitmap;
FT_Outline_Get_CBox(outline, &bbox);
+ if (bbox.xMin == bbox.xMax || bbox.yMin == bbox.yMax)
+ return NULL;
+
// move glyph to origin (0, 0)
bbox.xMin &= ~63;
bbox.yMin &= ~63;