aboutsummaryrefslogtreecommitdiff
path: root/test/compression.c
diff options
context:
space:
mode:
authorBrandon Maier <brandon.maier@collins.com>2022-12-28 16:53:51 -0600
committerTom Rini <trini@konsulko.com>2023-01-11 15:02:24 -0500
commit43b059884ae1c52a197529b3ac81046d582fb60f (patch)
tree99d716e96e11513be337c314ef06ec571f5e4cb9 /test/compression.c
parentbf48dde80a6c302b3279fe8ed1e5eb9e8fef4abd (diff)
downloadu-boot-43b059884ae1c52a197529b3ac81046d582fb60f.zip
u-boot-43b059884ae1c52a197529b3ac81046d582fb60f.tar.gz
u-boot-43b059884ae1c52a197529b3ac81046d582fb60f.tar.bz2
test: compression: check with trailing garbage in input
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>
Diffstat (limited to 'test/compression.c')
-rw-r--r--test/compression.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/test/compression.c b/test/compression.c
index 82e29c9..6c2a43f 100644
--- a/test/compression.c
+++ b/test/compression.c
@@ -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,