From 68e6238cc54101a726c518c1c9a774d113ef10bd Mon Sep 17 00:00:00 2001 From: zyfjeff Date: Sat, 25 Nov 2023 23:23:08 +0800 Subject: [PATCH] Let targz type conversions support bgzip format code reference https://github.com/madler/zlib/blob/master/examples/zran.c at present, zran and normal targz do not consider the support for bgzip when decompressing, so there will be problems when encountering this kind of image, and this PR is used to support the bgzip format. bgzip: http://www.htslib.org/doc/bgzip.html Signed-off-by: zyfjeff --- misc/top_images/image_list.txt | 3 +- tests/texture/zran/bgzip.tar.gz | Bin 0 -> 2528238 bytes utils/src/compress/mod.rs | 8 +- utils/src/compress/zlib_random.rs | 127 +++++++++++++++++++++++++++--- 4 files changed, 120 insertions(+), 18 deletions(-) create mode 100644 tests/texture/zran/bgzip.tar.gz diff --git a/misc/top_images/image_list.txt b/misc/top_images/image_list.txt index 5560bcac546..9b6e814b3bd 100644 --- a/misc/top_images/image_list.txt +++ b/misc/top_images/image_list.txt @@ -43,4 +43,5 @@ kong solr sentry zookeeper -ghcr.io/dragonflyoss/image-service/pax-uid-test \ No newline at end of file +ghcr.io/dragonflyoss/image-service/pax-uid-test +cgr.dev/chainguard/busybox \ No newline at end of file diff --git a/tests/texture/zran/bgzip.tar.gz b/tests/texture/zran/bgzip.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..517fa3eeca159e788b3ef5bbb4729fbab7337a73 GIT binary patch literal 2528238 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