view sources/patches/busybox-1.11.1-tar.patch @ 373:9e2e6d04af86

Bugfix for busybox 1.11.1 dealing with mercurial archives with symlinks.
author Rob Landley <rob@landley.net>
date Sun, 20 Jul 2008 12:24:39 -0500
parents
children
line wrap: on
line source

--- busybox-1.11.1/archival/libunarchive/get_header_tar.c	Wed Jun 25 14:51:17 2008
+++ busybox-1.11.1-tar/archival/libunarchive/get_header_tar.c	Sun Jul 20 19:11:45 2008
@@ -261,26 +261,31 @@
 	case '0':
 #if ENABLE_FEATURE_TAR_OLDGNU_COMPATIBILITY
 		if (last_char_is(file_header->name, '/')) {
-			file_header->mode |= S_IFDIR;
-		} else
+			goto set_dir;
+		}
 #endif
 		file_header->mode |= S_IFREG;
 		break;
 	case '2':
 		file_header->mode |= S_IFLNK;
+		/* have seen tarballs with size field containing
+		 * the size of the link target's name */
+ size0:
+		file_header->size = 0;
 		break;
 	case '3':
 		file_header->mode |= S_IFCHR;
-		break;
+		goto size0; /* paranoia */
 	case '4':
 		file_header->mode |= S_IFBLK;
-		break;
+		goto size0;
 	case '5':
+ set_dir:
 		file_header->mode |= S_IFDIR;
-		break;
+		goto size0;
 	case '6':
 		file_header->mode |= S_IFIFO;
-		break;
+		goto size0;
 #if ENABLE_FEATURE_TAR_GNU_EXTENSIONS
 	case 'L':
 		/* free: paranoia: tar with several consecutive longnames */
--- busybox-1.11.1/archival/libunarchive/seek_by_jump.c	Wed Jun 25 14:51:17 2008
+++ busybox-1.11.1-tar/archival/libunarchive/seek_by_jump.c	Sun Jul 20 19:11:45 2008
@@ -8,7 +8,9 @@
 
 void seek_by_jump(const archive_handle_t *archive_handle, unsigned amount)
 {
-	if (lseek(archive_handle->src_fd, (off_t) amount, SEEK_CUR) == (off_t) -1) {
+	if (amount
+	 && lseek(archive_handle->src_fd, (off_t) amount, SEEK_CUR) == (off_t) -1
+	) {
 		if (errno == ESPIPE)
 			seek_by_read(archive_handle, amount);
 		else