]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
cmd: ximg: handle Z_BUF_ERROR explicitly in GZIP decompression
authorAristo Chen <jj251510319013@gmail.com>
Thu, 8 May 2025 19:37:24 +0000 (19:37 +0000)
committerTom Rini <trini@konsulko.com>
Thu, 22 May 2025 20:26:38 +0000 (14:26 -0600)
When decompressing GZIP-compressed image parts via the `imxtract` command,
explicitly handle the `Z_BUF_ERROR` return value from `gunzip()` to provide
a clearer diagnostic. This error typically indicates that the destination
buffer is too small to hold the uncompressed data.

Signed-off-by: Aristo Chen <aristo.chen@canonical.com>
[trini: Rework to indent the whole case with { } due to not using the
C23 extension]
Signed-off-by: Tom Rini <trini@konsulko.com>
cmd/ximg.c

index 29d7c3279b39a8df8f53d705ce2f9647b1ba98ef..e97167a79cc5d08fa657ca98f56e084bea240e5d 100644 (file)
@@ -27,6 +27,7 @@
 #include <asm/byteorder.h>
 #include <asm/cache.h>
 #include <asm/io.h>
+#include <u-boot/zlib.h>
 
 static int
 do_imgextract(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
@@ -206,11 +207,18 @@ do_imgextract(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
                        break;
 #ifdef CONFIG_GZIP
                case IH_COMP_GZIP:
-                       printf("   Uncompressing part %d ... ", part);
-                       if (gunzip((void *) dest, unc_len,
-                                  (uchar *) data, &len) != 0) {
-                               puts("GUNZIP ERROR - image not loaded\n");
-                               return 1;
+                       {
+                               int ret = 0;
+                               printf("   Uncompressing part %d ... ", part);
+                               ret = gunzip((void *)dest, unc_len,
+                                            (uchar *)data, &len);
+                               if (ret == Z_BUF_ERROR) {
+                                       puts("Image too large: increase CONFIG_SYS_XIMG_LEN\n");
+                                       return 1;
+                               } else if (ret != 0) {
+                                       puts("GUNZIP ERROR - image not loaded\n");
+                                       return 1;
+                               }
                        }
                        break;
 #endif