From 682db81c23d2116072d8550657c914afb7c26d2b Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 23 Nov 2005 15:19:48 +0000 Subject: [PATCH] Protect against possible division by zeros (#316468, Steve Grubb) 2005-11-23 Behdad Esfahbod 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 | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/disasm.c b/src/disasm.c index f4c132f0b..15464f4b9 100644 --- a/src/disasm.c +++ b/src/disasm.c @@ -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 (""); - 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 ("\n"); }