Przeglądaj źródła

tar2qfile: fixed a bug when file contained in tar is a multiple of 512 bytes

Olivier MEDOC 10 lat temu
rodzic
commit
8e853c752c
1 zmienionych plików z 6 dodań i 3 usunięć
  1. 6 3
      qubes-rpc/tar2qfile.c

+ 6 - 3
qubes-rpc/tar2qfile.c

@@ -744,7 +744,8 @@ ustar_rd (int fd, struct file_header * untrusted_hdr, char *buf, struct stat * s
 	}
 	// Extract extra padding
 	fprintf(stderr,"Need to remove pad:%ld %ld\n",untrusted_hdr->filelen,BLKMULT-(untrusted_hdr->filelen%BLKMULT));
-	ret = read(fd, buf, BLKMULT-(untrusted_hdr->filelen%BLKMULT));
+	if (untrusted_hdr->filelen%BLKMULT < BLKMULT)
+		ret = read(fd, buf, BLKMULT-(untrusted_hdr->filelen%BLKMULT));
 	fprintf(stderr,"Removed %d bytes of padding\n",ret);
 
 	// Resync trailing headers in order to find next file chunck in the tar file
@@ -814,8 +815,10 @@ int tar_file_processor(int fd, int filter_count, char **filter)
 	
 				// Extract extra padding
 				fprintf(stderr,"Need to remove pad:%ld %ld %ld\n",to_skip,hdr.filelen,BLKMULT-(hdr.filelen%BLKMULT));
-				ret = read(fd, &buf, BLKMULT-(hdr.filelen%BLKMULT));
-				fprintf(stderr,"Removed %d bytes of padding\n",ret);
+				if (hdr.filelen%BLKMULT < BLKMULT) {
+					ret = read(fd, &buf, BLKMULT-(hdr.filelen%BLKMULT));
+					fprintf(stderr,"Removed %d bytes of padding\n",ret);
+				}
 				current = NEED_SYNC_TRAIL;
 			} 
 			i++;