summaryrefslogtreecommitdiffstats
path: root/Utilities
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2015-04-09 18:28:23 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2015-04-09 18:28:23 (GMT)
commitbb891710cf7ba1ce8db059268ce4ee553c64966f (patch)
tree5a3a0dc3b297ec7aef20a01c4899076834cff0d0 /Utilities
parentf941ed7a8f48665188ca355a97c926317ff586d3 (diff)
parentad194ae0b1d85e5e13f1c38a20d397dabccf80e9 (diff)
downloadCMake-bb891710cf7ba1ce8db059268ce4ee553c64966f.zip
CMake-bb891710cf7ba1ce8db059268ce4ee553c64966f.tar.gz
CMake-bb891710cf7ba1ce8db059268ce4ee553c64966f.tar.bz2
Merge topic 'fix-libarchive-gnutar-large-ids'
ad194ae0 libarchive: Use base-256 encoding for UID/GID like GNU tar does
Diffstat (limited to 'Utilities')
-rw-r--r--Utilities/cmlibarchive/libarchive/archive_write_set_format_gnutar.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/Utilities/cmlibarchive/libarchive/archive_write_set_format_gnutar.c b/Utilities/cmlibarchive/libarchive/archive_write_set_format_gnutar.c
index 13942c1..647079d 100644
--- a/Utilities/cmlibarchive/libarchive/archive_write_set_format_gnutar.c
+++ b/Utilities/cmlibarchive/libarchive/archive_write_set_format_gnutar.c
@@ -644,18 +644,18 @@ archive_format_gnutar_header(struct archive_write *a, char h[512],
format_octal(archive_entry_mode(entry) & 07777,
h + GNUTAR_mode_offset, GNUTAR_mode_size);
- /* TODO: How does GNU tar handle large UIDs? */
- if (format_octal(archive_entry_uid(entry),
- h + GNUTAR_uid_offset, GNUTAR_uid_size)) {
+ /* GNU tar supports base-256 here, so should never overflow. */
+ if (format_number(archive_entry_uid(entry), h + GNUTAR_uid_offset,
+ GNUTAR_uid_size, GNUTAR_uid_max_size)) {
archive_set_error(&a->archive, ERANGE,
"Numeric user ID %jd too large",
(intmax_t)archive_entry_uid(entry));
ret = ARCHIVE_FAILED;
}
- /* TODO: How does GNU tar handle large GIDs? */
- if (format_octal(archive_entry_gid(entry),
- h + GNUTAR_gid_offset, GNUTAR_gid_size)) {
+ /* GNU tar supports base-256 here, so should never overflow. */
+ if (format_number(archive_entry_gid(entry), h + GNUTAR_gid_offset,
+ GNUTAR_gid_size, GNUTAR_gid_max_size)) {
archive_set_error(&a->archive, ERANGE,
"Numeric group ID %jd too large",
(intmax_t)archive_entry_gid(entry));