From 77df78f382e292cc08dce7e96fa4a9f655bb4075 Mon Sep 17 00:00:00 2001 From: Sebastian Rasmussen Date: Mon, 12 Jun 2017 08:18:20 +0800 Subject: pdf: Drop font descriptor in case of error. --- source/pdf/pdf-font.c | 69 +++++++++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 29 deletions(-) (limited to 'source') diff --git a/source/pdf/pdf-font.c b/source/pdf/pdf-font.c index 0088b09c..96de61ef 100644 --- a/source/pdf/pdf-font.c +++ b/source/pdf/pdf-font.c @@ -1385,7 +1385,7 @@ pdf_load_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *dict, i pdf_obj *subtype; pdf_obj *dfonts; pdf_obj *charprocs; - pdf_font_desc *fontdesc; + pdf_font_desc *fontdesc = NULL; int type3 = 0; if ((fontdesc = pdf_find_item(ctx, pdf_drop_font_imp, dict)) != NULL) @@ -1397,39 +1397,50 @@ pdf_load_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *dict, i dfonts = pdf_dict_get(ctx, dict, PDF_NAME_DescendantFonts); charprocs = pdf_dict_get(ctx, dict, PDF_NAME_CharProcs); - if (pdf_name_eq(ctx, subtype, PDF_NAME_Type0)) - fontdesc = pdf_load_type0_font(ctx, doc, dict); - else if (pdf_name_eq(ctx, subtype, PDF_NAME_Type1)) - fontdesc = pdf_load_simple_font(ctx, doc, dict); - else if (pdf_name_eq(ctx, subtype, PDF_NAME_MMType1)) - fontdesc = pdf_load_simple_font(ctx, doc, dict); - else if (pdf_name_eq(ctx, subtype, PDF_NAME_TrueType)) - fontdesc = pdf_load_simple_font(ctx, doc, dict); - else if (pdf_name_eq(ctx, subtype, PDF_NAME_Type3)) - { - fontdesc = pdf_load_type3_font(ctx, doc, rdb, dict); - type3 = 1; - } - else if (charprocs) - { - fz_warn(ctx, "unknown font format, guessing type3."); - fontdesc = pdf_load_type3_font(ctx, doc, rdb, dict); - type3 = 1; - } - else if (dfonts) + fz_var(fontdesc); + + fz_try(ctx) { - fz_warn(ctx, "unknown font format, guessing type0."); - fontdesc = pdf_load_type0_font(ctx, doc, dict); + if (pdf_name_eq(ctx, subtype, PDF_NAME_Type0)) + fontdesc = pdf_load_type0_font(ctx, doc, dict); + else if (pdf_name_eq(ctx, subtype, PDF_NAME_Type1)) + fontdesc = pdf_load_simple_font(ctx, doc, dict); + else if (pdf_name_eq(ctx, subtype, PDF_NAME_MMType1)) + fontdesc = pdf_load_simple_font(ctx, doc, dict); + else if (pdf_name_eq(ctx, subtype, PDF_NAME_TrueType)) + fontdesc = pdf_load_simple_font(ctx, doc, dict); + else if (pdf_name_eq(ctx, subtype, PDF_NAME_Type3)) + { + fontdesc = pdf_load_type3_font(ctx, doc, rdb, dict); + type3 = 1; + } + else if (charprocs) + { + fz_warn(ctx, "unknown font format, guessing type3."); + fontdesc = pdf_load_type3_font(ctx, doc, rdb, dict); + type3 = 1; + } + else if (dfonts) + { + fz_warn(ctx, "unknown font format, guessing type0."); + fontdesc = pdf_load_type0_font(ctx, doc, dict); + } + else + { + fz_warn(ctx, "unknown font format, guessing type1 or truetype."); + fontdesc = pdf_load_simple_font(ctx, doc, dict); + } + + /* Create glyph width table for stretching substitute fonts and text extraction. */ + pdf_make_width_table(ctx, fontdesc); + } - else + fz_catch(ctx) { - fz_warn(ctx, "unknown font format, guessing type1 or truetype."); - fontdesc = pdf_load_simple_font(ctx, doc, dict); + pdf_drop_font(ctx, fontdesc); + fz_rethrow(ctx); } - /* Create glyph width table for stretching substitute fonts and text extraction. */ - pdf_make_width_table(ctx, fontdesc); - pdf_store_item(ctx, dict, fontdesc, fontdesc->size); if (type3) -- cgit v1.2.3