diff options
author | Martin Matuska <martin@matuska.org> | 2020-01-26 00:35:50 +0100 |
---|---|---|
committer | Martin Matuska <martin@matuska.org> | 2020-01-26 00:35:50 +0100 |
commit | 328196a29c5091d2358a5efd2a59ab029c2165c5 (patch) | |
tree | 97bf37c8626d4f6e8f1dc60c0375b20b58a27482 /libarchive/archive_write_set_format_ustar.c | |
parent | bcaa4a4d270544dfd5e0f661d7524ab94beda174 (diff) | |
download | libarchive-328196a29c5091d2358a5efd2a59ab029c2165c5.tar.gz |
PAX writer: fix entry uname or gname longer than 32 characters
Fixes #1319
Diffstat (limited to 'libarchive/archive_write_set_format_ustar.c')
-rw-r--r-- | libarchive/archive_write_set_format_ustar.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/libarchive/archive_write_set_format_ustar.c b/libarchive/archive_write_set_format_ustar.c index e1fe974a..d1a06bc4 100644 --- a/libarchive/archive_write_set_format_ustar.c +++ b/libarchive/archive_write_set_format_ustar.c @@ -513,9 +513,11 @@ __archive_write_format_header_ustar(struct archive_write *a, char h[512], } if (copy_length > 0) { if (copy_length > USTAR_uname_size) { - archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, - "Username too long"); - ret = ARCHIVE_FAILED; + if (tartype != 'x') { + archive_set_error(&a->archive, + ARCHIVE_ERRNO_MISC, "Username too long"); + ret = ARCHIVE_FAILED; + } copy_length = USTAR_uname_size; } memcpy(h + USTAR_uname_offset, p, copy_length); @@ -536,9 +538,11 @@ __archive_write_format_header_ustar(struct archive_write *a, char h[512], } if (copy_length > 0) { if (strlen(p) > USTAR_gname_size) { - archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, - "Group name too long"); - ret = ARCHIVE_FAILED; + if (tartype != 'x') { + archive_set_error(&a->archive, + ARCHIVE_ERRNO_MISC, "Group name too long"); + ret = ARCHIVE_FAILED; + } copy_length = USTAR_gname_size; } memcpy(h + USTAR_gname_offset, p, copy_length); |