From 834371b4f409713fef6b78075d9c1c7a96a088f5 Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Tue, 13 Feb 2007 23:02:44 +0000
Subject: [PATCH] fix tar segfault (patch from busybox svn rev. 17772)

SVN-Revision: 6298
---
 .../busybox/patches/170-tar_segfault.patch    | 77 +++++++++++++++++++
 1 file changed, 77 insertions(+)
 create mode 100644 package/busybox/patches/170-tar_segfault.patch

diff --git a/package/busybox/patches/170-tar_segfault.patch b/package/busybox/patches/170-tar_segfault.patch
new file mode 100644
index 0000000000..0609986b0f
--- /dev/null
+++ b/package/busybox/patches/170-tar_segfault.patch
@@ -0,0 +1,77 @@
+--- busybox.old/archival/tar.c	2007/02/03 17:28:39	17740
++++ busybox.dev/archival/tar.c	2007/02/04 21:30:35	17772
+@@ -761,7 +761,9 @@
+ 	const char *tar_filename = "-";
+ 	unsigned opt;
+ 	int verboseFlag = 0;
++#if ENABLE_FEATURE_TAR_LONG_OPTIONS && ENABLE_FEATURE_TAR_FROM
+ 	llist_t *excludes = NULL;
++#endif
+ 
+ 	/* Initialise default values */
+ 	tar_handle = init_handle();
+@@ -774,7 +776,9 @@
+ 		"tt:vv:" // count -t,-v
+ 		"?:" // bail out with usage instead of error return
+ 		"X::T::" // cumulative lists
++#if ENABLE_FEATURE_TAR_LONG_OPTIONS && ENABLE_FEATURE_TAR_FROM
+ 		"\xff::" // cumulative lists for --exclude
++#endif
+ 		USE_FEATURE_TAR_CREATE("c:") "t:x:" // at least one of these is reqd
+ 		USE_FEATURE_TAR_CREATE("c--tx:t--cx:x--ct") // mutually exclusive
+ 		SKIP_FEATURE_TAR_CREATE("t--x:x--t"); // mutually exclusive
+@@ -789,14 +793,15 @@
+ 		USE_FEATURE_TAR_FROM(    "T:X:")
+ 		USE_FEATURE_TAR_GZIP(    "z"   )
+ 		USE_FEATURE_TAR_COMPRESS("Z"   )
+-		,
+-		&base_dir, // -C dir
+-		&tar_filename, // -f filename
+-		USE_FEATURE_TAR_FROM(&(tar_handle->accept),) // T
+-		USE_FEATURE_TAR_FROM(&(tar_handle->reject),) // X
+-		USE_FEATURE_TAR_FROM(&excludes            ,) // --exclude
+-		&verboseFlag, // combined count for -t and -v
+-		&verboseFlag // combined count for -t and -v
++		, &base_dir // -C dir
++		, &tar_filename // -f filename
++		USE_FEATURE_TAR_FROM(, &(tar_handle->accept)) // T
++		USE_FEATURE_TAR_FROM(, &(tar_handle->reject)) // X
++#if ENABLE_FEATURE_TAR_LONG_OPTIONS && ENABLE_FEATURE_TAR_FROM
++		, &excludes // --exclude
++#endif
++		, &verboseFlag // combined count for -t and -v
++		, &verboseFlag // combined count for -t and -v
+ 		);
+ 
+ 	if (verboseFlag) tar_handle->action_header = header_verbose_list;
+@@ -829,17 +834,19 @@
+ 	if (opt & OPT_COMPRESS)
+ 		get_header_ptr = get_header_tar_Z;
+ 
+-	if (ENABLE_FEATURE_TAR_FROM) {
+-		tar_handle->reject = append_file_list_to_list(tar_handle->reject);
+-		/* Append excludes to reject */
+-		while (excludes) {
+-			llist_t *temp = excludes->link;
+-			excludes->link = tar_handle->reject;
+-			tar_handle->reject = excludes;
+-			excludes = temp;
+-		}
+-		tar_handle->accept = append_file_list_to_list(tar_handle->accept);
++#if ENABLE_FEATURE_TAR_FROM
++	tar_handle->reject = append_file_list_to_list(tar_handle->reject);
++#if ENABLE_FEATURE_TAR_LONG_OPTIONS
++	/* Append excludes to reject */
++	while (excludes) {
++		llist_t *next = excludes->link;
++		excludes->link = tar_handle->reject;
++		tar_handle->reject = excludes;
++		excludes = next;
+ 	}
++#endif
++	tar_handle->accept = append_file_list_to_list(tar_handle->accept);
++#endif
+ 
+ 	/* Check if we are reading from stdin */
+ 	if (argv[optind] && *argv[optind] == '-') {
+
-- 
2.30.2