From: Sebastian Pop Date: Wed, 26 Sep 2018 02:49:06 +0000 (-0500) Subject: fix bug #210: split statement in two to avoid substract overflow X-Git-Tag: 1.9.9-b1~589 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e9a016858ac2e3ba51a1241bef064db390a49c33;p=thirdparty%2Fzlib-ng.git fix bug #210: split statement in two to avoid substract overflow make check used to fail with: trees.c:482:53: runtime error: unsigned integer overflow: 6 - 7 cannot be represented in type 'unsigned int' SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior trees.c:482:53 in Patch from Mika Lindqvist. --- diff --git a/trees.c b/trees.c index c7e7760d7..130410916 100644 --- a/trees.c +++ b/trees.c @@ -479,7 +479,8 @@ static void gen_bitlen(deflate_state *s, tree_desc *desc) { continue; if (tree[m].Len != bits) { Trace((stderr, "code %d bits %d->%u\n", m, tree[m].Len, bits)); - s->opt_len += (unsigned long)((bits - tree[m].Len) * tree[m].Freq); + s->opt_len += (unsigned long)(bits * tree[m].Freq); + s->opt_len -= (unsigned long)(tree[m].Len * tree[m].Freq); tree[m].Len = (uint16_t)bits; } n--;