Protect against possible division by zeros (#316468, Steve Grubb)
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.
diff --git a/src/disasm.c b/src/disasm.c
index f4c132f..15464f4 100644
--- a/src/disasm.c
+++ b/src/disasm.c
@@ -444,18 +444,26 @@
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)
{
- 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 (", ");
+
+ fprintf(stderr, "invalid DeltaFormat!!!!!\n");
+ }
+ else
+ {
+ 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");
}