summaryrefslogtreecommitdiff
path: root/source/pdf/pdf-font.c
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@gmail.com>2017-06-12 08:18:20 +0800
committerSebastian Rasmussen <sebras@gmail.com>2017-07-06 22:02:42 +0800
commit77df78f382e292cc08dce7e96fa4a9f655bb4075 (patch)
tree8abd9c47b3c7e751623cc3bf106b1921e75d3a8f /source/pdf/pdf-font.c
parent479abb72606f6326e7d91a448fbc472c8c3e6b09 (diff)
downloadmupdf-77df78f382e292cc08dce7e96fa4a9f655bb4075.tar.xz
pdf: Drop font descriptor in case of error.
Diffstat (limited to 'source/pdf/pdf-font.c')
-rw-r--r--source/pdf/pdf-font.c69
1 files changed, 40 insertions, 29 deletions
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)