diff options
author | Sebastian Rasmussen <sebras@gmail.com> | 2018-05-13 01:39:08 +0800 |
---|---|---|
committer | Sebastian Rasmussen <sebras@gmail.com> | 2018-05-15 22:31:50 +0800 |
commit | 4f4cae9812ea4e1f4d78ea8b90a46d8f20519883 (patch) | |
tree | bad64d4b521e98d3eaba9fa6a04fb14cba2e76e9 /source/pdf | |
parent | 03ea88f91e120898a26153cecc8cf3d7747a57ba (diff) | |
download | mupdf-4f4cae9812ea4e1f4d78ea8b90a46d8f20519883.tar.xz |
Bug 699351: Handle glyphs with uncomputable width.
Previously if a glyphs units per em was 0 we'd try to divide
by zero, now mupdf assumes a default value and continues.
Diffstat (limited to 'source/pdf')
-rw-r--r-- | source/pdf/pdf-font.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/source/pdf/pdf-font.c b/source/pdf/pdf-font.c index 82739ccb..72e2a971 100644 --- a/source/pdf/pdf-font.c +++ b/source/pdf/pdf-font.c @@ -295,14 +295,20 @@ static int ft_width(fz_context *ctx, pdf_font_desc *fontdesc, int cid) int gid = ft_cid_to_gid(fontdesc, cid); FT_Fixed adv; int fterr; + FT_Face face = fontdesc->font->ft_face; + FT_UShort units_per_EM; - fterr = FT_Get_Advance(fontdesc->font->ft_face, gid, mask, &adv); + fterr = FT_Get_Advance(face, gid, mask, &adv); if (fterr) { fz_warn(ctx, "freetype advance glyph (gid %d): %s", gid, ft_error_string(fterr)); return 0; } - return adv * 1000 / ((FT_Face)fontdesc->font->ft_face)->units_per_EM; + units_per_EM = face->units_per_EM; + if (units_per_EM == 0) + units_per_EM = 2048; + + return adv * 1000 / units_per_EM; } static const struct { int code; const char *name; } mre_diff_table[] = |