Commit 8a2b444db1d3e65f979db79cb7fda1bc97488ee5

Werner Lemberg 2012-03-04T08:35:03

Revert "[cff] One more check against malformed font matrix." As Alexei points out, this test is completely nonsense. This reverts commit 35bb214ae620400cd09a2cfaf3bacd66e179a1f6.

diff --git a/ChangeLog b/ChangeLog
index 3f727d3..f5840ca 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,12 +1,5 @@
 2012-03-03  Werner Lemberg  <wl@gnu.org>
 
-	[cff] One more check against malformed font matrix.
-
-	* src/cff/cffparse.c (cff_parse_font_matrix): Guard against `xx' and
-	`yy' matrix coefficients being zero.
-
-2012-03-03  Werner Lemberg  <wl@gnu.org>
-
 	Fix Savannah bug #35660.
 
 	For some divisions, we use casts to 32bit entities.  Always guard
diff --git a/src/cff/cffparse.c b/src/cff/cffparse.c
index 0873379..61fa87c 100644
--- a/src/cff/cffparse.c
+++ b/src/cff/cffparse.c
@@ -474,11 +474,22 @@
 
       if ( scaling < 0 || scaling > 9 )
       {
+        /* Return default matrix in case of unlikely values. */
+
         FT_TRACE1(( "cff_parse_font_matrix:"
                     " strange scaling value for xx element (%d),\n"
                     "                      "
                     " using default matrix\n", scaling ));
-        goto Default_matrix;
+
+        matrix->xx = 0x10000L;
+        matrix->yx = 0;
+        matrix->xy = 0;
+        matrix->yy = 0x10000L;
+        offset->x  = 0;
+        offset->y  = 0;
+        *upm       = 1;
+
+        goto Exit;
       }
 
       matrix->yx = cff_parse_fixed_scaled( data++, scaling );
@@ -487,13 +498,6 @@
       offset->x  = cff_parse_fixed_scaled( data++, scaling );
       offset->y  = cff_parse_fixed_scaled( data,   scaling );
 
-      if ( matrix->xx == 0 || matrix->yy == 0 )
-      {
-        FT_TRACE1(( "cff_parse_font_matrix:"
-                    " xx or yy element is zero, using default matrix\n" ));
-        goto Default_matrix;
-      }
-
       *upm = power_tens[scaling];
 
       FT_TRACE4(( " [%f %f %f %f %f %f]\n",
@@ -505,17 +509,6 @@
                   (double)offset->y  / *upm / 65536 ));
     }
 
-    goto Exit;
-
-  Default_matrix:
-    matrix->xx = 0x10000L;
-    matrix->yx = 0;
-    matrix->xy = 0;
-    matrix->yy = 0x10000L;
-    offset->x  = 0;
-    offset->y  = 0;
-    *upm       = 1;
-
   Exit:
     return error;
   }