]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Rewrite expressions to avoid undefined behavior.
authorJoerg Sonnenberger <joerg@bec.de>
Fri, 28 Apr 2017 21:05:43 +0000 (23:05 +0200)
committerJoerg Sonnenberger <joerg@bec.de>
Fri, 28 Apr 2017 21:05:43 +0000 (23:05 +0200)
Reported-By: OSS-Fuzz issue 527

libarchive/archive_read_support_filter_lz4.c

index 663e2d3d601f67a36469693366a675d46e456ae9..147f5027ff4d728a4b3bb0b5f4ceba01c868844b 100644 (file)
@@ -494,7 +494,7 @@ lz4_filter_read_data_block(struct archive_read_filter *self, const void **p)
        if (read_buf == NULL)
                goto truncated_error;
        compressed_size = archive_le32dec(read_buf);
-       if ((compressed_size & ~(1 << 31)) > state->flags.block_maximum_size)
+       if ((compressed_size & 0x7fffffff) > state->flags.block_maximum_size)
                goto malformed_error;
        /* A compressed size == 0 means the end of stream blocks. */
        if (compressed_size == 0) {
@@ -504,8 +504,8 @@ lz4_filter_read_data_block(struct archive_read_filter *self, const void **p)
 
        checksum_size = state->flags.block_checksum;
        /* Check if the block is uncompressed. */
-       if (compressed_size & (1 << 31)) {
-               compressed_size &= ~(1 << 31);
+       if (compressed_size & 0x80000000U) {
+               compressed_size &= 0x7fffffff;
                uncompressed_size = compressed_size;
        } else
                uncompressed_size = 0;/* Unknown yet. */