]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
compression/huffman: double check distance in matches (CID 1517278)
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Tue, 6 Dec 2022 20:17:17 +0000 (09:17 +1300)
committerJeremy Allison <jra@samba.org>
Mon, 19 Dec 2022 22:32:35 +0000 (22:32 +0000)
Because we just wrote the intermediate representation to have no zero
distances, we can be sure it doesn't, but Coverity doesn't know. If
distance is zero, `bitlen_nonzero_16(distance)` would be bad.

   CID 1517278 (#1 of 1): Bad bit shift operation
   (BAD_SHIFT)41. large_shift: In expression 1 << code_dist, left
   shifting by more than 31 bits has undefined behavior. The shift
   amount, code_dist, is 65535.

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Jeremy Allison <jra@samba.org>
lib/compression/lzxpress_huffman.c

index 4b55c7b7e88501ef05fabdba4453fa30e604e909..e6ff4ed3b02b78269f71090355aea135764142d3 100644 (file)
@@ -1062,6 +1062,9 @@ static ssize_t write_compressed_bytes(uint16_t symbol_values[512],
                } else {
                        return LZXPRESS_ERROR;
                }
+               if (unlikely(distance == 0)) {
+                       return LZXPRESS_ERROR;
+               }
                /* len has already had 3 subtracted */
                if (len >= 15) {
                        /*