mirror of
https://github.com/mpv-player/mpv
synced 2025-03-25 04:38:01 +00:00
Check glyph bounding box before rasterizing and complain if it is too large.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26067 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
b803331d0c
commit
fc6600af48
@ -2010,6 +2010,7 @@ static char help_text[]=
|
||||
// ass_bitmap.c
|
||||
#define MSGTR_LIBASS_FT_Glyph_To_BitmapError "[ass] FT_Glyph_To_Bitmap error %d \n"
|
||||
#define MSGTR_LIBASS_UnsupportedPixelMode "[ass] Unsupported pixel mode: %d\n"
|
||||
#define MSGTR_LIBASS_GlyphBBoxTooLarge "[ass] Glyph bounding box too large: %dx%dpx\n"
|
||||
|
||||
// ass.c
|
||||
#define MSGTR_LIBASS_NoStyleNamedXFoundUsingY "[ass] [%p] Warning: no style named '%s' found, using '%s'\n"
|
||||
|
@ -150,6 +150,20 @@ static bitmap_t* copy_bitmap(const bitmap_t* src)
|
||||
return dst;
|
||||
}
|
||||
|
||||
static int check_glyph_area(FT_Glyph glyph)
|
||||
{
|
||||
FT_BBox bbox;
|
||||
long long dx, dy;
|
||||
FT_Glyph_Get_CBox(glyph, FT_GLYPH_BBOX_TRUNCATE, &bbox);
|
||||
dx = bbox.xMax - bbox.xMin;
|
||||
dy = bbox.yMax - bbox.yMin;
|
||||
if (dx * dy > 8000000) {
|
||||
mp_msg(MSGT_ASS, MSGL_WARN, MSGTR_LIBASS_GlyphBBoxTooLarge, (int)dx, (int)dy);
|
||||
return 1;
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bitmap_t* glyph_to_bitmap_internal(FT_Glyph glyph, int bord)
|
||||
{
|
||||
FT_BitmapGlyph bg;
|
||||
@ -161,6 +175,8 @@ static bitmap_t* glyph_to_bitmap_internal(FT_Glyph glyph, int bord)
|
||||
int i;
|
||||
int error;
|
||||
|
||||
if (check_glyph_area(glyph))
|
||||
return 0;
|
||||
error = FT_Glyph_To_Bitmap(&glyph, FT_RENDER_MODE_NORMAL, 0, 0);
|
||||
if (error) {
|
||||
mp_msg(MSGT_ASS, MSGL_WARN, MSGTR_LIBASS_FT_Glyph_To_BitmapError, error);
|
||||
|
Loading…
Reference in New Issue
Block a user