summaryrefslogtreecommitdiff
path: root/source/pdf/pdf-font.c
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@gmail.com>2018-05-13 01:39:08 +0800
committerSebastian Rasmussen <sebras@gmail.com>2018-05-15 22:31:50 +0800
commit4f4cae9812ea4e1f4d78ea8b90a46d8f20519883 (patch)
treebad64d4b521e98d3eaba9fa6a04fb14cba2e76e9 /source/pdf/pdf-font.c
parent03ea88f91e120898a26153cecc8cf3d7747a57ba (diff)
downloadmupdf-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/pdf-font.c')
-rw-r--r--source/pdf/pdf-font.c10
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[] =