[Commits] [SCM] claws branch, master, updated. 4.3.1-35-gf2cb5b36b

wwp at claws-mail.org wwp at claws-mail.org
Fri Mar 7 14:24:30 UTC 2025


The branch, master has been updated
       via  f2cb5b36b0ed714487e08f5c9b7c2244ca134df6 (commit)
      from  cda3dae3ec9771b9f9581d14481e5c3cf67110b3 (commit)

Summary of changes:
 src/plugins/archive/archiver.c           |  3 +++
 src/plugins/archive/archiver_gtk.c       | 27 +++++++++++++++++++++++++++
 src/plugins/archive/archiver_prefs.c     | 26 ++++++++++++++++++++++++++
 src/plugins/archive/archiver_prefs.h     |  3 +++
 src/plugins/archive/libarchive_archive.c |  8 +++++++-
 src/plugins/archive/libarchive_archive.h |  3 +++
 6 files changed, 69 insertions(+), 1 deletion(-)


- Log -----------------------------------------------------------------
commit f2cb5b36b0ed714487e08f5c9b7c2244ca134df6
Author: wwp <subscript at free.fr>
Date:   Fri Mar 7 15:19:34 2025 +0100

    Mail Archiver plug-in: add support for ZSTD (libarchive >= 3.4.0).
    Fix a possible buffer overrun.

diff --git a/src/plugins/archive/archiver.c b/src/plugins/archive/archiver.c
index 8110ce536..5e7fd2d70 100644
--- a/src/plugins/archive/archiver.c
+++ b/src/plugins/archive/archiver.c
@@ -159,6 +159,9 @@ const gchar* plugin_desc(void) {
 #endif
 #if ARCHIVE_VERSION_NUMBER >= 3001900
 			"\tLZ4\n"
+#endif
+#if ARCHIVE_VERSION_NUMBER >= 3004000
+			"\tZSTD\n"
 #endif
 			);
 	}
diff --git a/src/plugins/archive/archiver_gtk.c b/src/plugins/archive/archiver_gtk.c
index 1f27d64f5..4292cdefe 100644
--- a/src/plugins/archive/archiver_gtk.c
+++ b/src/plugins/archive/archiver_gtk.c
@@ -263,6 +263,12 @@ static COMPRESS_METHOD get_compress_method(GSList* btn) {
 				debug_print("LZ4 compression enabled\n");
 				return LZ4;
 			}
+#endif
+#if ARCHIVE_VERSION_NUMBER >= 3001900
+			else if (strcmp("ZSTD", name) == 0) {
+				debug_print("ZSTD compression enabled\n");
+				return LZ4;
+			}
 #endif
 			else if (strcmp("NONE", name) == 0) {
 				debug_print("Compression disabled\n");
@@ -715,6 +721,11 @@ static void show_result(struct ArchivePage* page) {
 		case LZ4:
 			method = g_strdup("LZ4");
 			break;
+#endif
+#if ARCHIVE_VERSION_NUMBER >= 3001900
+		case ZSTD:
+			method = g_strdup("ZSTD");
+			break;
 #endif
 		case NO_COMPRESS:
 			method = g_strdup("No Compression");
@@ -1020,6 +1031,9 @@ void archiver_gtk_show(void) {
 #endif
 #if ARCHIVE_VERSION_NUMBER >= 3001900
 	GtkWidget* lz4_radio_btn;
+#endif
+#if ARCHIVE_VERSION_NUMBER >= 3001900
+	GtkWidget* zstd_radio_btn;
 #endif
 	GtkWidget* no_radio_btn;
 	GtkWidget* shar_radio_btn;
@@ -1172,6 +1186,14 @@ void archiver_gtk_show(void) {
         archiver_set_tooltip(lz4_radio_btn, g_strdup_printf(_("Choose this option to use %s compression for the archive"), "LZ4"));
 #endif
 
+#if ARCHIVE_VERSION_NUMBER >= 3004000
+	zstd_radio_btn = gtk_radio_button_new_with_mnemonic_from_widget(
+					GTK_RADIO_BUTTON(gzip_radio_btn), "ZZSTD");
+	gtk_widget_set_name(zstd_radio_btn, "ZSTD");
+	gtk_box_pack_start(GTK_BOX(hbox1), zstd_radio_btn, FALSE, FALSE, 0);
+        archiver_set_tooltip(zstd_radio_btn, g_strdup_printf(_("Choose this option to use %s compression for the archive"), "ZSTD"));
+#endif
+
 	no_radio_btn = gtk_radio_button_new_with_mnemonic_from_widget(
 					GTK_RADIO_BUTTON(gzip_radio_btn), _("_None"));
 	gtk_widget_set_name(no_radio_btn, "NONE");
@@ -1219,6 +1241,11 @@ void archiver_gtk_show(void) {
 	case COMPRESSION_LZ4:
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lz4_radio_btn), TRUE);
 		break;
+#endif
+#if ARCHIVE_VERSION_NUMBER >= 3004000
+	case COMPRESSION_ZSTD:
+		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(zstd_radio_btn), TRUE);
+		break;
 #endif
 	case COMPRESSION_NONE:
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(no_radio_btn), TRUE);
diff --git a/src/plugins/archive/archiver_prefs.c b/src/plugins/archive/archiver_prefs.c
index 950839349..499fae36b 100644
--- a/src/plugins/archive/archiver_prefs.c
+++ b/src/plugins/archive/archiver_prefs.c
@@ -65,6 +65,9 @@ struct ArchiverPrefsPage {
 #endif
 #if ARCHIVE_VERSION_NUMBER >= 3001900
 	GtkWidget *lz4_radiobtn;
+#endif
+#if ARCHIVE_VERSION_NUMBER >= 3004000
+	GtkWidget *zstd_radiobtn;
 #endif
 	GtkWidget *none_radiobtn;
 	GtkWidget *tar_radiobtn;
@@ -189,6 +192,9 @@ static void create_archiver_prefs_page(PrefsPage * _page,
 #endif
 #if ARCHIVE_VERSION_NUMBER >= 3001900
 	GtkWidget *lz4_radiobtn;
+#endif
+#if ARCHIVE_VERSION_NUMBER >= 3004000
+	GtkWidget *zstd_radiobtn;
 #endif
 	GtkWidget *none_radiobtn;
 	GSList    *format_group = NULL;
@@ -309,6 +315,14 @@ static void create_archiver_prefs_page(PrefsPage * _page,
 	archiver_set_tooltip(lz4_radiobtn, g_strdup_printf(_("Choose this option to use %s compression by default"), "LZ4"));
 #endif
 
+#if ARCHIVE_VERSION_NUMBER >= 3004000
+	zstd_radiobtn = gtk_radio_button_new_with_label(compression_group, "ZSTD");
+	compression_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(zstd_radiobtn));
+	gtk_widget_show(zstd_radiobtn);
+	gtk_box_pack_start(GTK_BOX (hbox1), zstd_radiobtn, FALSE, FALSE, 0);
+	archiver_set_tooltip(zstd_radiobtn, g_strdup_printf(_("Choose this option to use %s compression by default"), "ZSTD"));
+#endif
+
     none_radiobtn = gtk_radio_button_new_with_label(compression_group, _("None"));
 	compression_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(none_radiobtn));
 	gtk_widget_show(none_radiobtn);
@@ -353,6 +367,11 @@ static void create_archiver_prefs_page(PrefsPage * _page,
 	case COMPRESSION_LZ4:
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lz4_radiobtn), TRUE);
 		break;
+#endif
+#if ARCHIVE_VERSION_NUMBER >= 3004000
+	case COMPRESSION_ZSTD:
+		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(zstd_radiobtn), TRUE);
+		break;
 #endif
 	case COMPRESSION_NONE:
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(none_radiobtn), TRUE);
@@ -459,6 +478,9 @@ static void create_archiver_prefs_page(PrefsPage * _page,
 #endif
 #if ARCHIVE_VERSION_NUMBER >= 3001900
 	page->lz4_radiobtn = lz4_radiobtn;
+#endif
+#if ARCHIVE_VERSION_NUMBER >= 3004000
+	page->zstd_radiobtn = zstd_radiobtn;
 #endif
 	page->none_radiobtn = none_radiobtn;
 	page->tar_radiobtn = tar_radiobtn;
@@ -513,6 +535,10 @@ static void save_archiver_prefs(PrefsPage * _page)
 #if ARCHIVE_VERSION_NUMBER >= 3001900
 	else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->lz4_radiobtn)))
 		archiver_prefs.compression = COMPRESSION_LZ4;
+#endif
+#if ARCHIVE_VERSION_NUMBER >= 3004000
+	else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->zstd_radiobtn)))
+		archiver_prefs.compression = COMPRESSION_ZSTD;
 #endif
 	else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->none_radiobtn)))
 		archiver_prefs.compression = COMPRESSION_NONE;
diff --git a/src/plugins/archive/archiver_prefs.h b/src/plugins/archive/archiver_prefs.h
index 2cf6ad007..f828a8208 100644
--- a/src/plugins/archive/archiver_prefs.h
+++ b/src/plugins/archive/archiver_prefs.h
@@ -43,6 +43,9 @@ typedef enum {
 #endif
 #if ARCHIVE_VERSION_NUMBER >= 3001900
 	COMPRESSION_LZ4,
+#endif
+#if ARCHIVE_VERSION_NUMBER >= 3001900
+	COMPRESSION_ZSTD,
 #endif
     COMPRESSION_NONE
 } CompressionType;
diff --git a/src/plugins/archive/libarchive_archive.c b/src/plugins/archive/libarchive_archive.c
index b477d82e9..c2416b356 100644
--- a/src/plugins/archive/libarchive_archive.c
+++ b/src/plugins/archive/libarchive_archive.c
@@ -531,6 +531,12 @@ const gchar* archive_create(const char* archive_name, GSList* files,
 			if (archive_write_add_filter_lz4(arch) != ARCHIVE_OK)
 				return archive_error_string(arch);
 			break;
+#endif
+#if ARCHIVE_VERSION_NUMBER >= 3004000
+		case ZSTD:
+			if (archive_write_add_filter_zstd(arch) != ARCHIVE_OK)
+				return archive_error_string(arch);
+			break;
 #endif
 		case NO_COMPRESS:
 #if ARCHIVE_VERSION_NUMBER < 3000000
@@ -707,7 +713,7 @@ void archive_scan_folder(const char* dir) {
 
 int main(int argc, char** argv) {
 	char* archive = NULL;
-	char buf[PATH_MAX];
+	char buf[PATH_MAX*2];
 	int pid;
 	int opt;
 	int perm = ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_TIME |
diff --git a/src/plugins/archive/libarchive_archive.h b/src/plugins/archive/libarchive_archive.h
index fc7f0c26a..eefed30e7 100644
--- a/src/plugins/archive/libarchive_archive.h
+++ b/src/plugins/archive/libarchive_archive.h
@@ -45,6 +45,9 @@ enum _COMPRESS_METHOD {
 #endif
 #if ARCHIVE_VERSION_NUMBER >= 3001900
 		LZ4,
+#endif
+#if ARCHIVE_VERSION_NUMBER >= 3004000
+		ZSTD,
 #endif
         NO_COMPRESS
 };

-----------------------------------------------------------------------


hooks/post-receive
-- 
Claws Mail


More information about the Commits mailing list