summaryrefslogtreecommitdiff
path: root/package/busybox/busybox-1.11.1-tar.patch
blob: 27c5d3865ffeeba8a23738813e27ed8c18e12db2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
--- 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