diff options
author | kientzle <kientzle@FreeBSD.org> | 2004-11-28 17:57:11 +0000 |
---|---|---|
committer | kientzle <kientzle@FreeBSD.org> | 2004-11-28 17:57:11 +0000 |
commit | ffb27cac2ce82a918fb3333db1ee68cdef3ca930 (patch) | |
tree | 8591a0f97ca5df4ebfa5178cdf2910bf4816510f /lib/libarchive/archive_write_set_format_pax.c | |
parent | 43f45b89f89276135cb2af4d9f4b60823c4c01bf (diff) | |
download | FreeBSD-src-ffb27cac2ce82a918fb3333db1ee68cdef3ca930.zip FreeBSD-src-ffb27cac2ce82a918fb3333db1ee68cdef3ca930.tar.gz |
When determining whether filename is too long for a
regular 'ustar' entry, use narrow-character version,
not wide-character version, as the ustar entry always
uses the narrow-character filename.
Thanks to: Michal Listos
Inspired by, but doesn't fix: bin/74385
Diffstat (limited to 'lib/libarchive/archive_write_set_format_pax.c')
-rw-r--r-- | lib/libarchive/archive_write_set_format_pax.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/lib/libarchive/archive_write_set_format_pax.c b/lib/libarchive/archive_write_set_format_pax.c index 785032f..8593eb7 100644 --- a/lib/libarchive/archive_write_set_format_pax.c +++ b/lib/libarchive/archive_write_set_format_pax.c @@ -314,7 +314,8 @@ archive_write_pax_header(struct archive *a, struct archive_entry *entry_main; const char *linkname, *p; const char *hardlink; - const wchar_t *wp, *wp2, *wname_start; + const wchar_t *wp, *wp2; + const char *suffix_start; int need_extension, r, ret; struct pax *pax; const struct stat *st_main, *st_original; @@ -368,11 +369,11 @@ archive_write_pax_header(struct archive *a, */ wp = archive_entry_pathname_w(entry_main); p = archive_entry_pathname(entry_main); - if (wcslen(wp) <= 100) /* Short enough for just 'name' field */ - wname_start = wp; /* Record a zero-length prefix */ + if (strlen(p) <= 100) /* Short enough for just 'name' field */ + suffix_start = p; /* Record a zero-length prefix */ else /* Find the largest suffix that fits in 'name' field. */ - wname_start = wcschr(wp + wcslen(wp) - 100 - 1, '/'); + suffix_start = strchr(p + strlen(p) - 100 - 1, '/'); /* Find non-ASCII character, if any. */ wp2 = wp; @@ -383,8 +384,7 @@ archive_write_pax_header(struct archive *a, * If name is too long, or has non-ASCII characters, add * 'path' to pax extended attrs. */ - if (wname_start == NULL || wname_start - wp > 155 || - *wp2 != L'\0') { + if (suffix_start == NULL || suffix_start - p > 155 || *wp2 != L'\0') { add_pax_attr_w(&(pax->pax_header), "path", wp); archive_entry_set_pathname(entry_main, build_ustar_entry_name(ustar_entry_name, p)); |