Package: freetype
User: ubuntu-de...@lists.ubuntu.com
Usertags: origin-ubuntu natty
Version: 2.4.2-2.1
Tags: patch

The issue has been reported on
https://bugs.launchpad.net/ubuntu/+source/freetype/+bug/709229

Example file:
https://bugs.launchpad.net/ubuntu/+source/freetype/+bug/709229/+attachment/1814822/+files/oclpdf.zip

Comments from launchpad:

"Thanks for the document, I can reproduce the issue, not only with
evince (document viewer) but also with okular and epdfview (but not with
xpdf).
It seems to be a font issue, evince and epdfview print:

some font thing failed
Error: could not create truetype face

okular prints:
Error: Couldn't create a font for 'WPCUBE+Arial-Bold'
Error: Couldn't create a font for 'WPCUBE+Arial-Italic'
Error: Couldn't create a font for 'WPCUBE+Arial'

pdffonts gives the following info:
name type emb sub uni object ID
------------------------------------ ----------------- --- --- ---
---------
WPCUBE+Arial-Bold CID TrueType yes yes yes 4913 0
WPCUBE+Arial CID TrueType yes yes yes 4915 0
WPCUBE+Arial-Italic CID TrueType yes yes yes 4917 0
WPCUBE+Verdana CID TrueType yes yes yes 4919 0
WPCUBE+Symbol CID TrueType yes yes yes 4921 0
WPCUBE+Verdana-Bold CID TrueType yes yes yes 4923 0
WPCUBE+Courier New CID TrueType yes yes yes 4925 0
WPCUBE+Courier New-Bold CID TrueType yes yes yes 4927 0
WPCUBE+Verdana-Italic CID TrueType yes yes yes 4929 0
WPCUBE+Arial-BoldItalic CID TrueType yes yes yes 4931 0
WPCUBE+Verdana-BoldItalic CID TrueType yes yes yes 4933 0

Maybe also relevant: The pdf document is encrypted
Encrypted: yes (print:yes copy:yes change:no addNotes:no)

The bug should be reported to the devoelopers of the software. I did
this already, you can track the bug and make comments at:
https://bugs.freedesktop.org/show_bug.cgi?id=33972

It is a bug in freetype, bisecting shows it is fixed in this commit:
http://git.savannah.gnu.org/cgit/freetype/freetype2.git/commit/?id=ec4372f56552b7370d6693db8b4d44d412e2dd6a";


It would be nice if you apply this fix to the current version until a
new version is available upstream and in Debian.

Cheers,
Sebastien Bacher
>From ec4372f56552b7370d6693db8b4d44d412e2dd6a Mon Sep 17 00:00:00 2001
From: Werner Lemberg <w...@gnu.org>
Date: Thu, 18 Nov 2010 19:34:22 +0000
Subject: [truetype] Fix `loca' handling for inconsistent number of glyphs.

Reported by Johnson Y. Yan <yinsen_...@foxitsoftware.com>.

* src/truetype/ttpload.c (tt_face_load_loca): While sanitizing,
handle case where `loca' is the last table in the font.
---
diff --git a/ChangeLog b/ChangeLog
index 10d4631..2b292ad 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2010-11-18  Werner Lemberg  <w...@gnu.org>
 
+	[truetype] Fix `loca' handling for inconsistent number of glyphs.
+	Reported by Johnson Y. Yan <yinsen_...@foxitsoftware.com>.
+
+	* src/truetype/ttpload.c (tt_face_load_loca): While sanitizing,
+	handle case where `loca' is the last table in the font.
+
+2010-11-18  Werner Lemberg  <w...@gnu.org>
+
 	[sfnt] Ignore all errors while loading `OS/2' table.
 	Suggested by Johnson Y. Yan <yinsen_...@foxitsoftware.com>.
 
diff --git a/src/truetype/ttpload.c b/src/truetype/ttpload.c
index c531733..68a5453 100644
--- a/src/truetype/ttpload.c
+++ b/src/truetype/ttpload.c
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    TrueType-specific tables loader (body).                              */
 /*                                                                         */
-/*  Copyright 1996-2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009 by       */
+/*  Copyright 1996-2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009, 2010 by */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -137,6 +137,12 @@
             dist = diff;
         }
 
+        if ( entry == limit )
+        {
+          /* `loca' is the last table */
+          dist = stream->size - pos;
+        }
+
         if ( new_loca_len <= dist )
         {
           face->num_locations = face->root.num_glyphs;
@@ -307,7 +313,7 @@
       FT_Short*  limit = cur + face->cvt_size;
 
 
-      for ( ; cur <  limit; cur++ )
+      for ( ; cur < limit; cur++ )
         *cur = FT_GET_SHORT();
     }
 
--
cgit v0.8.3.2

Reply via email to