Bug 706090: Fix calculation of invalid Type3 font bbox.
authorTor Andersson <[email protected]>
Wed, 7 Dec 2022 13:23:37 +0000 (14:23 +0100)
committerJulian Smith <[email protected]>
Mon, 12 Dec 2022 11:40:52 +0000 (11:40 +0000)
Only take into account glyphs that have a definition.

source/fitz/font.c
source/pdf/pdf-type3.c

index f3044b50798cdaf104b89f979eb628268ee293eb..e0c6a8334389dbeda51dad15c31ffe854762ffef 100644 (file)
@@ -1220,7 +1220,7 @@ get_gid_bbox(fz_context *ctx, fz_font *font, int gid)
        if (font->bbox_table[gid>>8] == NULL) {
                font->bbox_table[gid>>8] = Memento_label(fz_malloc_array(ctx, 256, fz_rect), "bbox_table");
                for (i = 0; i < 256; i++) {
-                       font->bbox_table[gid>>8][i] = fz_infinite_rect;
+                       font->bbox_table[gid>>8][i] = fz_empty_rect;
                }
        }
 
index bcafe98b8e361b29eb3590dd9ca7bcf55fcb7144..1c1821bd60c3c42ac32749a814480a2b633f01ad 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2004-2021 Artifex Software, Inc.
+// Copyright (C) 2004-2022 Artifex Software, Inc.
 //
 // This file is part of MuPDF.
 //
@@ -229,10 +229,11 @@ void pdf_load_type3_glyphs(fz_context *ctx, pdf_document *doc, pdf_font_desc *fo
                if (fontdesc->font->flags.invalid_bbox && fontdesc->font->bbox_table != NULL)
                {
                        /* Union all the char bboxes together. */
-                       fz_rect bbox = fontdesc->font->bbox_table[0][0];
-                       for (i = 1; i < 256; i++)
+                       fz_rect bbox = fz_empty_rect;
+                       for (i = 0; i < 256; i++)
                        {
-                               bbox = fz_union_rect(bbox, fontdesc->font->bbox_table[0][i]);
+                               if (fontdesc->font->t3procs[i])
+                                       bbox = fz_union_rect(bbox, fontdesc->font->bbox_table[0][i]);
                        }
                        fontdesc->font->bbox = bbox;
                }