]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
test: compression: check with trailing garbage in input
authorBrandon Maier <brandon.maier@collins.com>
Wed, 28 Dec 2022 22:53:51 +0000 (16:53 -0600)
committerTom Rini <trini@konsulko.com>
Wed, 11 Jan 2023 20:02:24 +0000 (15:02 -0500)
The Linux kernel appends 4 bytes to the end of compressed kernel Images
containing the uncompressed image size. They are used to make
self-decompressing Images easier. However for archs that don't support
self-decompression, like ARM64, U-Boot must be able to decompress the
image with the garbage data.

The existing decompressors already support this. This unit test was
added while working on zstd support as upstream zstd will error if there
is garbage data in the input buffer, and special care was needed to
support this.

Signed-off-by: Brandon Maier <brandon.maier@collins.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
test/compression.c

index 82e29c9b86b97912203f2c65a6b7161386a7d124..6c2a43fbed7917d94dafd1f9b69a5d59803ab0b4 100644 (file)
@@ -350,6 +350,15 @@ static int run_test_internal(struct unit_test_state *uts, char *name,
                        buf->orig_size) == 0);
        errcheck(((char *)buf->uncompressed_buf)[buf->orig_size] == 'A');
 
+       /* Uncompresses with trailing garbage in input buffer. */
+       memset(buf->uncompressed_buf, 'A', TEST_BUFFER_SIZE);
+       errcheck(uncompress(uts, buf->compressed_buf, buf->compressed_size + 4,
+                           buf->uncompressed_buf, buf->uncompressed_size,
+                           &buf->uncompressed_size) == 0);
+       errcheck(buf->uncompressed_size == buf->orig_size);
+       errcheck(memcmp(buf->orig_buf, buf->uncompressed_buf,
+                       buf->orig_size) == 0);
+
        /* Make sure compression does not over-run. */
        memset(buf->compare_buf, 'A', TEST_BUFFER_SIZE);
        ret = compress(uts, buf->orig_buf, buf->orig_size,