Commit c00b05f2028a91bf41fe7f33c3254ecad81a5d58

Werner Lemberg 2015-02-20T20:42:55

[cff] Thinkos in bias handling. Only the final result is always positive. Bug introduced three commits earlier. * src/cff/cffgload.c, src/cff/cffgload.h: Apply.

diff --git a/ChangeLog b/ChangeLog
index 976c165..d5436be 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 2015-02-20  Werner Lemberg  <wl@gnu.org>
 
+	[cff] Thinkos in bias handling.
+
+	Only the final result is always positive.
+
+	Bug introduced three commits earlier.
+
+	* src/cff/cffgload.c, src/cff/cffgload.h: Apply.
+
+2015-02-20  Werner Lemberg  <wl@gnu.org>
+
 	[cid] Fix signedness issues and emit some better error codes.
 
 	* src/cid/cidgload.c, src/cid/cidload.h, src/cid/cidobjs.c,
diff --git a/src/cff/cffgload.c b/src/cff/cffgload.c
index 0afa745..b20ad50 100644
--- a/src/cff/cffgload.c
+++ b/src/cff/cffgload.c
@@ -337,7 +337,7 @@
   /*                                                                       */
   /* <Return>                                                              */
   /*    The bias value.                                                    */
-  static FT_UInt
+  static FT_Int
   cff_compute_bias( FT_Int   in_charstring_type,
                     FT_UInt  num_subrs )
   {
@@ -2385,7 +2385,8 @@
 
         case cff_op_callsubr:
           {
-            FT_UInt  idx = ( (FT_UInt)args[0] >> 16 ) + decoder->locals_bias;
+            FT_UInt  idx = (FT_UInt)( ( args[0] >> 16 ) +
+                                      decoder->locals_bias );
 
 
             FT_TRACE4(( " callsubr(%d)\n", idx ));
@@ -2426,7 +2427,8 @@
 
         case cff_op_callgsubr:
           {
-            FT_UInt  idx = ( (FT_UInt)args[0] >> 16 ) + decoder->globals_bias;
+            FT_UInt  idx = (FT_UInt)( ( args[0] >> 16 ) +
+                                      decoder->globals_bias );
 
 
             FT_TRACE4(( " callgsubr(%d)\n", idx ));
diff --git a/src/cff/cffgload.h b/src/cff/cffgload.h
index 39c5f32..5c52d43 100644
--- a/src/cff/cffgload.h
+++ b/src/cff/cffgload.h
@@ -178,8 +178,8 @@ FT_BEGIN_HEADER
     FT_UInt            num_locals;
     FT_UInt            num_globals;
 
-    FT_UInt            locals_bias;
-    FT_UInt            globals_bias;
+    FT_Int             locals_bias;
+    FT_Int             globals_bias;
 
     FT_Byte**          locals;
     FT_Byte**          globals;