diff options
Diffstat (limited to 'archive-tar.c')
| -rw-r--r-- | archive-tar.c | 33 | 
1 files changed, 16 insertions, 17 deletions
diff --git a/archive-tar.c b/archive-tar.c index 719b6298e6..501ca97760 100644 --- a/archive-tar.c +++ b/archive-tar.c @@ -167,21 +167,21 @@ static void prepare_header(struct archiver_args *args,  			   struct ustar_header *header,  			   unsigned int mode, unsigned long size)  { -	sprintf(header->mode, "%07o", mode & 07777); -	sprintf(header->size, "%011lo", S_ISREG(mode) ? size : 0); -	sprintf(header->mtime, "%011lo", (unsigned long) args->time); +	xsnprintf(header->mode, sizeof(header->mode), "%07o", mode & 07777); +	xsnprintf(header->size, sizeof(header->size), "%011lo", S_ISREG(mode) ? size : 0); +	xsnprintf(header->mtime, sizeof(header->mtime), "%011lo", (unsigned long) args->time); -	sprintf(header->uid, "%07o", 0); -	sprintf(header->gid, "%07o", 0); +	xsnprintf(header->uid, sizeof(header->uid), "%07o", 0); +	xsnprintf(header->gid, sizeof(header->gid), "%07o", 0);  	strlcpy(header->uname, "root", sizeof(header->uname));  	strlcpy(header->gname, "root", sizeof(header->gname)); -	sprintf(header->devmajor, "%07o", 0); -	sprintf(header->devminor, "%07o", 0); +	xsnprintf(header->devmajor, sizeof(header->devmajor), "%07o", 0); +	xsnprintf(header->devminor, sizeof(header->devminor), "%07o", 0);  	memcpy(header->magic, "ustar", 6);  	memcpy(header->version, "00", 2); -	sprintf(header->chksum, "%07o", ustar_header_chksum(header)); +	snprintf(header->chksum, sizeof(header->chksum), "%07o", ustar_header_chksum(header));  }  static int write_extended_header(struct archiver_args *args, @@ -193,7 +193,7 @@ static int write_extended_header(struct archiver_args *args,  	memset(&header, 0, sizeof(header));  	*header.typeflag = TYPEFLAG_EXT_HEADER;  	mode = 0100666; -	sprintf(header.name, "%s.paxheader", sha1_to_hex(sha1)); +	xsnprintf(header.name, sizeof(header.name), "%s.paxheader", sha1_to_hex(sha1));  	prepare_header(args, &header, mode, size);  	write_blocked(&header, sizeof(header));  	write_blocked(buffer, size); @@ -233,10 +233,10 @@ static int write_tar_entry(struct archiver_args *args,  		size_t rest = pathlen - plen - 1;  		if (plen > 0 && rest <= sizeof(header.name)) {  			memcpy(header.prefix, path, plen); -				memcpy(header.name, path + plen + 1, rest); +			memcpy(header.name, path + plen + 1, rest);  		} else { -			sprintf(header.name, "%s.data", -				sha1_to_hex(sha1)); +			xsnprintf(header.name, sizeof(header.name), "%s.data", +				  sha1_to_hex(sha1));  			strbuf_append_ext_header(&ext_header, "path",  						 path, pathlen);  		} @@ -259,8 +259,8 @@ static int write_tar_entry(struct archiver_args *args,  	if (S_ISLNK(mode)) {  		if (size > sizeof(header.linkname)) { -			sprintf(header.linkname, "see %s.paxheader", -			        sha1_to_hex(sha1)); +			xsnprintf(header.linkname, sizeof(header.linkname), +				  "see %s.paxheader", sha1_to_hex(sha1));  			strbuf_append_ext_header(&ext_header, "linkpath",  			                         buffer, size);  		} else @@ -301,7 +301,7 @@ static int write_global_extended_header(struct archiver_args *args)  	memset(&header, 0, sizeof(header));  	*header.typeflag = TYPEFLAG_GLOBAL_HEADER;  	mode = 0100666; -	strcpy(header.name, "pax_global_header"); +	xsnprintf(header.name, sizeof(header.name), "pax_global_header");  	prepare_header(args, &header, mode, ext_header.len);  	write_blocked(&header, sizeof(header));  	write_blocked(ext_header.buf, ext_header.len); @@ -395,7 +395,7 @@ static int write_tar_filter_archive(const struct archiver *ar,  				    struct archiver_args *args)  {  	struct strbuf cmd = STRBUF_INIT; -	struct child_process filter; +	struct child_process filter = CHILD_PROCESS_INIT;  	const char *argv[2];  	int r; @@ -406,7 +406,6 @@ static int write_tar_filter_archive(const struct archiver *ar,  	if (args->compression_level >= 0)  		strbuf_addf(&cmd, " -%d", args->compression_level); -	memset(&filter, 0, sizeof(filter));  	argv[0] = cmd.buf;  	argv[1] = NULL;  	filter.argv = argv;  | 
