]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
fix bug #210: split statement in two to avoid substract overflow
authorSebastian Pop <s.pop@samsung.com>
Wed, 26 Sep 2018 02:49:06 +0000 (21:49 -0500)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Wed, 12 Dec 2018 16:21:40 +0000 (17:21 +0100)
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.

trees.c

diff --git a/trees.c b/trees.c
index c7e7760d71bb7baf647e765442a1a64d983edeca..130410916d83d28cabc9c365b99c373c8e913c3c 100644 (file)
--- 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--;