Protect against possible division by zeros (#316468, Steve Grubb)
authorBehdad Esfahbod <behdad@gnome.org>
Wed, 23 Nov 2005 15:19:48 +0000 (15:19 +0000)
committerBehdad Esfahbod <behdad@src.gnome.org>
Wed, 23 Nov 2005 15:19:48 +0000 (15:19 +0000)
2005-11-23  Behdad Esfahbod  <behdad@gnome.org>

        Protect against possible division by zeros (#316468, Steve Grubb)

        * pango/pango-context.c (update_metrics_from_items),
        pango/pango-fontset.c (pango_fontset_real_get_metrics): If count is
        zero, do not alter approximate_{char,digit}_width.

        * pango/opentype/disasm.c: Err on invalid DeltaFormat.

src/disasm.c

index f4c132f..15464f4 100644 (file)
@@ -444,18 +444,26 @@ Dump_Device (TTO_Device *Device, FILE *stream, int indent, FT_Bool is_gsub)
       break;
     }
 
-  n_per = 16 / bits;
-  mask = (1 << bits) - 1;
-  mask = mask << (16 - bits);
-
   DUMP ("<DeltaValue>");
-  for (i = Device->StartSize; i <= Device->EndSize ; i++)
+  if (!bits)
+    {
+
+      fprintf(stderr, "invalid DeltaFormat!!!!!\n");
+    }
+  else
     {
-      FT_UShort val = Device->DeltaValue[i / n_per];
-      FT_Short signed_val = ((val << ((i % n_per) * bits)) & mask);
-      dump (stream, indent, "%d", signed_val >> (16 - bits));
-      if (i != Device->EndSize)
-       DUMP (", ");
+      n_per = 16 / bits;
+      mask = (1 << bits) - 1;
+      mask = mask << (16 - bits);
+
+      for (i = Device->StartSize; i <= Device->EndSize ; i++)
+       {
+         FT_UShort val = Device->DeltaValue[i / n_per];
+         FT_Short signed_val = ((val << ((i % n_per) * bits)) & mask);
+         dump (stream, indent, "%d", signed_val >> (16 - bits));
+         if (i != Device->EndSize)
+           DUMP (", ");
+       }
     }
   DUMP ("</DeltaValue>\n");
 }