From 586965c9cdf63170ccc3713ebf87201c46d3428c Mon Sep 17 00:00:00 2001 From: Patrick McDermott Date: Tue, 02 May 2023 20:27:14 -0400 Subject: ustar: Fill header with zeroes before populating --- (limited to 'src/ustar.c') diff --git a/src/ustar.c b/src/ustar.c index 13e7621..8c31f7a 100644 --- a/src/ustar.c +++ b/src/ustar.c @@ -271,11 +271,12 @@ opkg_opk_ustar_write_header(struct opkg_opk_ustar *ustar, uid_t uid, const char *uname, gid_t gid, const char *gname, uint64_t size, int64_t mtime, char type, const char *linkname) { - size_t linkname_len; uint32_t chksum; size_t i; char *header_uc; + memset(&ustar->header, 0, sizeof(ustar->header)); + if (opkg_opk_dirent_name_prefix(dirent, ustar->header.name, sizeof(ustar->header.name), @@ -296,6 +297,8 @@ opkg_opk_ustar_write_header(struct opkg_opk_ustar *ustar, break; case 'l': /* Symbolic link */ *ustar->header.typeflag = '2'; + strncpy(ustar->header.linkname, linkname, + sizeof(ustar->header.linkname)); break; case 'c': /* Character special file */ *ustar->header.typeflag = '3'; @@ -312,14 +315,6 @@ opkg_opk_ustar_write_header(struct opkg_opk_ustar *ustar, default: return OPKG_OPK_ERROR; /* Unsupported */ } - if (*ustar->header.typeflag == '2') { - linkname_len = strlen(linkname); - memcpy(ustar->header.linkname, linkname, linkname_len); - } else { - linkname_len = 0; - } - memset(ustar->header.linkname, 0, - sizeof(ustar->header.linkname) - linkname_len); strcpy(ustar->header.magic, "ustar"); memcpy(ustar->header.version, "00", 2); -- cgit v0.9.1