]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Fix archive_read_append_filter() for lzop and grzip
authorTim Kientzle <kientzle@acm.org>
Sun, 27 Jul 2025 15:50:03 +0000 (08:50 -0700)
committerFrançois Degros <fdegros@chromium.org>
Fri, 27 Mar 2026 03:04:24 +0000 (14:04 +1100)
These two filters failed to correctly set a name when
being registered, which prevented them from working
correctly with archive_read_append_filter()

Thanks to @fdegros for the test case demonstrating the lrzip failure

libarchive/archive_read_append_filter.c
libarchive/archive_read_support_filter_grzip.c
libarchive/archive_read_support_filter_lzop.c

index cd88df1199062fc9d01fe62598071031901e2bd5..d578b06fe7145cc33672593196eb272df2c7e808 100644 (file)
@@ -104,6 +104,10 @@ archive_read_append_filter(struct archive *_a, int code)
       strcpy(str, "lrzip");
       r1 = archive_read_support_filter_lrzip(_a);
       break;
+    case ARCHIVE_FILTER_GRZIP:
+      strcpy(str, "grzip");
+      r1 = archive_read_support_filter_grzip(_a);
+      break;
     default:
       archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
           "Invalid filter code specified");
index 15b6757cb90cb552010284629997ef86c5ef0e79..8ec5d1f855cbf7a47f0f68e241aed98d4bb25c14 100644 (file)
@@ -62,7 +62,7 @@ archive_read_support_filter_grzip(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
 
-       if (__archive_read_register_bidder(a, NULL, NULL,
+       if (__archive_read_register_bidder(a, NULL, "grzip",
                                &grzip_bidder_vtable) != ARCHIVE_OK)
                return (ARCHIVE_FATAL);
 
index b0c4bb13e8b372090ec69a205464cf0e5c7da3ea..12ed78c578cd0498e7b471faea36e12d37448e38 100644 (file)
@@ -110,7 +110,7 @@ archive_read_support_filter_lzop(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
 
-       if (__archive_read_register_bidder(a, NULL, NULL,
+       if (__archive_read_register_bidder(a, NULL, "lzop",
                                &lzop_bidder_vtable) != ARCHIVE_OK)
                return (ARCHIVE_FATAL);