aboutsummaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorMartin Matuska <mm@FreeBSD.org>2024-10-20 08:22:09 +0000
committerMartin Matuska <mm@FreeBSD.org>2024-10-20 08:24:02 +0000
commitbd66c1b43e33540205dbc1187c2f2a15c58b57ba (patch)
tree473463fd17c6791b5dc5496470caee0e3aaf6163 /contrib
parent5ca8c28cd8c725b81781201cfdb5f9969396f934 (diff)
parenteff4ff4791c83686dfc7251c9ab3fe8ab9e60f0e (diff)
libarchive: merge from vendor branch
Libarchive 3.7.7 Security fixes: #2158 rpm: calculate huge header sizes correctly #2160 util: fix out of boundary access in mktemp functions #2168 uu: stop processing if lines are too long #2174 lzop: prevent integer overflow #2172 rar4: protect copy_from_lzss_window_to_unp() (CVE-2024-20696) #2175 unzip: unify EOF handling #2179 rar4: fix out of boundary access with large files #2203 rar4: fix OOB access with unicode filenames #2210 rar4: add boundary checks to rgb filter #2248 rar4: fix OOB in delta filter #2249 rar4: fix OOB in audio filter #2256 fix multiple vulnerabilities identified by SAST #2258 cpio: ignore out-of-range gid/uid/size/ino and harden AFIO parsing #2265 rar5: clear 'data ready' cache on window buffer reallocs #2269 rar4: fix CVE-2024-26256 (CVE-2024-26256) #2330 iso: be more cautious about parsing ISO-9660 timestamps #2343 tar: clean up linkpath between entries #2364 tar: don't crash on truncated tar archives #2366 gzip: prevent a hang when processing a malformed gzip inside a gzip #2377 tar: fix two leaks in tar header parsing Important bugfixes: #2096 rar5: report encrypted entries #2150 xar: fix another infinite loop and expat error handling #2173 shar: check strdup return value #2161 lha: fix integer truncation on 32-bit systems #2338 tar: fix memory leaks when processing symlinks or parsing pax headers #2245 7zip: fix issue when skipping first file in 7zip archive that is a multiple of 65536 bytes #2252 7-zip: read/write symlink paths as UTF-8 #2259 rar5: don't try to read rediculously long names #2290 ar: fix archive entries having no type #2360 tar: fix truncation of entry pathnames in specific archives CVE: CVE-2024-20696, CVE-2024-26256 PR: 282047 (exp-run) MFC after: 1 week
Diffstat (limited to 'contrib')
-rw-r--r--contrib/libarchive/NEWS6
-rw-r--r--contrib/libarchive/cat/bsdcat.126
-rw-r--r--contrib/libarchive/cat/bsdcat.c22
-rw-r--r--contrib/libarchive/cat/bsdcat.h22
-rw-r--r--contrib/libarchive/cat/bsdcat_platform.h24
-rw-r--r--contrib/libarchive/cat/cmdline.c22
-rw-r--r--contrib/libarchive/cat/test/test.h22
-rw-r--r--contrib/libarchive/cat/test/test_0.c22
-rw-r--r--contrib/libarchive/cat/test/test_empty_gz.c22
-rw-r--r--contrib/libarchive/cat/test/test_empty_lz4.c22
-rw-r--r--contrib/libarchive/cat/test/test_empty_xz.c22
-rw-r--r--contrib/libarchive/cat/test/test_empty_zstd.c22
-rw-r--r--contrib/libarchive/cat/test/test_error.c22
-rw-r--r--contrib/libarchive/cat/test/test_error_mixed.c22
-rw-r--r--contrib/libarchive/cat/test/test_expand_Z.c22
-rw-r--r--contrib/libarchive/cat/test/test_expand_bz2.c22
-rw-r--r--contrib/libarchive/cat/test/test_expand_gz.c22
-rw-r--r--contrib/libarchive/cat/test/test_expand_lz4.c22
-rw-r--r--contrib/libarchive/cat/test/test_expand_mixed.c22
-rw-r--r--contrib/libarchive/cat/test/test_expand_plain.c22
-rw-r--r--contrib/libarchive/cat/test/test_expand_xz.c22
-rw-r--r--contrib/libarchive/cat/test/test_expand_zstd.c22
-rw-r--r--contrib/libarchive/cat/test/test_help.c22
-rw-r--r--contrib/libarchive/cat/test/test_stdin.c22
-rw-r--r--contrib/libarchive/cat/test/test_version.c22
-rw-r--r--contrib/libarchive/cpio/bsdcpio.124
-rw-r--r--contrib/libarchive/cpio/cmdline.c76
-rw-r--r--contrib/libarchive/cpio/cpio.c70
-rw-r--r--contrib/libarchive/cpio/cpio.h30
-rw-r--r--contrib/libarchive/cpio/cpio_platform.h22
-rw-r--r--contrib/libarchive/cpio/test/test.h22
-rw-r--r--contrib/libarchive/cpio/test/test_0.c22
-rw-r--r--contrib/libarchive/cpio/test/test_basic.c22
-rw-r--r--contrib/libarchive/cpio/test/test_cmdline.c22
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_Z.c22
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_absolute_paths.c53
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_bz2.c22
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_grz.c22
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_gz.c22
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_lrz.c22
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_lz.c22
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_lz4.c22
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_lzma.c22
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_lzo.c22
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_xz.c22
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_zstd.c22
-rw-r--r--contrib/libarchive/cpio/test/test_format_newc.c28
-rw-r--r--contrib/libarchive/cpio/test/test_gcpio_compat.c22
-rw-r--r--contrib/libarchive/cpio/test/test_missing_file.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_0.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_B_upper.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_C_upper.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_J_upper.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_L_upper.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_Z_upper.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_a.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_b64encode.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_c.c30
-rw-r--r--contrib/libarchive/cpio/test/test_option_d.c24
-rw-r--r--contrib/libarchive/cpio/test/test_option_f.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_grzip.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_help.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_l.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_lrzip.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_lz4.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_lzma.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_lzop.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_m.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_passphrase.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_t.c29
-rw-r--r--contrib/libarchive/cpio/test/test_option_u.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_uuencode.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_version.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_xz.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_y.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_z.c22
-rw-r--r--contrib/libarchive/cpio/test/test_option_zstd.c22
-rw-r--r--contrib/libarchive/cpio/test/test_owner_parse.c112
-rw-r--r--contrib/libarchive/cpio/test/test_passthrough_dotdot.c22
-rw-r--r--contrib/libarchive/cpio/test/test_passthrough_reverse.c22
-rw-r--r--contrib/libarchive/libarchive/archive.h4
-rw-r--r--contrib/libarchive/libarchive/archive_acl.c71
-rw-r--r--contrib/libarchive/libarchive/archive_acl_private.h2
-rw-r--r--contrib/libarchive/libarchive/archive_crc32.h5
-rw-r--r--contrib/libarchive/libarchive/archive_cryptor.c4
-rw-r--r--contrib/libarchive/libarchive/archive_cryptor_private.h2
-rw-r--r--contrib/libarchive/libarchive/archive_entry.c300
-rw-r--r--contrib/libarchive/libarchive/archive_entry.h8
-rw-r--r--contrib/libarchive/libarchive/archive_entry_link_resolver.c15
-rw-r--r--contrib/libarchive/libarchive/archive_entry_perms.31
-rw-r--r--contrib/libarchive/libarchive/archive_entry_private.h4
-rw-r--r--contrib/libarchive/libarchive/archive_entry_sparse.c2
-rw-r--r--contrib/libarchive/libarchive/archive_entry_xattr.c2
-rw-r--r--contrib/libarchive/libarchive/archive_hmac.c2
-rw-r--r--contrib/libarchive/libarchive/archive_hmac_private.h2
-rw-r--r--contrib/libarchive/libarchive/archive_match.c2
-rw-r--r--contrib/libarchive/libarchive/archive_openssl_evp_private.h2
-rw-r--r--contrib/libarchive/libarchive/archive_openssl_hmac_private.h2
-rw-r--r--contrib/libarchive/libarchive/archive_ppmd7.c2
-rw-r--r--contrib/libarchive/libarchive/archive_ppmd8.c7
-rw-r--r--contrib/libarchive/libarchive/archive_private.h6
-rw-r--r--contrib/libarchive/libarchive/archive_read.c8
-rw-r--r--contrib/libarchive/libarchive/archive_read_append_filter.c8
-rw-r--r--contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c1
-rw-r--r--contrib/libarchive/libarchive/archive_read_disk_posix.c2
-rw-r--r--contrib/libarchive/libarchive/archive_read_extract2.c2
-rw-r--r--contrib/libarchive/libarchive/archive_read_open_fd.c2
-rw-r--r--contrib/libarchive/libarchive/archive_read_open_file.c2
-rw-r--r--contrib/libarchive/libarchive/archive_read_open_filename.c4
-rw-r--r--contrib/libarchive/libarchive/archive_read_open_memory.c2
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_bzip2.c4
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_compress.c2
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_gzip.c18
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_lz4.c6
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_lzop.c5
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_program.c6
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_rpm.c45
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_uu.c16
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_xz.c4
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_zstd.c4
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_7zip.c93
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_ar.c10
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_cab.c12
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_cpio.c32
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_iso9660.c305
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_lha.c11
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_mtree.c2
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_rar.c128
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_rar5.c171
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_raw.c2
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_tar.c2203
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_xar.c32
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_zip.c45
-rw-r--r--contrib/libarchive/libarchive/archive_string.c86
-rw-r--r--contrib/libarchive/libarchive/archive_util.c16
-rw-r--r--contrib/libarchive/libarchive/archive_write.c19
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c6
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c5
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_compress.c4
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_gzip.c3
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_uuencode.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_xz.c5
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_zstd.c3
-rw-r--r--contrib/libarchive/libarchive/archive_write_disk_posix.c16
-rw-r--r--contrib/libarchive/libarchive/archive_write_open_fd.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_open_file.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_open_filename.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_open_memory.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_7zip.c16
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_ar.c6
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_cpio_binary.c5
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_cpio_newc.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_cpio_odc.c5
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_gnutar.c6
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_iso9660.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_pax.c24
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_raw.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_shar.c10
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_ustar.c8
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_v7tar.c4
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_xar.c26
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_zip.c10
-rw-r--r--contrib/libarchive/libarchive/test/test_7zip_filename_encoding.c100
-rw-r--r--contrib/libarchive/libarchive/test/test_ar_mode.c40
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_match_time.c60
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_read.c63
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_read_multiple_data_objects.c23
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_string.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_string_conversion.c135
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_write_add_filter_by_name.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_lzip.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_solaris_pax_sparse.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_entry.c14
-rw-r--r--contrib/libarchive/libarchive/test/test_gnutar_filename_encoding.c102
-rw-r--r--contrib/libarchive/libarchive/test/test_link_resolver.c45
-rw-r--r--contrib/libarchive/libarchive/test/test_pax_filename_encoding.c152
-rw-r--r--contrib/libarchive/libarchive/test/test_read_filter_gzip_recursive.c50
-rw-r--r--contrib/libarchive/libarchive/test/test_read_filter_gzip_recursive.gz.uu19
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip.c44
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip_extract_second.7z.uu11
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_afio.c30
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_huge_rpm.c50
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_huge_rpm.rpm.uu244
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_iso_3.iso.Z.uu40
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_iso_Z.c122
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_mtree.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar4_encrypted.rar.uu10
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar4_encrypted_filenames.rar.uu14
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar4_solid_encrypted.rar.uu11
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar4_solid_encrypted_filenames.rar.uu13
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5.c39
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_data_ready_pointer_leak.rar.uu28
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_encrypted.rar.uu12
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_encrypted_filenames.rar.uu19
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_solid_encrypted.rar.uu14
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_solid_encrypted_filenames.rar.uu18
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_encryption.c176
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_tar.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_tar_pax_large_attr.c65
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_tar_pax_large_attr.tar.Z.uu149
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_xar.c37
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_xar_duplicate_filename_node.xar.uu14
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_nested.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_traditional_encryption_data.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes_large.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_truncated_filter.c4
-rw-r--r--contrib/libarchive/libarchive/test/test_sparse_basic.c17
-rw-r--r--contrib/libarchive/libarchive/test/test_tar_large.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_ustar_filename_encoding.c102
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk_secure_noabsolutepaths.c88
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_b64encode.c4
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_bzip2.c4
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_compress.c4
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_gzip.c4
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_gzip_timestamp.c4
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_lrzip.c4
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_lz4.c8
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_lzip.c4
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_lzma.c4
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_lzop.c4
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_uuencode.c4
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_xz.c4
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_zstd.c12
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_iso9660_filename.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_zip.c6
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_zip_entry_size_unset.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_zip_large.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_zip_stream.c5
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_zip_windows_path.c100
-rw-r--r--contrib/libarchive/libarchive/test/test_zip_filename_encoding.c95
-rw-r--r--contrib/libarchive/tar/bsdtar.124
-rw-r--r--contrib/libarchive/tar/bsdtar.c25
-rw-r--r--contrib/libarchive/tar/bsdtar.h22
-rw-r--r--contrib/libarchive/tar/bsdtar_platform.h24
-rw-r--r--contrib/libarchive/tar/cmdline.c22
-rw-r--r--contrib/libarchive/tar/creation_set.c24
-rw-r--r--contrib/libarchive/tar/read.c22
-rw-r--r--contrib/libarchive/tar/subst.c22
-rw-r--r--contrib/libarchive/tar/test/test.h22
-rw-r--r--contrib/libarchive/tar/test/test_0.c22
-rw-r--r--contrib/libarchive/tar/test/test_basic.c22
-rw-r--r--contrib/libarchive/tar/test/test_copy.c58
-rw-r--r--contrib/libarchive/tar/test/test_empty_mtree.c22
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_Z.c22
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_bz2.c22
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_grz.c22
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_gz.c22
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_lrz.c22
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_lz.c22
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_lz4.c22
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_lzma.c22
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_lzo.c22
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_xz.c22
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_zstd.c22
-rw-r--r--contrib/libarchive/tar/test/test_format_newc.c22
-rw-r--r--contrib/libarchive/tar/test/test_help.c22
-rw-r--r--contrib/libarchive/tar/test/test_leading_slash.c22
-rw-r--r--contrib/libarchive/tar/test/test_missing_file.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_C_mtree.c30
-rw-r--r--contrib/libarchive/tar/test/test_option_C_upper.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_H_upper.c40
-rw-r--r--contrib/libarchive/tar/test/test_option_L_upper.c40
-rw-r--r--contrib/libarchive/tar/test/test_option_O_upper.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_P.c82
-rw-r--r--contrib/libarchive/tar/test/test_option_T_upper.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_U_upper.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_X_upper.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_a.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_acls.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_b.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_b64encode.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_exclude.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_exclude_vcs.c24
-rw-r--r--contrib/libarchive/tar/test/test_option_fflags.c24
-rw-r--r--contrib/libarchive/tar/test/test_option_gid_gname.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_group.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_grzip.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_ignore_zeros.c31
-rw-r--r--contrib/libarchive/tar/test/test_option_j.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_k.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_keep_newer_files.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_lrzip.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_lz4.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_lzma.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_lzop.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_n.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_newer_than.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_nodump.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_older_than.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_owner.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_passphrase.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_q.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_r.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_s.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_safe_writes.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_uid_uname.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_uuencode.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_xattrs.c24
-rw-r--r--contrib/libarchive/tar/test/test_option_xz.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_z.c22
-rw-r--r--contrib/libarchive/tar/test/test_option_zstd.c22
-rw-r--r--contrib/libarchive/tar/test/test_patterns.c22
-rw-r--r--contrib/libarchive/tar/test/test_print_longpath.c22
-rw-r--r--contrib/libarchive/tar/test/test_stdio.c22
-rw-r--r--contrib/libarchive/tar/test/test_strip_components.c22
-rw-r--r--contrib/libarchive/tar/test/test_symlink_dir.c22
-rw-r--r--contrib/libarchive/tar/test/test_version.c22
-rw-r--r--contrib/libarchive/tar/util.c42
-rw-r--r--contrib/libarchive/tar/write.c35
-rw-r--r--contrib/libarchive/test_utils/test_common.h5
-rw-r--r--contrib/libarchive/test_utils/test_main.c101
-rw-r--r--contrib/libarchive/unzip/bsdunzip.125
-rw-r--r--contrib/libarchive/unzip/bsdunzip.c49
-rw-r--r--contrib/libarchive/unzip/bsdunzip.h22
-rw-r--r--contrib/libarchive/unzip/bsdunzip_platform.h24
-rw-r--r--contrib/libarchive/unzip/cmdline.c22
-rw-r--r--contrib/libarchive/unzip/la_getline.c26
-rw-r--r--contrib/libarchive/unzip/test/test.h22
-rw-r--r--contrib/libarchive/unzip/test/test_0.c22
-rw-r--r--contrib/libarchive/unzip/test/test_C.c23
-rw-r--r--contrib/libarchive/unzip/test/test_I.c40
-rw-r--r--contrib/libarchive/unzip/test/test_L.c23
-rw-r--r--contrib/libarchive/unzip/test/test_P_encryption.c25
-rw-r--r--contrib/libarchive/unzip/test/test_Z1.c23
-rw-r--r--contrib/libarchive/unzip/test/test_basic.c23
-rw-r--r--contrib/libarchive/unzip/test/test_d.c23
-rw-r--r--contrib/libarchive/unzip/test/test_doubledash.c23
-rw-r--r--contrib/libarchive/unzip/test/test_glob.c23
-rw-r--r--contrib/libarchive/unzip/test/test_j.c23
-rw-r--r--contrib/libarchive/unzip/test/test_n.c25
-rw-r--r--contrib/libarchive/unzip/test/test_not_exist.c25
-rw-r--r--contrib/libarchive/unzip/test/test_o.c25
-rw-r--r--contrib/libarchive/unzip/test/test_p.c23
-rw-r--r--contrib/libarchive/unzip/test/test_q.c23
-rw-r--r--contrib/libarchive/unzip/test/test_singlefile.c23
-rw-r--r--contrib/libarchive/unzip/test/test_t.c23
-rw-r--r--contrib/libarchive/unzip/test/test_t_bad.c23
-rw-r--r--contrib/libarchive/unzip/test/test_version.c22
-rw-r--r--contrib/libarchive/unzip/test/test_x.c23
340 files changed, 5822 insertions, 5324 deletions
diff --git a/contrib/libarchive/NEWS b/contrib/libarchive/NEWS
index ebdbb2a978ec..6af50e4e4033 100644
--- a/contrib/libarchive/NEWS
+++ b/contrib/libarchive/NEWS
@@ -1,3 +1,9 @@
+Oct 13, 2024: libarchive 3.7.7 released
+
+Sep 23, 2024: libarchive 3.7.6 released
+
+Sep 13, 2024: libarchive 3.7.5 released
+
Apr 26, 2024: libarchive 3.7.4 released
Apr 08, 2024: libarchive 3.7.3 released
diff --git a/contrib/libarchive/cat/bsdcat.1 b/contrib/libarchive/cat/bsdcat.1
index 9fa66d60e1e6..b34a0c1c988d 100644
--- a/contrib/libarchive/cat/bsdcat.1
+++ b/contrib/libarchive/cat/bsdcat.1
@@ -1,26 +1,8 @@
-.\" Copyright (c) 2011-2014, Mike Kazantsev
-.\" All rights reserved.
.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
+.\" SPDX-License-Identifier: BSD-2-Clause
.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
+.\" Copyright (c) 2011-2014, Mike Kazantsev
+.\" All rights reserved.
.\"
.Dd March 1, 2014
.Dt BSDCAT 1
@@ -39,7 +21,7 @@ expands files to standard output.
.Nm
typically takes a filename as an argument or reads standard input when used in a
pipe.
-In both cases decompressed data it written to standard output.
+In both cases decompressed data is written to standard output.
.Sh EXAMPLES
To decompress a file:
.Pp
diff --git a/contrib/libarchive/cat/bsdcat.c b/contrib/libarchive/cat/bsdcat.c
index 19d3de65cea4..731621fa9b75 100644
--- a/contrib/libarchive/cat/bsdcat.c
+++ b/contrib/libarchive/cat/bsdcat.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2011-2014, Mike Kazantsev
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "bsdcat_platform.h"
diff --git a/contrib/libarchive/cat/bsdcat.h b/contrib/libarchive/cat/bsdcat.h
index 504757a44040..6726f78e8453 100644
--- a/contrib/libarchive/cat/bsdcat.h
+++ b/contrib/libarchive/cat/bsdcat.h
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2014, Mike Kazantsev
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef BSDCAT_H_INCLUDED
diff --git a/contrib/libarchive/cat/bsdcat_platform.h b/contrib/libarchive/cat/bsdcat_platform.h
index 78a6113e6f01..940214f2ecd6 100644
--- a/contrib/libarchive/cat/bsdcat_platform.h
+++ b/contrib/libarchive/cat/bsdcat_platform.h
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
@@ -58,7 +40,7 @@
#define __LA_NORETURN __attribute__((__noreturn__))
#elif defined(_MSC_VER)
#define __LA_NORETURN __declspec(noreturn)
-#else
+#else
#define __LA_NORETURN
#endif
diff --git a/contrib/libarchive/cat/cmdline.c b/contrib/libarchive/cat/cmdline.c
index 851b63de06e5..8ecd74aa95e4 100644
--- a/contrib/libarchive/cat/cmdline.c
+++ b/contrib/libarchive/cat/cmdline.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2008 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
diff --git a/contrib/libarchive/cat/test/test.h b/contrib/libarchive/cat/test/test.h
index ec83d476b6b8..b852437ca430 100644
--- a/contrib/libarchive/cat/test/test.h
+++ b/contrib/libarchive/cat/test/test.h
@@ -1,26 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2006 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/* Every test program should #include "test.h" as the first thing. */
diff --git a/contrib/libarchive/cat/test/test_0.c b/contrib/libarchive/cat/test/test_0.c
index c806c24356c0..07f5fc60cf35 100644
--- a/contrib/libarchive/cat/test/test_0.c
+++ b/contrib/libarchive/cat/test/test_0.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cat/test/test_empty_gz.c b/contrib/libarchive/cat/test/test_empty_gz.c
index 6181f93b4d28..0ca835627bf5 100644
--- a/contrib/libarchive/cat/test/test_empty_gz.c
+++ b/contrib/libarchive/cat/test/test_empty_gz.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2014 Sebastian Freundt
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cat/test/test_empty_lz4.c b/contrib/libarchive/cat/test/test_empty_lz4.c
index 9d98e9cfd390..ed4f2894fb4f 100644
--- a/contrib/libarchive/cat/test/test_empty_lz4.c
+++ b/contrib/libarchive/cat/test/test_empty_lz4.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2014 Sebastian Freundt
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cat/test/test_empty_xz.c b/contrib/libarchive/cat/test/test_empty_xz.c
index 368ffb574e50..591ab2410ce4 100644
--- a/contrib/libarchive/cat/test/test_empty_xz.c
+++ b/contrib/libarchive/cat/test/test_empty_xz.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2014 Sebastian Freundt
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cat/test/test_empty_zstd.c b/contrib/libarchive/cat/test/test_empty_zstd.c
index c2d5ea106fa1..b0f25bf1cacd 100644
--- a/contrib/libarchive/cat/test/test_empty_zstd.c
+++ b/contrib/libarchive/cat/test/test_empty_zstd.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2017 Sean Purcell
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cat/test/test_error.c b/contrib/libarchive/cat/test/test_error.c
index 918af01be2dc..3e1a74a38820 100644
--- a/contrib/libarchive/cat/test/test_error.c
+++ b/contrib/libarchive/cat/test/test_error.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2014 Mike Kazantsev
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cat/test/test_error_mixed.c b/contrib/libarchive/cat/test/test_error_mixed.c
index 7d94fce467aa..01cb9f0520dd 100644
--- a/contrib/libarchive/cat/test/test_error_mixed.c
+++ b/contrib/libarchive/cat/test/test_error_mixed.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2014 Mike Kazantsev
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cat/test/test_expand_Z.c b/contrib/libarchive/cat/test/test_expand_Z.c
index d48d4972ebee..f34f38ce0385 100644
--- a/contrib/libarchive/cat/test/test_expand_Z.c
+++ b/contrib/libarchive/cat/test/test_expand_Z.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2014 Mike Kazantsev
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cat/test/test_expand_bz2.c b/contrib/libarchive/cat/test/test_expand_bz2.c
index 82f074b341c8..8f3bb3f24a46 100644
--- a/contrib/libarchive/cat/test/test_expand_bz2.c
+++ b/contrib/libarchive/cat/test/test_expand_bz2.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2014 Mike Kazantsev
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cat/test/test_expand_gz.c b/contrib/libarchive/cat/test/test_expand_gz.c
index 18b715c66ebb..1f6f1cfddbac 100644
--- a/contrib/libarchive/cat/test/test_expand_gz.c
+++ b/contrib/libarchive/cat/test/test_expand_gz.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2014 Mike Kazantsev
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cat/test/test_expand_lz4.c b/contrib/libarchive/cat/test/test_expand_lz4.c
index 1b1d2106459d..efc2baad59ed 100644
--- a/contrib/libarchive/cat/test/test_expand_lz4.c
+++ b/contrib/libarchive/cat/test/test_expand_lz4.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2014 Mike Kazantsev
* Copyright (c) 2012, 2014 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cat/test/test_expand_mixed.c b/contrib/libarchive/cat/test/test_expand_mixed.c
index fa2235719df6..eee22271af1b 100644
--- a/contrib/libarchive/cat/test/test_expand_mixed.c
+++ b/contrib/libarchive/cat/test/test_expand_mixed.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2014 Mike Kazantsev
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cat/test/test_expand_plain.c b/contrib/libarchive/cat/test/test_expand_plain.c
index 8b2276982885..15831105bb24 100644
--- a/contrib/libarchive/cat/test/test_expand_plain.c
+++ b/contrib/libarchive/cat/test/test_expand_plain.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2014 Mike Kazantsev
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cat/test/test_expand_xz.c b/contrib/libarchive/cat/test/test_expand_xz.c
index 99f87bf4c66b..050d14af2970 100644
--- a/contrib/libarchive/cat/test/test_expand_xz.c
+++ b/contrib/libarchive/cat/test/test_expand_xz.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2014 Mike Kazantsev
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cat/test/test_expand_zstd.c b/contrib/libarchive/cat/test/test_expand_zstd.c
index 23d918252ad1..a9ed1f127f91 100644
--- a/contrib/libarchive/cat/test/test_expand_zstd.c
+++ b/contrib/libarchive/cat/test/test_expand_zstd.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2017 Sean Purcell
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cat/test/test_help.c b/contrib/libarchive/cat/test/test_help.c
index 4ed47a076b29..25b5b4bf80ca 100644
--- a/contrib/libarchive/cat/test/test_help.c
+++ b/contrib/libarchive/cat/test/test_help.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cat/test/test_stdin.c b/contrib/libarchive/cat/test/test_stdin.c
index cea5eb0ec1b3..93ee42310041 100644
--- a/contrib/libarchive/cat/test/test_stdin.c
+++ b/contrib/libarchive/cat/test/test_stdin.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2017 Sean Purcell
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cat/test/test_version.c b/contrib/libarchive/cat/test/test_version.c
index 51a4fd4d9a01..612282b7a2ff 100644
--- a/contrib/libarchive/cat/test/test_version.c
+++ b/contrib/libarchive/cat/test/test_version.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2017 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/bsdcpio.1 b/contrib/libarchive/cpio/bsdcpio.1
index c52764a8c4f7..9dc7d660b448 100644
--- a/contrib/libarchive/cpio/bsdcpio.1
+++ b/contrib/libarchive/cpio/bsdcpio.1
@@ -1,26 +1,8 @@
-.\" Copyright (c) 2003-2007 Tim Kientzle
-.\" All rights reserved.
.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
+.\" SPDX-License-Identifier: BSD-2-Clause
.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
+.\" Copyright (c) 2003-2007 Tim Kientzle
+.\" All rights reserved.
.\"
.Dd September 16, 2014
.Dt CPIO 1
diff --git a/contrib/libarchive/cpio/cmdline.c b/contrib/libarchive/cpio/cmdline.c
index ab25492ede48..c67519947dbc 100644
--- a/contrib/libarchive/cpio/cmdline.c
+++ b/contrib/libarchive/cpio/cmdline.c
@@ -1,27 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
@@ -308,17 +289,22 @@ again:
* Returns NULL if no error, otherwise returns error string for display.
*
*/
-const char *
-owner_parse(const char *spec, int *uid, int *gid)
+int
+owner_parse(const char *spec, struct cpio_owner *owner, const char **errmsg)
{
static char errbuff[128];
const char *u, *ue, *g;
- *uid = -1;
- *gid = -1;
+ owner->uid = -1;
+ owner->gid = -1;
- if (spec[0] == '\0')
- return ("Invalid empty user/group spec");
+ owner->uname = NULL;
+ owner->gname = NULL;
+
+ if (spec[0] == '\0') {
+ *errmsg = "Invalid empty user/group spec";
+ return (-1);
+ }
/*
* Split spec into [user][:.][group]
@@ -345,25 +331,31 @@ owner_parse(const char *spec, int *uid, int *gid)
char *user;
struct passwd *pwent;
- user = (char *)malloc(ue - u + 1);
+ user = malloc(ue - u + 1);
if (user == NULL)
- return ("Couldn't allocate memory");
+ goto alloc_error;
memcpy(user, u, ue - u);
user[ue - u] = '\0';
if ((pwent = getpwnam(user)) != NULL) {
- *uid = pwent->pw_uid;
+ owner->uid = pwent->pw_uid;
+ owner->uname = strdup(pwent->pw_name);
+ if (owner->uname == NULL) {
+ free(user);
+ goto alloc_error;
+ }
if (*ue != '\0')
- *gid = pwent->pw_gid;
+ owner->gid = pwent->pw_gid;
} else {
char *end;
errno = 0;
- *uid = (int)strtoul(user, &end, 10);
+ owner->uid = (int)strtoul(user, &end, 10);
if (errno || *end != '\0') {
snprintf(errbuff, sizeof(errbuff),
"Couldn't lookup user ``%s''", user);
errbuff[sizeof(errbuff) - 1] = '\0';
free(user);
- return (errbuff);
+ *errmsg = errbuff;
+ return (-1);
}
}
free(user);
@@ -372,18 +364,28 @@ owner_parse(const char *spec, int *uid, int *gid)
if (*g != '\0') {
struct group *grp;
if ((grp = getgrnam(g)) != NULL) {
- *gid = grp->gr_gid;
+ owner->gid = grp->gr_gid;
+ owner->gname = strdup(grp->gr_name);
+ if (owner->gname == NULL) {
+ free(owner->uname);
+ owner->uname = NULL;
+ goto alloc_error;
+ }
} else {
char *end;
errno = 0;
- *gid = (int)strtoul(g, &end, 10);
+ owner->gid = (int)strtoul(g, &end, 10);
if (errno || *end != '\0') {
snprintf(errbuff, sizeof(errbuff),
"Couldn't lookup group ``%s''", g);
errbuff[sizeof(errbuff) - 1] = '\0';
- return (errbuff);
+ *errmsg = errbuff;
+ return (-1);
}
}
}
- return (NULL);
+ return (0);
+alloc_error:
+ *errmsg = "Couldn't allocate memory";
+ return (-1);
}
diff --git a/contrib/libarchive/cpio/cpio.c b/contrib/libarchive/cpio/cpio.c
index c9af535f6d0a..6bc6eb22e967 100644
--- a/contrib/libarchive/cpio/cpio.c
+++ b/contrib/libarchive/cpio/cpio.c
@@ -1,27 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
@@ -132,9 +113,9 @@ main(int argc, char *argv[])
static char buff[16384];
struct cpio _cpio; /* Allocated on stack. */
struct cpio *cpio;
+ struct cpio_owner owner;
const char *errmsg;
char *tptr;
- int uid, gid;
int opt, t;
cpio = &_cpio;
@@ -142,6 +123,7 @@ main(int argc, char *argv[])
cpio->buff = buff;
cpio->buff_size = sizeof(buff);
+
#if defined(HAVE_SIGACTION) && defined(SIGPIPE)
{ /* Ignore SIGPIPE signals. */
struct sigaction sa;
@@ -161,7 +143,9 @@ main(int argc, char *argv[])
#endif
cpio->uid_override = -1;
+ cpio->uname_override = NULL;
cpio->gid_override = -1;
+ cpio->gname_override = NULL;
cpio->argv = argv;
cpio->argc = argc;
cpio->mode = '\0';
@@ -320,21 +304,21 @@ main(int argc, char *argv[])
cpio->quiet = 1;
break;
case 'R': /* GNU cpio, also --owner */
- /* TODO: owner_parse should return uname/gname
- * also; use that to set [ug]name_override. */
- errmsg = owner_parse(cpio->argument, &uid, &gid);
- if (errmsg) {
+ errmsg = NULL;
+ if (owner_parse(cpio->argument, &owner, &errmsg) != 0) {
+ if (!errmsg)
+ errmsg = "Error parsing owner";
lafe_warnc(-1, "%s", errmsg);
usage();
}
- if (uid != -1) {
- cpio->uid_override = uid;
- cpio->uname_override = NULL;
- }
- if (gid != -1) {
- cpio->gid_override = gid;
- cpio->gname_override = NULL;
- }
+ if (owner.uid != -1)
+ cpio->uid_override = owner.uid;
+ if (owner.uname != NULL)
+ cpio->uname_override = owner.uname;
+ if (owner.gid != -1)
+ cpio->gid_override = owner.gid;
+ if (owner.gname != NULL)
+ cpio->gname_override = owner.gname;
break;
case 'r': /* POSIX 1997 */
cpio->option_rename = 1;
@@ -439,11 +423,14 @@ main(int argc, char *argv[])
}
archive_match_free(cpio->matching);
- free_cache(cpio->gname_cache);
free_cache(cpio->uname_cache);
+ free(cpio->uname_override);
+ free_cache(cpio->gname_cache);
+ free(cpio->gname_override);
archive_read_close(cpio->archive_read_disk);
archive_read_free(cpio->archive_read_disk);
free(cpio->destdir);
+
passphrase_free(cpio->ppbuff);
return (cpio->return_value);
}
@@ -728,14 +715,14 @@ file_to_archive(struct cpio *cpio, const char *srcpath)
return (r);
}
- if (cpio->uid_override >= 0) {
+ if (cpio->uid_override >= 0)
archive_entry_set_uid(entry, cpio->uid_override);
+ if (cpio->gname_override != NULL)
archive_entry_set_uname(entry, cpio->uname_override);
- }
- if (cpio->gid_override >= 0) {
+ if (cpio->gid_override >= 0)
archive_entry_set_gid(entry, cpio->gid_override);
+ if (cpio->gname_override != NULL)
archive_entry_set_gname(entry, cpio->gname_override);
- }
/*
* Generate a destination path for this entry.
@@ -1015,13 +1002,18 @@ mode_in(struct cpio *cpio)
fprintf(stderr, ".");
if (cpio->uid_override >= 0)
archive_entry_set_uid(entry, cpio->uid_override);
+ if (cpio->uname_override != NULL)
+ archive_entry_set_uname(entry, cpio->uname_override);
if (cpio->gid_override >= 0)
archive_entry_set_gid(entry, cpio->gid_override);
+ if (cpio->gname_override != NULL)
+ archive_entry_set_gname(entry, cpio->gname_override);
r = archive_write_header(ext, entry);
if (r != ARCHIVE_OK) {
fprintf(stderr, "%s: %s\n",
archive_entry_pathname(entry),
archive_error_string(ext));
+ cpio->return_value = 1;
} else if (!archive_entry_size_is_set(entry)
|| archive_entry_size(entry) > 0) {
r = extract_data(a, ext);
diff --git a/contrib/libarchive/cpio/cpio.h b/contrib/libarchive/cpio/cpio.h
index 3e97c0900b73..9bc631b544fe 100644
--- a/contrib/libarchive/cpio/cpio.h
+++ b/contrib/libarchive/cpio/cpio.h
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef CPIO_H_INCLUDED
@@ -94,8 +76,14 @@ struct cpio {
char *ppbuff;
};
-const char *owner_parse(const char *, int *, int *);
+struct cpio_owner {
+ int uid;
+ int gid;
+ char *uname;
+ char *gname;
+};
+int owner_parse(const char *, struct cpio_owner *, const char **);
/* Fake short equivalents for long options that otherwise lack them. */
enum {
diff --git a/contrib/libarchive/cpio/cpio_platform.h b/contrib/libarchive/cpio/cpio_platform.h
index 263404b40dab..c097fc62c58d 100644
--- a/contrib/libarchive/cpio/cpio_platform.h
+++ b/contrib/libarchive/cpio/cpio_platform.h
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
diff --git a/contrib/libarchive/cpio/test/test.h b/contrib/libarchive/cpio/test/test.h
index f8f3a4038b57..1bbbb9d40d66 100644
--- a/contrib/libarchive/cpio/test/test.h
+++ b/contrib/libarchive/cpio/test/test.h
@@ -1,26 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2017 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/* Every test program should #include "test.h" as the first thing. */
diff --git a/contrib/libarchive/cpio/test/test_0.c b/contrib/libarchive/cpio/test/test_0.c
index c09df5e137c4..f6166456a6a0 100644
--- a/contrib/libarchive/cpio/test/test_0.c
+++ b/contrib/libarchive/cpio/test/test_0.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_basic.c b/contrib/libarchive/cpio/test/test_basic.c
index 993d555b831c..8b8e8bb0f0ec 100644
--- a/contrib/libarchive/cpio/test/test_basic.c
+++ b/contrib/libarchive/cpio/test/test_basic.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_cmdline.c b/contrib/libarchive/cpio/test/test_cmdline.c
index f4e05ee58599..e4397b14e7f6 100644
--- a/contrib/libarchive/cpio/test/test_cmdline.c
+++ b/contrib/libarchive/cpio/test/test_cmdline.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2009 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_Z.c b/contrib/libarchive/cpio/test/test_extract_cpio_Z.c
index 257d70d04211..31fc271a5674 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_Z.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_Z.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_absolute_paths.c b/contrib/libarchive/cpio/test/test_extract_cpio_absolute_paths.c
new file mode 100644
index 000000000000..51650bc00f5a
--- /dev/null
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_absolute_paths.c
@@ -0,0 +1,53 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2024 Mostyn Bramley-Moore <mostyn@antipode.se>
+ */
+
+#include "test.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#define UNLINK _unlink
+#else
+#define UNLINK unlink
+#endif
+
+DEFINE_TEST(test_extract_cpio_absolute_paths)
+{
+ int r;
+
+ // Create an absolute path for a test file inside testworkdir.
+ const char *entry_suffix = "/cpio-noabs";
+ size_t entry_suffix_length = strlen(entry_suffix);
+ size_t testworkdir_length = strlen(testworkdir);
+ size_t temp_absolute_file_name_length = testworkdir_length + entry_suffix_length;
+ char *temp_absolute_file_name = calloc(1, temp_absolute_file_name_length + 1); // +1 for null character.
+ assertEqualInt(snprintf(temp_absolute_file_name, temp_absolute_file_name_length + 1, "%s%s", testworkdir, entry_suffix),
+ temp_absolute_file_name_length);
+
+ // Create the file.
+ const char *sample_data = "test file from test_extract_cpio_absolute_paths";
+ assertMakeFile(temp_absolute_file_name, 0644, sample_data);
+
+ // Create an archive with the test file, using an absolute path.
+ assertMakeFile("filelist", 0644, temp_absolute_file_name);
+ r = systemf("%s -o < filelist > archive.cpio 2> stderr1.txt", testprog);
+ assertEqualInt(r, 0);
+
+ // Ensure that the temp file does not exist.
+ UNLINK(temp_absolute_file_name);
+
+ // We should refuse to create the absolute path without --insecure.
+ r = systemf("%s -i < archive.cpio 2> stderr2.txt", testprog);
+ assert(r != 0);
+ assertFileNotExists(temp_absolute_file_name);
+ UNLINK(temp_absolute_file_name); // Cleanup just in case.
+
+ // But if we specify --insecure then the absolute path should be created.
+ r = systemf("%s -i --insecure < archive.cpio 2> stderr3.txt", testprog);
+ assert(r == 0);
+ assertFileExists(temp_absolute_file_name);
+}
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_bz2.c b/contrib/libarchive/cpio/test/test_extract_cpio_bz2.c
index 08fe1fe53468..b66c08271837 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_bz2.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_bz2.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_grz.c b/contrib/libarchive/cpio/test/test_extract_cpio_grz.c
index 969b30e44de5..8cd3583e909d 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_grz.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_grz.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_gz.c b/contrib/libarchive/cpio/test/test_extract_cpio_gz.c
index 16296146f87e..bc1bd48df44a 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_gz.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_gz.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_lrz.c b/contrib/libarchive/cpio/test/test_extract_cpio_lrz.c
index 7ef213f74aac..fd124b29475c 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_lrz.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_lrz.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_lz.c b/contrib/libarchive/cpio/test/test_extract_cpio_lz.c
index bfdf87869b37..deacbbfbb9ba 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_lz.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_lz.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_lz4.c b/contrib/libarchive/cpio/test/test_extract_cpio_lz4.c
index f8cf5f8fab0d..06bd5f021246 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_lz4.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_lz4.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012,2014 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_lzma.c b/contrib/libarchive/cpio/test/test_extract_cpio_lzma.c
index 81fc3c236ab5..6d2f76fc855d 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_lzma.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_lzma.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_lzo.c b/contrib/libarchive/cpio/test/test_extract_cpio_lzo.c
index d54d4f712374..43f9dce1ce4b 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_lzo.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_lzo.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_xz.c b/contrib/libarchive/cpio/test/test_extract_cpio_xz.c
index faeea202e050..bdf8e8d918e9 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_xz.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_xz.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_zstd.c b/contrib/libarchive/cpio/test/test_extract_cpio_zstd.c
index 31421c3b60d7..67428813e6b4 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_zstd.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_zstd.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2017 Sean Purcell
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_format_newc.c b/contrib/libarchive/cpio/test/test_format_newc.c
index ee0087d4ca94..884b6c9c4da7 100644
--- a/contrib/libarchive/cpio/test/test_format_newc.c
+++ b/contrib/libarchive/cpio/test/test_format_newc.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
@@ -194,11 +176,11 @@ DEFINE_TEST(test_format_newc)
assertEqualMem(e + 0, "070701", 6); /* Magic */
ino = from_hex(e + 6, 8); /* ino */
#if defined(_WIN32) && !defined(__CYGWIN__)
- /* Group members bits and others bits do not work. */
+ /* Group members bits and others bits do not work. */
assertEqualInt(0x8180, from_hex(e + 14, 8) & 0xffc0); /* Mode */
#else
assertEqualInt(0x81a4, from_hex(e + 14, 8)); /* Mode */
-#endif
+#endif
#if defined(_WIN32)
uid = from_hex(e + 22, 8);
#else
@@ -308,7 +290,7 @@ DEFINE_TEST(test_format_newc)
failure("If these aren't the same, then the hardlink detection failed to match them.");
assertEqualInt(ino, from_hex(e + 6, 8)); /* ino */
#if defined(_WIN32) && !defined(__CYGWIN__)
- /* Group members bits and others bits do not work. */
+ /* Group members bits and others bits do not work. */
assertEqualInt(0x8180, from_hex(e + 14, 8) & 0xffc0); /* Mode */
#else
assertEqualInt(0x81a4, from_hex(e + 14, 8)); /* Mode */
diff --git a/contrib/libarchive/cpio/test/test_gcpio_compat.c b/contrib/libarchive/cpio/test/test_gcpio_compat.c
index 82c71ec3cd21..1765df6f058e 100644
--- a/contrib/libarchive/cpio/test/test_gcpio_compat.c
+++ b/contrib/libarchive/cpio/test/test_gcpio_compat.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_missing_file.c b/contrib/libarchive/cpio/test/test_missing_file.c
index 784d53cfe141..a9e8d6ba20ca 100644
--- a/contrib/libarchive/cpio/test/test_missing_file.c
+++ b/contrib/libarchive/cpio/test/test_missing_file.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2016 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_0.c b/contrib/libarchive/cpio/test/test_option_0.c
index fbe6f7ac4a85..76a2fae5c214 100644
--- a/contrib/libarchive/cpio/test/test_option_0.c
+++ b/contrib/libarchive/cpio/test/test_option_0.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2010 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_B_upper.c b/contrib/libarchive/cpio/test/test_option_B_upper.c
index 79dc91efb5ba..873220d991e4 100644
--- a/contrib/libarchive/cpio/test/test_option_B_upper.c
+++ b/contrib/libarchive/cpio/test/test_option_B_upper.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_C_upper.c b/contrib/libarchive/cpio/test/test_option_C_upper.c
index f9fd7e159339..9c854daebfb7 100644
--- a/contrib/libarchive/cpio/test/test_option_C_upper.c
+++ b/contrib/libarchive/cpio/test/test_option_C_upper.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_J_upper.c b/contrib/libarchive/cpio/test/test_option_J_upper.c
index f76d3b236913..1982267c79f5 100644
--- a/contrib/libarchive/cpio/test/test_option_J_upper.c
+++ b/contrib/libarchive/cpio/test/test_option_J_upper.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2009 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_L_upper.c b/contrib/libarchive/cpio/test/test_option_L_upper.c
index b6fb713f110f..1854b1d944e5 100644
--- a/contrib/libarchive/cpio/test/test_option_L_upper.c
+++ b/contrib/libarchive/cpio/test/test_option_L_upper.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_Z_upper.c b/contrib/libarchive/cpio/test/test_option_Z_upper.c
index aa408e4e548c..15f88944aa39 100644
--- a/contrib/libarchive/cpio/test/test_option_Z_upper.c
+++ b/contrib/libarchive/cpio/test/test_option_Z_upper.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2009 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_a.c b/contrib/libarchive/cpio/test/test_option_a.c
index 885eb12c80f5..e6b87948c65a 100644
--- a/contrib/libarchive/cpio/test/test_option_a.c
+++ b/contrib/libarchive/cpio/test/test_option_a.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2008 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
#if defined(HAVE_UTIME_H)
diff --git a/contrib/libarchive/cpio/test/test_option_b64encode.c b/contrib/libarchive/cpio/test/test_option_b64encode.c
index 501976c202a1..721a4a33c977 100644
--- a/contrib/libarchive/cpio/test/test_option_b64encode.c
+++ b/contrib/libarchive/cpio/test/test_option_b64encode.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_c.c b/contrib/libarchive/cpio/test/test_option_c.c
index 0b6bed2fac93..e8748449514b 100644
--- a/contrib/libarchive/cpio/test/test_option_c.c
+++ b/contrib/libarchive/cpio/test/test_option_c.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
@@ -119,9 +101,9 @@ DEFINE_TEST(test_option_c)
assert(is_octal(e, 76)); /* Entire header is octal digits. */
assertEqualMem(e + 0, "070707", 6); /* Magic */
assert(is_octal(e + 6, 6)); /* dev */
- dev = from_octal(e + 6, 6);
+ dev = (int)from_octal(e + 6, 6);
assert(is_octal(e + 12, 6)); /* ino */
- ino = from_octal(e + 12, 6);
+ ino = (int)from_octal(e + 12, 6);
#if defined(_WIN32) && !defined(__CYGWIN__)
/* Group members bits and others bits do not work. */
assertEqualMem(e + 18, "100666", 6); /* Mode */
@@ -129,10 +111,10 @@ DEFINE_TEST(test_option_c)
assertEqualMem(e + 18, "100644", 6); /* Mode */
#endif
if (uid < 0)
- uid = from_octal(e + 24, 6);
+ uid = (int)from_octal(e + 24, 6);
assertEqualInt(from_octal(e + 24, 6), uid); /* uid */
assert(is_octal(e + 30, 6)); /* gid */
- gid = from_octal(e + 30, 6);
+ gid = (int)from_octal(e + 30, 6);
assertEqualMem(e + 36, "000001", 6); /* nlink */
failure("file entries should not have rdev set (dev field was 0%o)",
dev);
diff --git a/contrib/libarchive/cpio/test/test_option_d.c b/contrib/libarchive/cpio/test/test_option_d.c
index b96430e4f37a..3ad6c0bd6dd8 100644
--- a/contrib/libarchive/cpio/test/test_option_d.c
+++ b/contrib/libarchive/cpio/test/test_option_d.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
@@ -44,7 +26,7 @@ DEFINE_TEST(test_option_d)
assertMakeDir("without-d", 0755);
assertChdir("without-d");
r = systemf("%s -i < ../archive.cpio >out 2>err", testprog);
- assertEqualInt(r, 0);
+ assert(r != 0);
assertEmptyFile("out");
/* And the file should not be restored. */
assertFileNotExists("dir/file");
diff --git a/contrib/libarchive/cpio/test/test_option_f.c b/contrib/libarchive/cpio/test/test_option_f.c
index 72383884ac1e..ee09b778a84c 100644
--- a/contrib/libarchive/cpio/test/test_option_f.c
+++ b/contrib/libarchive/cpio/test/test_option_f.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_grzip.c b/contrib/libarchive/cpio/test/test_option_grzip.c
index cd898cd9228f..6bf12b7de84b 100644
--- a/contrib/libarchive/cpio/test/test_option_grzip.c
+++ b/contrib/libarchive/cpio/test/test_option_grzip.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_help.c b/contrib/libarchive/cpio/test/test_option_help.c
index cf69c76496d5..ff64d27b759d 100644
--- a/contrib/libarchive/cpio/test/test_option_help.c
+++ b/contrib/libarchive/cpio/test/test_option_help.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_l.c b/contrib/libarchive/cpio/test/test_option_l.c
index 3f4390a6ff22..bbd54c7bc972 100644
--- a/contrib/libarchive/cpio/test/test_option_l.c
+++ b/contrib/libarchive/cpio/test/test_option_l.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_lrzip.c b/contrib/libarchive/cpio/test/test_option_lrzip.c
index 4c46f1c65bba..8854039de0f1 100644
--- a/contrib/libarchive/cpio/test/test_option_lrzip.c
+++ b/contrib/libarchive/cpio/test/test_option_lrzip.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_lz4.c b/contrib/libarchive/cpio/test/test_option_lz4.c
index 4c5186d55ccc..17b20e334e2b 100644
--- a/contrib/libarchive/cpio/test/test_option_lz4.c
+++ b/contrib/libarchive/cpio/test/test_option_lz4.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2014 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_lzma.c b/contrib/libarchive/cpio/test/test_option_lzma.c
index 3c2648b827cd..0961a0c0b569 100644
--- a/contrib/libarchive/cpio/test/test_option_lzma.c
+++ b/contrib/libarchive/cpio/test/test_option_lzma.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_lzop.c b/contrib/libarchive/cpio/test/test_option_lzop.c
index b787b720a878..66afeb56c903 100644
--- a/contrib/libarchive/cpio/test/test_option_lzop.c
+++ b/contrib/libarchive/cpio/test/test_option_lzop.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_m.c b/contrib/libarchive/cpio/test/test_option_m.c
index f2f297e10572..4cb7e354cee4 100644
--- a/contrib/libarchive/cpio/test/test_option_m.c
+++ b/contrib/libarchive/cpio/test/test_option_m.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_passphrase.c b/contrib/libarchive/cpio/test/test_option_passphrase.c
index d409b30c81cf..28818cb6f05c 100644
--- a/contrib/libarchive/cpio/test/test_option_passphrase.c
+++ b/contrib/libarchive/cpio/test/test_option_passphrase.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2014 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_t.c b/contrib/libarchive/cpio/test/test_option_t.c
index 953e4a80651e..c7ee64341efd 100644
--- a/contrib/libarchive/cpio/test/test_option_t.c
+++ b/contrib/libarchive/cpio/test/test_option_t.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
@@ -33,7 +15,7 @@ DEFINE_TEST(test_option_t)
char *p;
int r;
time_t mtime;
- char date[32];
+ char date[48];
char date2[32];
struct tm *tmptr;
#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
@@ -89,6 +71,7 @@ DEFINE_TEST(test_option_t)
mtime = 1;
#ifdef HAVE_LOCALE_H
setlocale(LC_ALL, "");
+ setlocale(LC_TIME, "");
#endif
#if defined(HAVE_LOCALTIME_S)
tmptr = localtime_s(&tmbuf, &mtime) ? NULL : &tmbuf;
@@ -99,10 +82,10 @@ DEFINE_TEST(test_option_t)
#endif
#if defined(_WIN32) && !defined(__CYGWIN__)
strftime(date2, sizeof(date2)-1, "%b %d %Y", tmptr);
- _snprintf(date, sizeof(date)-1, "%12.12s file", date2);
+ _snprintf(date, sizeof(date)-1, "%12s file", date2);
#else
strftime(date2, sizeof(date2)-1, "%b %e %Y", tmptr);
- snprintf(date, sizeof(date)-1, "%12.12s file", date2);
+ snprintf(date, sizeof(date)-1, "%12s file", date2);
#endif
assertEqualMem(p + 42, date, strlen(date));
free(p);
diff --git a/contrib/libarchive/cpio/test/test_option_u.c b/contrib/libarchive/cpio/test/test_option_u.c
index fe5b863af0e2..4c00e88cfe7a 100644
--- a/contrib/libarchive/cpio/test/test_option_u.c
+++ b/contrib/libarchive/cpio/test/test_option_u.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
#if defined(HAVE_UTIME_H)
diff --git a/contrib/libarchive/cpio/test/test_option_uuencode.c b/contrib/libarchive/cpio/test/test_option_uuencode.c
index 28662ddfb659..76966602b7a7 100644
--- a/contrib/libarchive/cpio/test/test_option_uuencode.c
+++ b/contrib/libarchive/cpio/test/test_option_uuencode.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_version.c b/contrib/libarchive/cpio/test/test_option_version.c
index 505db27128fe..4992295ae17a 100644
--- a/contrib/libarchive/cpio/test/test_option_version.c
+++ b/contrib/libarchive/cpio/test/test_option_version.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2017 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_xz.c b/contrib/libarchive/cpio/test/test_option_xz.c
index 9116ecace3a7..cc91fd566ad5 100644
--- a/contrib/libarchive/cpio/test/test_option_xz.c
+++ b/contrib/libarchive/cpio/test/test_option_xz.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_y.c b/contrib/libarchive/cpio/test/test_option_y.c
index a78dff8cf4ea..fd1a947c0649 100644
--- a/contrib/libarchive/cpio/test/test_option_y.c
+++ b/contrib/libarchive/cpio/test/test_option_y.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_z.c b/contrib/libarchive/cpio/test/test_option_z.c
index 9a1500d77f32..e89d8f8ea62c 100644
--- a/contrib/libarchive/cpio/test/test_option_z.c
+++ b/contrib/libarchive/cpio/test/test_option_z.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_option_zstd.c b/contrib/libarchive/cpio/test/test_option_zstd.c
index 10c3ed9784e8..50ec458d0993 100644
--- a/contrib/libarchive/cpio/test/test_option_zstd.c
+++ b/contrib/libarchive/cpio/test/test_option_zstd.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2017 Sean Purcell
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_owner_parse.c b/contrib/libarchive/cpio/test/test_owner_parse.c
index fc6f18943f5d..dfc78ca77aec 100644
--- a/contrib/libarchive/cpio/test/test_owner_parse.c
+++ b/contrib/libarchive/cpio/test/test_owner_parse.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2009 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
@@ -55,6 +37,14 @@ int_in_list(int i, const int *l, size_t n)
failure("%d", i);
return (0);
}
+
+static void
+free_cpio_owner(struct cpio_owner *owner) {
+ owner->uid = -1;
+ owner->gid = -1;
+ free(owner->uname);
+ free(owner->gname);
+}
#endif
DEFINE_TEST(test_owner_parse)
@@ -62,49 +52,58 @@ DEFINE_TEST(test_owner_parse)
#if !defined(ROOT)
skipping("No uid/gid configuration for this OS");
#else
- int uid, gid;
+ struct cpio_owner owner;
+ const char *errstr;
- assert(NULL == owner_parse(ROOT, &uid, &gid));
- assert(int_in_list(uid, root_uids,
+ assert(0 == owner_parse(ROOT, &owner, &errstr));
+ assert(int_in_list(owner.uid, root_uids,
sizeof(root_uids)/sizeof(root_uids[0])));
- assertEqualInt(-1, gid);
-
+ assertEqualInt(-1, owner.gid);
+ free_cpio_owner(&owner);
- assert(NULL == owner_parse(ROOT ":", &uid, &gid));
- assert(int_in_list(uid, root_uids,
+ assert(0 == owner_parse(ROOT ":", &owner, &errstr));
+ assert(int_in_list(owner.uid, root_uids,
sizeof(root_uids)/sizeof(root_uids[0])));
- assert(int_in_list(gid, root_gids,
+ assert(int_in_list(owner.gid, root_gids,
sizeof(root_gids)/sizeof(root_gids[0])));
+ free_cpio_owner(&owner);
- assert(NULL == owner_parse(ROOT ".", &uid, &gid));
- assert(int_in_list(uid, root_uids,
+ assert(0 == owner_parse(ROOT ".", &owner, &errstr));
+ assert(int_in_list(owner.uid, root_uids,
sizeof(root_uids)/sizeof(root_uids[0])));
- assert(int_in_list(gid, root_gids,
+ assert(int_in_list(owner.gid, root_gids,
sizeof(root_gids)/sizeof(root_gids[0])));
+ free_cpio_owner(&owner);
- assert(NULL == owner_parse("111", &uid, &gid));
- assertEqualInt(111, uid);
- assertEqualInt(-1, gid);
+ assert(0 == owner_parse("111", &owner, &errstr));
+ assertEqualInt(111, owner.uid);
+ assertEqualInt(-1, owner.gid);
+ free_cpio_owner(&owner);
- assert(NULL == owner_parse("112:", &uid, &gid));
- assertEqualInt(112, uid);
+ assert(0 == owner_parse("112:", &owner, &errstr));
+ assertEqualInt(112, owner.uid);
/* Can't assert gid, since we don't know gid for user #112. */
+ free_cpio_owner(&owner);
- assert(NULL == owner_parse("113.", &uid, &gid));
- assertEqualInt(113, uid);
+ assert(0 == owner_parse("113.", &owner, &errstr));
+ assertEqualInt(113, owner.uid);
/* Can't assert gid, since we don't know gid for user #113. */
+ free_cpio_owner(&owner);
- assert(NULL == owner_parse(":114", &uid, &gid));
- assertEqualInt(-1, uid);
- assertEqualInt(114, gid);
+ assert(0 == owner_parse(":114", &owner, &errstr));
+ assertEqualInt(-1, owner.uid);
+ assertEqualInt(114, owner.gid);
+ free_cpio_owner(&owner);
- assert(NULL == owner_parse(".115", &uid, &gid));
- assertEqualInt(-1, uid);
- assertEqualInt(115, gid);
+ assert(0 == owner_parse(".115", &owner, &errstr));
+ assertEqualInt(-1, owner.uid);
+ assertEqualInt(115, owner.gid);
+ free_cpio_owner(&owner);
- assert(NULL == owner_parse("116:117", &uid, &gid));
- assertEqualInt(116, uid);
- assertEqualInt(117, gid);
+ assert(0 == owner_parse("116:117", &owner, &errstr));
+ assertEqualInt(116, owner.uid);
+ assertEqualInt(117, owner.gid);
+ free_cpio_owner(&owner);
/*
* TODO: Lookup current user/group name, build strings and
@@ -112,9 +111,20 @@ DEFINE_TEST(test_owner_parse)
* users.
*/
- assert(NULL != owner_parse(":nonexistentgroup", &uid, &gid));
- assert(NULL != owner_parse(ROOT ":nonexistentgroup", &uid, &gid));
- assert(NULL !=
- owner_parse("nonexistentuser:nonexistentgroup", &uid, &gid));
+ errstr = NULL;
+ assert(0 != owner_parse(":nonexistentgroup", &owner, &errstr));
+ assertEqualString(errstr, "Couldn't lookup group ``nonexistentgroup''");
+ free_cpio_owner(&owner);
+
+ errstr = NULL;
+ assert(0 != owner_parse(ROOT ":nonexistentgroup", &owner, &errstr));
+ assertEqualString(errstr, "Couldn't lookup group ``nonexistentgroup''");
+ free_cpio_owner(&owner);
+
+ errstr = NULL;
+ assert(0 != owner_parse("nonexistentuser:nonexistentgroup", &owner,
+ &errstr));
+ assertEqualString(errstr, "Couldn't lookup user ``nonexistentuser''");
+ free_cpio_owner(&owner);
#endif
}
diff --git a/contrib/libarchive/cpio/test/test_passthrough_dotdot.c b/contrib/libarchive/cpio/test/test_passthrough_dotdot.c
index 831c1f81c1cb..bd77190fbf62 100644
--- a/contrib/libarchive/cpio/test/test_passthrough_dotdot.c
+++ b/contrib/libarchive/cpio/test/test_passthrough_dotdot.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/cpio/test/test_passthrough_reverse.c b/contrib/libarchive/cpio/test/test_passthrough_reverse.c
index 7ae0e6602a34..9e58b618060f 100644
--- a/contrib/libarchive/cpio/test/test_passthrough_reverse.c
+++ b/contrib/libarchive/cpio/test/test_passthrough_reverse.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/libarchive/archive.h b/contrib/libarchive/libarchive/archive.h
index fd4dd20fad13..5b65475f61e2 100644
--- a/contrib/libarchive/libarchive/archive.h
+++ b/contrib/libarchive/libarchive/archive.h
@@ -34,7 +34,7 @@
* assert that ARCHIVE_VERSION_NUMBER >= 2012108.
*/
/* Note: Compiler will complain if this does not match archive_entry.h! */
-#define ARCHIVE_VERSION_NUMBER 3007004
+#define ARCHIVE_VERSION_NUMBER 3007007
#include <sys/stat.h>
#include <stddef.h> /* for wchar_t */
@@ -155,7 +155,7 @@ __LA_DECL int archive_version_number(void);
/*
* Textual name/version of the library, useful for version displays.
*/
-#define ARCHIVE_VERSION_ONLY_STRING "3.7.4"
+#define ARCHIVE_VERSION_ONLY_STRING "3.7.7"
#define ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING
__LA_DECL const char * archive_version_string(void);
diff --git a/contrib/libarchive/libarchive/archive_acl.c b/contrib/libarchive/libarchive/archive_acl.c
index 254324c71309..bbb085afe7af 100644
--- a/contrib/libarchive/libarchive/archive_acl.c
+++ b/contrib/libarchive/libarchive/archive_acl.c
@@ -56,7 +56,7 @@ static int archive_acl_add_entry_len_l(struct archive_acl *acl,
int type, int permset, int tag, int id, const char *name,
size_t len, struct archive_string_conv *sc);
static int archive_acl_text_want_type(struct archive_acl *acl, int flags);
-static ssize_t archive_acl_text_len(struct archive_acl *acl, int want_type,
+static size_t archive_acl_text_len(struct archive_acl *acl, int want_type,
int flags, int wide, struct archive *a,
struct archive_string_conv *sc);
static int isint_w(const wchar_t *start, const wchar_t *end, int *result);
@@ -76,7 +76,7 @@ static int is_nfs4_flags(const char *start, const char *end,
int *result);
static int is_nfs4_perms(const char *start, const char *end,
int *result);
-static void next_field(const char **p, const char **start,
+static void next_field(const char **p, size_t *l, const char **start,
const char **end, char *sep);
static void append_entry(char **p, const char *prefix, int type,
int tag, int flags, const char *name, int perm, int id);
@@ -346,7 +346,7 @@ acl_new_entry(struct archive_acl *acl,
}
/* Add a new entry to the end of the list. */
- ap = (struct archive_acl_entry *)calloc(1, sizeof(*ap));
+ ap = calloc(1, sizeof(*ap));
if (ap == NULL)
return (NULL);
if (aq == NULL)
@@ -528,14 +528,14 @@ archive_acl_text_want_type(struct archive_acl *acl, int flags)
/*
* Calculate ACL text string length
*/
-static ssize_t
+static size_t
archive_acl_text_len(struct archive_acl *acl, int want_type, int flags,
int wide, struct archive *a, struct archive_string_conv *sc) {
struct archive_acl_entry *ap;
const char *name;
const wchar_t *wname;
int count, idlen, tmp, r;
- ssize_t length;
+ size_t length;
size_t len;
count = 0;
@@ -664,7 +664,7 @@ archive_acl_to_text_w(struct archive_acl *acl, ssize_t *text_len, int flags,
struct archive *a)
{
int count;
- ssize_t length;
+ size_t length;
size_t len;
const wchar_t *wname;
const wchar_t *prefix;
@@ -693,7 +693,7 @@ archive_acl_to_text_w(struct archive_acl *acl, ssize_t *text_len, int flags,
separator = L'\n';
/* Now, allocate the string and actually populate it. */
- wp = ws = (wchar_t *)malloc(length * sizeof(wchar_t));
+ wp = ws = malloc(length * sizeof(*wp));
if (wp == NULL) {
if (errno == ENOMEM)
__archive_errx(1, "No memory");
@@ -755,7 +755,7 @@ archive_acl_to_text_w(struct archive_acl *acl, ssize_t *text_len, int flags,
len = wcslen(ws);
- if ((ssize_t)len > (length - 1))
+ if (len > length - 1)
__archive_errx(1, "Buffer overrun");
if (text_len != NULL)
@@ -897,7 +897,7 @@ archive_acl_to_text_l(struct archive_acl *acl, ssize_t *text_len, int flags,
struct archive_string_conv *sc)
{
int count;
- ssize_t length;
+ size_t length;
size_t len;
const char *name;
const char *prefix;
@@ -926,7 +926,7 @@ archive_acl_to_text_l(struct archive_acl *acl, ssize_t *text_len, int flags,
separator = '\n';
/* Now, allocate the string and actually populate it. */
- p = s = (char *)malloc(length * sizeof(char));
+ p = s = malloc(length * sizeof(*p));
if (p == NULL) {
if (errno == ENOMEM)
__archive_errx(1, "No memory");
@@ -990,7 +990,7 @@ archive_acl_to_text_l(struct archive_acl *acl, ssize_t *text_len, int flags,
len = strlen(s);
- if ((ssize_t)len > (length - 1))
+ if (len > length - 1)
__archive_errx(1, "Buffer overrun");
if (text_len != NULL)
@@ -1620,6 +1620,13 @@ int
archive_acl_from_text_l(struct archive_acl *acl, const char *text,
int want_type, struct archive_string_conv *sc)
{
+ return archive_acl_from_text_nl(acl, text, strlen(text), want_type, sc);
+}
+
+int
+archive_acl_from_text_nl(struct archive_acl *acl, const char *text,
+ size_t length, int want_type, struct archive_string_conv *sc)
+{
struct {
const char *start;
const char *end;
@@ -1649,7 +1656,7 @@ archive_acl_from_text_l(struct archive_acl *acl, const char *text,
ret = ARCHIVE_OK;
types = 0;
- while (text != NULL && *text != '\0') {
+ while (text != NULL && length > 0 && *text != '\0') {
/*
* Parse the fields out of the next entry,
* advance 'text' to start of next entry.
@@ -1657,7 +1664,7 @@ archive_acl_from_text_l(struct archive_acl *acl, const char *text,
fields = 0;
do {
const char *start, *end;
- next_field(&text, &start, &end, &sep);
+ next_field(&text, &length, &start, &end, &sep);
if (fields < numfields) {
field[fields].start = start;
field[fields].end = end;
@@ -2047,7 +2054,7 @@ is_nfs4_flags(const char *start, const char *end, int *permset)
}
/*
- * Match "[:whitespace:]*(.*)[:whitespace:]*[:,\n]". *wp is updated
+ * Match "[:whitespace:]*(.*)[:whitespace:]*[:,\n]". *p is updated
* to point to just after the separator. *start points to the first
* character of the matched text and *end just after the last
* character of the matched identifier. In particular *end - *start
@@ -2055,42 +2062,42 @@ is_nfs4_flags(const char *start, const char *end, int *permset)
* whitespace.
*/
static void
-next_field(const char **p, const char **start,
+next_field(const char **p, size_t *l, const char **start,
const char **end, char *sep)
{
/* Skip leading whitespace to find start of field. */
- while (**p == ' ' || **p == '\t' || **p == '\n') {
+ while (*l > 0 && (**p == ' ' || **p == '\t' || **p == '\n')) {
(*p)++;
+ (*l)--;
}
*start = *p;
- /* Scan for the separator. */
- while (**p != '\0' && **p != ',' && **p != ':' && **p != '\n' &&
- **p != '#') {
+ /* Locate end of field, trim trailing whitespace if necessary */
+ while (*l > 0 && **p != ' ' && **p != '\t' && **p != '\n' && **p != ',' && **p != ':' && **p != '#') {
(*p)++;
+ (*l)--;
}
- *sep = **p;
+ *end = *p;
- /* Locate end of field, trim trailing whitespace if necessary */
- if (*p == *start) {
- *end = *p;
- } else {
- *end = *p - 1;
- while (**end == ' ' || **end == '\t' || **end == '\n') {
- (*end)--;
- }
- (*end)++;
+ /* Scan for the separator. */
+ while (*l > 0 && **p != ',' && **p != ':' && **p != '\n' && **p != '#') {
+ (*p)++;
+ (*l)--;
}
+ *sep = **p;
/* Handle in-field comments */
if (*sep == '#') {
- while (**p != '\0' && **p != ',' && **p != '\n') {
+ while (*l > 0 && **p != ',' && **p != '\n') {
(*p)++;
+ (*l)--;
}
*sep = **p;
}
- /* Adjust scanner location. */
- if (**p != '\0')
+ /* Skip separator. */
+ if (*l > 0) {
(*p)++;
+ (*l)--;
+ }
}
diff --git a/contrib/libarchive/libarchive/archive_acl_private.h b/contrib/libarchive/libarchive/archive_acl_private.h
index 750b4dd7d898..2c9b5053430e 100644
--- a/contrib/libarchive/libarchive/archive_acl_private.h
+++ b/contrib/libarchive/libarchive/archive_acl_private.h
@@ -77,5 +77,7 @@ int archive_acl_from_text_w(struct archive_acl *, const wchar_t * /* wtext */,
int /* type */);
int archive_acl_from_text_l(struct archive_acl *, const char * /* text */,
int /* type */, struct archive_string_conv *);
+int archive_acl_from_text_nl(struct archive_acl *, const char * /* text */,
+ size_t /* size of text */, int /* type */, struct archive_string_conv *);
#endif /* ARCHIVE_ENTRY_PRIVATE_H_INCLUDED */
diff --git a/contrib/libarchive/libarchive/archive_crc32.h b/contrib/libarchive/libarchive/archive_crc32.h
index 98a4e2cf8f7f..d86a507ce78c 100644
--- a/contrib/libarchive/libarchive/archive_crc32.h
+++ b/contrib/libarchive/libarchive/archive_crc32.h
@@ -30,6 +30,8 @@
#error This header is only to be used internally to libarchive.
#endif
+#include <stddef.h>
+
/*
* When zlib is unavailable, we should still be able to validate
* uncompressed zip archives. That requires us to be able to compute
@@ -46,6 +48,9 @@ crc32(unsigned long crc, const void *_p, size_t len)
static volatile int crc_tbl_inited = 0;
static unsigned long crc_tbl[256];
+ if (_p == NULL)
+ return (0);
+
if (!crc_tbl_inited) {
for (b = 0; b < 256; ++b) {
crc2 = b;
diff --git a/contrib/libarchive/libarchive/archive_cryptor.c b/contrib/libarchive/libarchive/archive_cryptor.c
index 437dba06be62..1825af4dc510 100644
--- a/contrib/libarchive/libarchive/archive_cryptor.c
+++ b/contrib/libarchive/libarchive/archive_cryptor.c
@@ -57,7 +57,7 @@ pbkdf2_sha1(const char *pw, size_t pw_len, const uint8_t *salt,
return 0;
}
-#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H)
+#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
#ifdef _MSC_VER
#pragma comment(lib, "Bcrypt.lib")
#endif
@@ -197,7 +197,7 @@ aes_ctr_release(archive_crypto_ctx *ctx)
return 0;
}
-#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H)
+#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
static int
aes_ctr_init(archive_crypto_ctx *ctx, const uint8_t *key, size_t key_len)
diff --git a/contrib/libarchive/libarchive/archive_cryptor_private.h b/contrib/libarchive/libarchive/archive_cryptor_private.h
index 16b6d16ff23c..c13f29260a07 100644
--- a/contrib/libarchive/libarchive/archive_cryptor_private.h
+++ b/contrib/libarchive/libarchive/archive_cryptor_private.h
@@ -62,7 +62,7 @@ typedef struct {
unsigned encr_pos;
} archive_crypto_ctx;
-#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H)
+#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
#include <bcrypt.h>
/* Common in other bcrypt implementations, but missing from VS2008. */
diff --git a/contrib/libarchive/libarchive/archive_entry.c b/contrib/libarchive/libarchive/archive_entry.c
index e017b0fd1ebc..a2538dbb0eb7 100644
--- a/contrib/libarchive/libarchive/archive_entry.c
+++ b/contrib/libarchive/libarchive/archive_entry.c
@@ -118,7 +118,7 @@
static char * ae_fflagstostr(unsigned long bitset, unsigned long bitclear);
static const wchar_t *ae_wcstofflags(const wchar_t *stringp,
unsigned long *setp, unsigned long *clrp);
-static const char *ae_strtofflags(const char *stringp,
+static const char *ae_strtofflags(const char *stringp, size_t length,
unsigned long *setp, unsigned long *clrp);
#ifndef HAVE_WCSCPY
@@ -157,10 +157,9 @@ archive_entry_clear(struct archive_entry *entry)
return (NULL);
archive_mstring_clean(&entry->ae_fflags_text);
archive_mstring_clean(&entry->ae_gname);
- archive_mstring_clean(&entry->ae_hardlink);
+ archive_mstring_clean(&entry->ae_linkname);
archive_mstring_clean(&entry->ae_pathname);
archive_mstring_clean(&entry->ae_sourcepath);
- archive_mstring_clean(&entry->ae_symlink);
archive_mstring_clean(&entry->ae_uname);
archive_entry_copy_mac_metadata(entry, NULL, 0);
archive_acl_clear(&entry->acl);
@@ -195,10 +194,9 @@ archive_entry_clone(struct archive_entry *entry)
* character sets are different? XXX */
archive_mstring_copy(&entry2->ae_fflags_text, &entry->ae_fflags_text);
archive_mstring_copy(&entry2->ae_gname, &entry->ae_gname);
- archive_mstring_copy(&entry2->ae_hardlink, &entry->ae_hardlink);
+ archive_mstring_copy(&entry2->ae_linkname, &entry->ae_linkname);
archive_mstring_copy(&entry2->ae_pathname, &entry->ae_pathname);
archive_mstring_copy(&entry2->ae_sourcepath, &entry->ae_sourcepath);
- archive_mstring_copy(&entry2->ae_symlink, &entry->ae_symlink);
entry2->ae_set = entry->ae_set;
archive_mstring_copy(&entry2->ae_uname, &entry->ae_uname);
@@ -265,7 +263,7 @@ archive_entry_new2(struct archive *a)
{
struct archive_entry *entry;
- entry = (struct archive_entry *)calloc(1, sizeof(*entry));
+ entry = calloc(1, sizeof(*entry));
if (entry == NULL)
return (NULL);
entry->archive = a;
@@ -477,6 +475,15 @@ _archive_entry_gname_l(struct archive_entry *entry,
return (archive_mstring_get_mbs_l(entry->archive, &entry->ae_gname, p, len, sc));
}
+void
+archive_entry_set_link_to_hardlink(struct archive_entry *entry)
+{
+ if ((entry->ae_set & AE_SET_SYMLINK) != 0) {
+ entry->ae_set &= ~AE_SET_SYMLINK;
+ }
+ entry->ae_set |= AE_SET_HARDLINK;
+}
+
const char *
archive_entry_hardlink(struct archive_entry *entry)
{
@@ -484,7 +491,7 @@ archive_entry_hardlink(struct archive_entry *entry)
if ((entry->ae_set & AE_SET_HARDLINK) == 0)
return (NULL);
if (archive_mstring_get_mbs(
- entry->archive, &entry->ae_hardlink, &p) == 0)
+ entry->archive, &entry->ae_linkname, &p) == 0)
return (p);
if (errno == ENOMEM)
__archive_errx(1, "No memory");
@@ -498,7 +505,7 @@ archive_entry_hardlink_utf8(struct archive_entry *entry)
if ((entry->ae_set & AE_SET_HARDLINK) == 0)
return (NULL);
if (archive_mstring_get_utf8(
- entry->archive, &entry->ae_hardlink, &p) == 0)
+ entry->archive, &entry->ae_linkname, &p) == 0)
return (p);
if (errno == ENOMEM)
__archive_errx(1, "No memory");
@@ -512,7 +519,7 @@ archive_entry_hardlink_w(struct archive_entry *entry)
if ((entry->ae_set & AE_SET_HARDLINK) == 0)
return (NULL);
if (archive_mstring_get_wcs(
- entry->archive, &entry->ae_hardlink, &p) == 0)
+ entry->archive, &entry->ae_linkname, &p) == 0)
return (p);
if (errno == ENOMEM)
__archive_errx(1, "No memory");
@@ -520,6 +527,12 @@ archive_entry_hardlink_w(struct archive_entry *entry)
}
int
+archive_entry_hardlink_is_set(struct archive_entry *entry)
+{
+ return (entry->ae_set & AE_SET_HARDLINK) != 0;
+}
+
+int
_archive_entry_hardlink_l(struct archive_entry *entry,
const char **p, size_t *len, struct archive_string_conv *sc)
{
@@ -528,7 +541,7 @@ _archive_entry_hardlink_l(struct archive_entry *entry,
*len = 0;
return (0);
}
- return (archive_mstring_get_mbs_l(entry->archive, &entry->ae_hardlink, p, len, sc));
+ return (archive_mstring_get_mbs_l(entry->archive, &entry->ae_linkname, p, len, sc));
}
la_int64_t
@@ -648,32 +661,50 @@ archive_entry_perm_is_set(struct archive_entry *entry)
return (entry->ae_set & AE_SET_PERM);
}
+int
+archive_entry_rdev_is_set(struct archive_entry *entry)
+{
+ return (entry->ae_set & AE_SET_RDEV);
+}
+
dev_t
archive_entry_rdev(struct archive_entry *entry)
{
- if (entry->ae_stat.aest_rdev_is_broken_down)
- return ae_makedev(entry->ae_stat.aest_rdevmajor,
- entry->ae_stat.aest_rdevminor);
- else
- return (entry->ae_stat.aest_rdev);
+ if (archive_entry_rdev_is_set(entry)) {
+ if (entry->ae_stat.aest_rdev_is_broken_down)
+ return ae_makedev(entry->ae_stat.aest_rdevmajor,
+ entry->ae_stat.aest_rdevminor);
+ else
+ return (entry->ae_stat.aest_rdev);
+ } else {
+ return 0;
+ }
}
dev_t
archive_entry_rdevmajor(struct archive_entry *entry)
{
- if (entry->ae_stat.aest_rdev_is_broken_down)
- return (entry->ae_stat.aest_rdevmajor);
- else
- return major(entry->ae_stat.aest_rdev);
+ if (archive_entry_rdev_is_set(entry)) {
+ if (entry->ae_stat.aest_rdev_is_broken_down)
+ return (entry->ae_stat.aest_rdevmajor);
+ else
+ return major(entry->ae_stat.aest_rdev);
+ } else {
+ return 0;
+ }
}
dev_t
archive_entry_rdevminor(struct archive_entry *entry)
{
- if (entry->ae_stat.aest_rdev_is_broken_down)
- return (entry->ae_stat.aest_rdevminor);
- else
- return minor(entry->ae_stat.aest_rdev);
+ if (archive_entry_rdev_is_set(entry)) {
+ if (entry->ae_stat.aest_rdev_is_broken_down)
+ return (entry->ae_stat.aest_rdevminor);
+ else
+ return minor(entry->ae_stat.aest_rdev);
+ } else {
+ return 0;
+ }
}
la_int64_t
@@ -717,13 +748,22 @@ archive_entry_symlink(struct archive_entry *entry)
if ((entry->ae_set & AE_SET_SYMLINK) == 0)
return (NULL);
if (archive_mstring_get_mbs(
- entry->archive, &entry->ae_symlink, &p) == 0)
+ entry->archive, &entry->ae_linkname, &p) == 0)
return (p);
if (errno == ENOMEM)
__archive_errx(1, "No memory");
return (NULL);
}
+void
+archive_entry_set_link_to_symlink(struct archive_entry *entry)
+{
+ if ((entry->ae_set & AE_SET_HARDLINK) != 0) {
+ entry->ae_set &= ~AE_SET_HARDLINK;
+ }
+ entry->ae_set |= AE_SET_SYMLINK;
+}
+
int
archive_entry_symlink_type(struct archive_entry *entry)
{
@@ -737,7 +777,7 @@ archive_entry_symlink_utf8(struct archive_entry *entry)
if ((entry->ae_set & AE_SET_SYMLINK) == 0)
return (NULL);
if (archive_mstring_get_utf8(
- entry->archive, &entry->ae_symlink, &p) == 0)
+ entry->archive, &entry->ae_linkname, &p) == 0)
return (p);
if (errno == ENOMEM)
__archive_errx(1, "No memory");
@@ -751,7 +791,7 @@ archive_entry_symlink_w(struct archive_entry *entry)
if ((entry->ae_set & AE_SET_SYMLINK) == 0)
return (NULL);
if (archive_mstring_get_wcs(
- entry->archive, &entry->ae_symlink, &p) == 0)
+ entry->archive, &entry->ae_linkname, &p) == 0)
return (p);
if (errno == ENOMEM)
__archive_errx(1, "No memory");
@@ -767,7 +807,7 @@ _archive_entry_symlink_l(struct archive_entry *entry,
*len = 0;
return (0);
}
- return (archive_mstring_get_mbs_l(entry->archive, &entry->ae_symlink, p, len, sc));
+ return (archive_mstring_get_mbs_l(entry->archive, &entry->ae_linkname, p, len, sc));
}
la_int64_t
@@ -864,10 +904,17 @@ archive_entry_set_fflags(struct archive_entry *entry,
const char *
archive_entry_copy_fflags_text(struct archive_entry *entry,
- const char *flags)
+ const char *flags)
+{
+ return archive_entry_copy_fflags_text_len(entry, flags, strlen(flags));
+}
+
+const char *
+archive_entry_copy_fflags_text_len(struct archive_entry *entry,
+ const char *flags, size_t flags_length)
{
- archive_mstring_copy_mbs(&entry->ae_fflags_text, flags);
- return (ae_strtofflags(flags,
+ archive_mstring_copy_mbs_len(&entry->ae_fflags_text, flags, flags_length);
+ return (ae_strtofflags(flags, flags_length,
&entry->ae_fflags_set, &entry->ae_fflags_clear));
}
@@ -883,6 +930,9 @@ archive_entry_copy_fflags_text_w(struct archive_entry *entry,
void
archive_entry_set_gid(struct archive_entry *entry, la_int64_t g)
{
+ if (g < 0) {
+ g = 0;
+ }
entry->stat_valid = 0;
entry->ae_stat.aest_gid = g;
entry->ae_set |= AE_SET_GID;
@@ -933,6 +983,9 @@ _archive_entry_copy_gname_l(struct archive_entry *entry,
void
archive_entry_set_ino(struct archive_entry *entry, la_int64_t ino)
{
+ if (ino < 0) {
+ ino = 0;
+ }
entry->stat_valid = 0;
entry->ae_set |= AE_SET_INO;
entry->ae_stat.aest_ino = ino;
@@ -941,6 +994,9 @@ archive_entry_set_ino(struct archive_entry *entry, la_int64_t ino)
void
archive_entry_set_ino64(struct archive_entry *entry, la_int64_t ino)
{
+ if (ino < 0) {
+ ino = 0;
+ }
entry->stat_valid = 0;
entry->ae_set |= AE_SET_INO;
entry->ae_stat.aest_ino = ino;
@@ -949,17 +1005,24 @@ archive_entry_set_ino64(struct archive_entry *entry, la_int64_t ino)
void
archive_entry_set_hardlink(struct archive_entry *entry, const char *target)
{
- archive_mstring_copy_mbs(&entry->ae_hardlink, target);
- if (target != NULL)
- entry->ae_set |= AE_SET_HARDLINK;
- else
+ if (target == NULL) {
entry->ae_set &= ~AE_SET_HARDLINK;
+ if (entry->ae_set & AE_SET_SYMLINK) {
+ return;
+ }
+ } else {
+ entry->ae_set |= AE_SET_HARDLINK;
+ }
+ entry->ae_set &= ~AE_SET_SYMLINK;
+ archive_mstring_copy_mbs(&entry->ae_linkname, target);
}
void
archive_entry_set_hardlink_utf8(struct archive_entry *entry, const char *target)
{
- archive_mstring_copy_utf8(&entry->ae_hardlink, target);
+ if (target == NULL && (entry->ae_set & AE_SET_SYMLINK))
+ return;
+ archive_mstring_copy_utf8(&entry->ae_linkname, target);
if (target != NULL)
entry->ae_set |= AE_SET_HARDLINK;
else
@@ -969,7 +1032,9 @@ archive_entry_set_hardlink_utf8(struct archive_entry *entry, const char *target)
void
archive_entry_copy_hardlink(struct archive_entry *entry, const char *target)
{
- archive_mstring_copy_mbs(&entry->ae_hardlink, target);
+ if (target == NULL && (entry->ae_set & AE_SET_SYMLINK))
+ return;
+ archive_mstring_copy_mbs(&entry->ae_linkname, target);
if (target != NULL)
entry->ae_set |= AE_SET_HARDLINK;
else
@@ -979,7 +1044,9 @@ archive_entry_copy_hardlink(struct archive_entry *entry, const char *target)
void
archive_entry_copy_hardlink_w(struct archive_entry *entry, const wchar_t *target)
{
- archive_mstring_copy_wcs(&entry->ae_hardlink, target);
+ if (target == NULL && (entry->ae_set & AE_SET_SYMLINK))
+ return;
+ archive_mstring_copy_wcs(&entry->ae_linkname, target);
if (target != NULL)
entry->ae_set |= AE_SET_HARDLINK;
else
@@ -989,12 +1056,14 @@ archive_entry_copy_hardlink_w(struct archive_entry *entry, const wchar_t *target
int
archive_entry_update_hardlink_utf8(struct archive_entry *entry, const char *target)
{
+ if (target == NULL && (entry->ae_set & AE_SET_SYMLINK))
+ return (0);
if (target != NULL)
entry->ae_set |= AE_SET_HARDLINK;
else
entry->ae_set &= ~AE_SET_HARDLINK;
if (archive_mstring_update_utf8(entry->archive,
- &entry->ae_hardlink, target) == 0)
+ &entry->ae_linkname, target) == 0)
return (1);
if (errno == ENOMEM)
__archive_errx(1, "No memory");
@@ -1007,7 +1076,9 @@ _archive_entry_copy_hardlink_l(struct archive_entry *entry,
{
int r;
- r = archive_mstring_copy_mbs_len_l(&entry->ae_hardlink,
+ if (target == NULL && (entry->ae_set & AE_SET_SYMLINK))
+ return (0);
+ r = archive_mstring_copy_mbs_len_l(&entry->ae_linkname,
target, len, sc);
if (target != NULL && r == 0)
entry->ae_set |= AE_SET_HARDLINK;
@@ -1098,51 +1169,50 @@ archive_entry_set_devminor(struct archive_entry *entry, dev_t m)
void
archive_entry_set_link(struct archive_entry *entry, const char *target)
{
- if (entry->ae_set & AE_SET_SYMLINK)
- archive_mstring_copy_mbs(&entry->ae_symlink, target);
- else
- archive_mstring_copy_mbs(&entry->ae_hardlink, target);
+ archive_mstring_copy_mbs(&entry->ae_linkname, target);
+ if ((entry->ae_set & AE_SET_SYMLINK) == 0) {
+ entry->ae_set |= AE_SET_HARDLINK;
+ }
}
void
archive_entry_set_link_utf8(struct archive_entry *entry, const char *target)
{
- if (entry->ae_set & AE_SET_SYMLINK)
- archive_mstring_copy_utf8(&entry->ae_symlink, target);
- else
- archive_mstring_copy_utf8(&entry->ae_hardlink, target);
+ archive_mstring_copy_utf8(&entry->ae_linkname, target);
+ if ((entry->ae_set & AE_SET_SYMLINK) == 0) {
+ entry->ae_set |= AE_SET_HARDLINK;
+ }
}
/* Set symlink if symlink is already set, else set hardlink. */
void
archive_entry_copy_link(struct archive_entry *entry, const char *target)
{
- if (entry->ae_set & AE_SET_SYMLINK)
- archive_mstring_copy_mbs(&entry->ae_symlink, target);
- else
- archive_mstring_copy_mbs(&entry->ae_hardlink, target);
+ archive_mstring_copy_mbs(&entry->ae_linkname, target);
+ if ((entry->ae_set & AE_SET_SYMLINK) == 0) {
+ entry->ae_set |= AE_SET_HARDLINK;
+ }
}
/* Set symlink if symlink is already set, else set hardlink. */
void
archive_entry_copy_link_w(struct archive_entry *entry, const wchar_t *target)
{
- if (entry->ae_set & AE_SET_SYMLINK)
- archive_mstring_copy_wcs(&entry->ae_symlink, target);
- else
- archive_mstring_copy_wcs(&entry->ae_hardlink, target);
+ archive_mstring_copy_wcs(&entry->ae_linkname, target);
+ if ((entry->ae_set & AE_SET_SYMLINK) == 0) {
+ entry->ae_set |= AE_SET_HARDLINK;
+ }
}
int
archive_entry_update_link_utf8(struct archive_entry *entry, const char *target)
{
int r;
- if (entry->ae_set & AE_SET_SYMLINK)
- r = archive_mstring_update_utf8(entry->archive,
- &entry->ae_symlink, target);
- else
- r = archive_mstring_update_utf8(entry->archive,
- &entry->ae_hardlink, target);
+ r = archive_mstring_update_utf8(entry->archive,
+ &entry->ae_linkname, target);
+ if ((entry->ae_set & AE_SET_SYMLINK) == 0) {
+ entry->ae_set |= AE_SET_HARDLINK;
+ }
if (r == 0)
return (1);
if (errno == ENOMEM)
@@ -1156,12 +1226,11 @@ _archive_entry_copy_link_l(struct archive_entry *entry,
{
int r;
- if (entry->ae_set & AE_SET_SYMLINK)
- r = archive_mstring_copy_mbs_len_l(&entry->ae_symlink,
- target, len, sc);
- else
- r = archive_mstring_copy_mbs_len_l(&entry->ae_hardlink,
+ r = archive_mstring_copy_mbs_len_l(&entry->ae_linkname,
target, len, sc);
+ if ((entry->ae_set & AE_SET_SYMLINK) == 0) {
+ entry->ae_set |= AE_SET_HARDLINK;
+ }
return (r);
}
@@ -1255,6 +1324,9 @@ archive_entry_set_rdev(struct archive_entry *entry, dev_t m)
entry->stat_valid = 0;
entry->ae_stat.aest_rdev = m;
entry->ae_stat.aest_rdev_is_broken_down = 0;
+ entry->ae_stat.aest_rdevmajor = 0;
+ entry->ae_stat.aest_rdevminor = 0;
+ entry->ae_set |= AE_SET_RDEV;
}
void
@@ -1262,7 +1334,9 @@ archive_entry_set_rdevmajor(struct archive_entry *entry, dev_t m)
{
entry->stat_valid = 0;
entry->ae_stat.aest_rdev_is_broken_down = 1;
+ entry->ae_stat.aest_rdev = 0;
entry->ae_stat.aest_rdevmajor = m;
+ entry->ae_set |= AE_SET_RDEV;
}
void
@@ -1270,12 +1344,17 @@ archive_entry_set_rdevminor(struct archive_entry *entry, dev_t m)
{
entry->stat_valid = 0;
entry->ae_stat.aest_rdev_is_broken_down = 1;
+ entry->ae_stat.aest_rdev = 0;
entry->ae_stat.aest_rdevminor = m;
+ entry->ae_set |= AE_SET_RDEV;
}
void
archive_entry_set_size(struct archive_entry *entry, la_int64_t s)
{
+ if (s < 0) {
+ s = 0;
+ }
entry->stat_valid = 0;
entry->ae_stat.aest_size = s;
entry->ae_set |= AE_SET_SIZE;
@@ -1303,11 +1382,14 @@ archive_entry_copy_sourcepath_w(struct archive_entry *entry, const wchar_t *path
void
archive_entry_set_symlink(struct archive_entry *entry, const char *linkname)
{
- archive_mstring_copy_mbs(&entry->ae_symlink, linkname);
- if (linkname != NULL)
- entry->ae_set |= AE_SET_SYMLINK;
- else
+ if (linkname == NULL && (entry->ae_set & AE_SET_HARDLINK))
+ return;
+ archive_mstring_copy_mbs(&entry->ae_linkname, linkname);
+ entry->ae_set &= ~AE_SET_HARDLINK;
+ if (linkname == NULL)
entry->ae_set &= ~AE_SET_SYMLINK;
+ else
+ entry->ae_set |= AE_SET_SYMLINK;
}
void
@@ -1319,42 +1401,54 @@ archive_entry_set_symlink_type(struct archive_entry *entry, int type)
void
archive_entry_set_symlink_utf8(struct archive_entry *entry, const char *linkname)
{
- archive_mstring_copy_utf8(&entry->ae_symlink, linkname);
- if (linkname != NULL)
- entry->ae_set |= AE_SET_SYMLINK;
- else
+ if (linkname == NULL && (entry->ae_set & AE_SET_HARDLINK))
+ return;
+ archive_mstring_copy_utf8(&entry->ae_linkname, linkname);
+ entry->ae_set &= ~AE_SET_HARDLINK;
+ if (linkname == NULL)
entry->ae_set &= ~AE_SET_SYMLINK;
+ else
+ entry->ae_set |= AE_SET_SYMLINK;
}
void
archive_entry_copy_symlink(struct archive_entry *entry, const char *linkname)
{
- archive_mstring_copy_mbs(&entry->ae_symlink, linkname);
- if (linkname != NULL)
- entry->ae_set |= AE_SET_SYMLINK;
- else
+ if (linkname == NULL && (entry->ae_set & AE_SET_HARDLINK))
+ return;
+ archive_mstring_copy_mbs(&entry->ae_linkname, linkname);
+ entry->ae_set &= ~AE_SET_HARDLINK;
+ if (linkname == NULL)
entry->ae_set &= ~AE_SET_SYMLINK;
+ else
+ entry->ae_set |= AE_SET_SYMLINK;
}
void
archive_entry_copy_symlink_w(struct archive_entry *entry, const wchar_t *linkname)
{
- archive_mstring_copy_wcs(&entry->ae_symlink, linkname);
- if (linkname != NULL)
- entry->ae_set |= AE_SET_SYMLINK;
- else
+ if (linkname == NULL && (entry->ae_set & AE_SET_HARDLINK))
+ return;
+ archive_mstring_copy_wcs(&entry->ae_linkname, linkname);
+ entry->ae_set &= ~AE_SET_HARDLINK;
+ if (linkname == NULL)
entry->ae_set &= ~AE_SET_SYMLINK;
+ else
+ entry->ae_set |= AE_SET_SYMLINK;
}
int
archive_entry_update_symlink_utf8(struct archive_entry *entry, const char *linkname)
{
- if (linkname != NULL)
- entry->ae_set |= AE_SET_SYMLINK;
- else
+ if (linkname == NULL && (entry->ae_set & AE_SET_HARDLINK))
+ return (0);
+ entry->ae_set &= ~AE_SET_HARDLINK;
+ if (linkname == NULL)
entry->ae_set &= ~AE_SET_SYMLINK;
+ else
+ entry->ae_set |= AE_SET_SYMLINK;
if (archive_mstring_update_utf8(entry->archive,
- &entry->ae_symlink, linkname) == 0)
+ &entry->ae_linkname, linkname) == 0)
return (1);
if (errno == ENOMEM)
__archive_errx(1, "No memory");
@@ -1367,18 +1461,24 @@ _archive_entry_copy_symlink_l(struct archive_entry *entry,
{
int r;
- r = archive_mstring_copy_mbs_len_l(&entry->ae_symlink,
+ if (linkname == NULL && (entry->ae_set & AE_SET_HARDLINK))
+ return (0);
+ entry->ae_set &= ~AE_SET_HARDLINK;
+ r = archive_mstring_copy_mbs_len_l(&entry->ae_linkname,
linkname, len, sc);
- if (linkname != NULL && r == 0)
- entry->ae_set |= AE_SET_SYMLINK;
- else
+ if (linkname == NULL || r != 0)
entry->ae_set &= ~AE_SET_SYMLINK;
+ else
+ entry->ae_set |= AE_SET_SYMLINK;
return (r);
}
void
archive_entry_set_uid(struct archive_entry *entry, la_int64_t u)
{
+ if (u < 0) {
+ u = 0;
+ }
entry->stat_valid = 0;
entry->ae_stat.aest_uid = u;
entry->ae_set |= AE_SET_UID;
@@ -1995,7 +2095,7 @@ ae_fflagstostr(unsigned long bitset, unsigned long bitclear)
if (length == 0)
return (NULL);
- string = (char *)malloc(length);
+ string = malloc(length);
if (string == NULL)
return (NULL);
@@ -2031,7 +2131,7 @@ ae_fflagstostr(unsigned long bitset, unsigned long bitclear)
* provided string.
*/
static const char *
-ae_strtofflags(const char *s, unsigned long *setp, unsigned long *clrp)
+ae_strtofflags(const char *s, size_t l, unsigned long *setp, unsigned long *clrp)
{
const char *start, *end;
const struct flag *flag;
@@ -2042,15 +2142,19 @@ ae_strtofflags(const char *s, unsigned long *setp, unsigned long *clrp)
start = s;
failed = NULL;
/* Find start of first token. */
- while (*start == '\t' || *start == ' ' || *start == ',')
+ while (l > 0 && (*start == '\t' || *start == ' ' || *start == ',')) {
start++;
- while (*start != '\0') {
+ l--;
+ }
+ while (l > 0) {
size_t length;
/* Locate end of token. */
end = start;
- while (*end != '\0' && *end != '\t' &&
- *end != ' ' && *end != ',')
+ while (l > 0 && *end != '\t' &&
+ *end != ' ' && *end != ',') {
end++;
+ l--;
+ }
length = end - start;
for (flag = fileflags; flag->name != NULL; flag++) {
size_t flag_length = strlen(flag->name);
@@ -2074,8 +2178,10 @@ ae_strtofflags(const char *s, unsigned long *setp, unsigned long *clrp)
/* Find start of next token. */
start = end;
- while (*start == '\t' || *start == ' ' || *start == ',')
+ while (l > 0 && (*start == '\t' || *start == ' ' || *start == ',')) {
start++;
+ l--;
+ }
}
diff --git a/contrib/libarchive/libarchive/archive_entry.h b/contrib/libarchive/libarchive/archive_entry.h
index 1c59ded7c911..97f5cdafbf90 100644
--- a/contrib/libarchive/libarchive/archive_entry.h
+++ b/contrib/libarchive/libarchive/archive_entry.h
@@ -28,7 +28,7 @@
#define ARCHIVE_ENTRY_H_INCLUDED
/* Note: Compiler will complain if this does not match archive.h! */
-#define ARCHIVE_VERSION_NUMBER 3007004
+#define ARCHIVE_VERSION_NUMBER 3007007
/*
* Note: archive_entry.h is for use outside of libarchive; the
@@ -259,9 +259,11 @@ __LA_DECL int archive_entry_gid_is_set(struct archive_entry *);
__LA_DECL const char *archive_entry_gname(struct archive_entry *);
__LA_DECL const char *archive_entry_gname_utf8(struct archive_entry *);
__LA_DECL const wchar_t *archive_entry_gname_w(struct archive_entry *);
+__LA_DECL void archive_entry_set_link_to_hardlink(struct archive_entry *);
__LA_DECL const char *archive_entry_hardlink(struct archive_entry *);
__LA_DECL const char *archive_entry_hardlink_utf8(struct archive_entry *);
__LA_DECL const wchar_t *archive_entry_hardlink_w(struct archive_entry *);
+__LA_DECL int archive_entry_hardlink_is_set(struct archive_entry *);
__LA_DECL la_int64_t archive_entry_ino(struct archive_entry *);
__LA_DECL la_int64_t archive_entry_ino64(struct archive_entry *);
__LA_DECL int archive_entry_ino_is_set(struct archive_entry *);
@@ -275,6 +277,7 @@ __LA_DECL const char *archive_entry_pathname_utf8(struct archive_entry *);
__LA_DECL const wchar_t *archive_entry_pathname_w(struct archive_entry *);
__LA_DECL __LA_MODE_T archive_entry_perm(struct archive_entry *);
__LA_DECL int archive_entry_perm_is_set(struct archive_entry *);
+__LA_DECL int archive_entry_rdev_is_set(struct archive_entry *);
__LA_DECL dev_t archive_entry_rdev(struct archive_entry *);
__LA_DECL dev_t archive_entry_rdevmajor(struct archive_entry *);
__LA_DECL dev_t archive_entry_rdevminor(struct archive_entry *);
@@ -283,6 +286,7 @@ __LA_DECL const wchar_t *archive_entry_sourcepath_w(struct archive_entry *);
__LA_DECL la_int64_t archive_entry_size(struct archive_entry *);
__LA_DECL int archive_entry_size_is_set(struct archive_entry *);
__LA_DECL const char *archive_entry_strmode(struct archive_entry *);
+__LA_DECL void archive_entry_set_link_to_symlink(struct archive_entry *);
__LA_DECL const char *archive_entry_symlink(struct archive_entry *);
__LA_DECL const char *archive_entry_symlink_utf8(struct archive_entry *);
__LA_DECL int archive_entry_symlink_type(struct archive_entry *);
@@ -324,6 +328,8 @@ __LA_DECL void archive_entry_set_fflags(struct archive_entry *,
/* Note that all recognized tokens are processed, regardless. */
__LA_DECL const char *archive_entry_copy_fflags_text(struct archive_entry *,
const char *);
+__LA_DECL const char *archive_entry_copy_fflags_text_len(struct archive_entry *,
+ const char *, size_t);
__LA_DECL const wchar_t *archive_entry_copy_fflags_text_w(struct archive_entry *,
const wchar_t *);
__LA_DECL void archive_entry_set_gid(struct archive_entry *, la_int64_t);
diff --git a/contrib/libarchive/libarchive/archive_entry_link_resolver.c b/contrib/libarchive/libarchive/archive_entry_link_resolver.c
index 6c6173430250..c2fd6895f21e 100644
--- a/contrib/libarchive/libarchive/archive_entry_link_resolver.c
+++ b/contrib/libarchive/libarchive/archive_entry_link_resolver.c
@@ -201,16 +201,26 @@ archive_entry_linkify(struct archive_entry_linkresolver *res,
le = find_entry(res, *e);
if (le != NULL) {
archive_entry_unset_size(*e);
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ archive_entry_copy_hardlink_w(*e,
+ archive_entry_pathname_w(le->canonical));
+#else
archive_entry_copy_hardlink(*e,
archive_entry_pathname(le->canonical));
+#endif
} else
insert_entry(res, *e);
return;
case ARCHIVE_ENTRY_LINKIFY_LIKE_MTREE:
le = find_entry(res, *e);
if (le != NULL) {
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ archive_entry_copy_hardlink_w(*e,
+ archive_entry_pathname_w(le->canonical));
+#else
archive_entry_copy_hardlink(*e,
archive_entry_pathname(le->canonical));
+#endif
} else
insert_entry(res, *e);
return;
@@ -229,8 +239,13 @@ archive_entry_linkify(struct archive_entry_linkresolver *res,
le->entry = t;
/* Make the old entry into a hardlink. */
archive_entry_unset_size(*e);
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ archive_entry_copy_hardlink_w(*e,
+ archive_entry_pathname_w(le->canonical));
+#else
archive_entry_copy_hardlink(*e,
archive_entry_pathname(le->canonical));
+#endif
/* If we ran out of links, return the
* final entry as well. */
if (le->links == 0) {
diff --git a/contrib/libarchive/libarchive/archive_entry_perms.3 b/contrib/libarchive/libarchive/archive_entry_perms.3
index 0291b7b4988b..4bfbfc3c7815 100644
--- a/contrib/libarchive/libarchive/archive_entry_perms.3
+++ b/contrib/libarchive/libarchive/archive_entry_perms.3
@@ -150,6 +150,7 @@ character strings at the same time.
.Fn archive_entry_set_XXX
is an alias for
.Fn archive_entry_copy_XXX .
+The strings are copied, and don't need to outlive the call.
.Ss File Flags
File flags are transparently converted between a bitmap
representation and a textual format.
diff --git a/contrib/libarchive/libarchive/archive_entry_private.h b/contrib/libarchive/libarchive/archive_entry_private.h
index 3423966c60f3..15f2a8ee284c 100644
--- a/contrib/libarchive/libarchive/archive_entry_private.h
+++ b/contrib/libarchive/libarchive/archive_entry_private.h
@@ -149,6 +149,7 @@ struct archive_entry {
#define AE_SET_FILETYPE 1024
#define AE_SET_UID 2048
#define AE_SET_GID 4096
+#define AE_SET_RDEV 8192
/*
* Use aes here so that we get transparent mbs<->wcs conversions.
@@ -157,9 +158,8 @@ struct archive_entry {
unsigned long ae_fflags_set; /* Bitmap fflags */
unsigned long ae_fflags_clear;
struct archive_mstring ae_gname; /* Name of owning group */
- struct archive_mstring ae_hardlink; /* Name of target for hardlink */
+ struct archive_mstring ae_linkname; /* Name of target for hardlink or symlink */
struct archive_mstring ae_pathname; /* Name of entry */
- struct archive_mstring ae_symlink; /* symlink contents */
struct archive_mstring ae_uname; /* Name of owner */
/* Not used within libarchive; useful for some clients. */
diff --git a/contrib/libarchive/libarchive/archive_entry_sparse.c b/contrib/libarchive/libarchive/archive_entry_sparse.c
index b81684d18730..c430896119fb 100644
--- a/contrib/libarchive/libarchive/archive_entry_sparse.c
+++ b/contrib/libarchive/libarchive/archive_entry_sparse.c
@@ -76,7 +76,7 @@ archive_entry_sparse_add_entry(struct archive_entry *entry,
}
}
- if ((sp = (struct ae_sparse *)malloc(sizeof(*sp))) == NULL)
+ if ((sp = malloc(sizeof(*sp))) == NULL)
/* XXX Error XXX */
return;
diff --git a/contrib/libarchive/libarchive/archive_entry_xattr.c b/contrib/libarchive/libarchive/archive_entry_xattr.c
index 14848a5ab2c4..b92e1878bc43 100644
--- a/contrib/libarchive/libarchive/archive_entry_xattr.c
+++ b/contrib/libarchive/libarchive/archive_entry_xattr.c
@@ -90,7 +90,7 @@ archive_entry_xattr_add_entry(struct archive_entry *entry,
{
struct ae_xattr *xp;
- if ((xp = (struct ae_xattr *)malloc(sizeof(struct ae_xattr))) == NULL)
+ if ((xp = malloc(sizeof(struct ae_xattr))) == NULL)
__archive_errx(1, "Out of memory");
if ((xp->name = strdup(name)) == NULL)
diff --git a/contrib/libarchive/libarchive/archive_hmac.c b/contrib/libarchive/libarchive/archive_hmac.c
index edb3bf5abd42..210cca70744d 100644
--- a/contrib/libarchive/libarchive/archive_hmac.c
+++ b/contrib/libarchive/libarchive/archive_hmac.c
@@ -74,7 +74,7 @@ __hmac_sha1_cleanup(archive_hmac_sha1_ctx *ctx)
memset(ctx, 0, sizeof(*ctx));
}
-#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H)
+#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
#ifndef BCRYPT_HASH_REUSABLE_FLAG
# define BCRYPT_HASH_REUSABLE_FLAG 0x00000020
diff --git a/contrib/libarchive/libarchive/archive_hmac_private.h b/contrib/libarchive/libarchive/archive_hmac_private.h
index d0fda7f9667a..1b24ddd1bc94 100644
--- a/contrib/libarchive/libarchive/archive_hmac_private.h
+++ b/contrib/libarchive/libarchive/archive_hmac_private.h
@@ -52,7 +52,7 @@ int __libarchive_hmac_build_hack(void);
typedef CCHmacContext archive_hmac_sha1_ctx;
-#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H)
+#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
#include <bcrypt.h>
typedef struct {
diff --git a/contrib/libarchive/libarchive/archive_match.c b/contrib/libarchive/libarchive/archive_match.c
index 3ab8eda36038..446417a9a2d4 100644
--- a/contrib/libarchive/libarchive/archive_match.c
+++ b/contrib/libarchive/libarchive/archive_match.c
@@ -220,7 +220,7 @@ archive_match_new(void)
{
struct archive_match *a;
- a = (struct archive_match *)calloc(1, sizeof(*a));
+ a = calloc(1, sizeof(*a));
if (a == NULL)
return (NULL);
a->archive.magic = ARCHIVE_MATCH_MAGIC;
diff --git a/contrib/libarchive/libarchive/archive_openssl_evp_private.h b/contrib/libarchive/libarchive/archive_openssl_evp_private.h
index 8ac4772808e6..d5ba7b0d60db 100644
--- a/contrib/libarchive/libarchive/archive_openssl_evp_private.h
+++ b/contrib/libarchive/libarchive/archive_openssl_evp_private.h
@@ -39,7 +39,7 @@
#include <string.h> /* memset */
static inline EVP_MD_CTX *EVP_MD_CTX_new(void)
{
- EVP_MD_CTX *ctx = (EVP_MD_CTX *)calloc(1, sizeof(EVP_MD_CTX));
+ EVP_MD_CTX *ctx = calloc(1, sizeof(EVP_MD_CTX));
return ctx;
}
diff --git a/contrib/libarchive/libarchive/archive_openssl_hmac_private.h b/contrib/libarchive/libarchive/archive_openssl_hmac_private.h
index 25c8dda654fc..8ed76260dde9 100644
--- a/contrib/libarchive/libarchive/archive_openssl_hmac_private.h
+++ b/contrib/libarchive/libarchive/archive_openssl_hmac_private.h
@@ -39,7 +39,7 @@
#include <string.h> /* memset */
static inline HMAC_CTX *HMAC_CTX_new(void)
{
- HMAC_CTX *ctx = (HMAC_CTX *)calloc(1, sizeof(HMAC_CTX));
+ HMAC_CTX *ctx = calloc(1, sizeof(HMAC_CTX));
return ctx;
}
diff --git a/contrib/libarchive/libarchive/archive_ppmd7.c b/contrib/libarchive/libarchive/archive_ppmd7.c
index cc3f778203f9..30124f1743e5 100644
--- a/contrib/libarchive/libarchive/archive_ppmd7.c
+++ b/contrib/libarchive/libarchive/archive_ppmd7.c
@@ -138,7 +138,7 @@ static Bool Ppmd7_Alloc(CPpmd7 *p, UInt32 size)
#else
4 - (size & 3);
#endif
- if ((p->Base = (Byte *)malloc(p->AlignOffset + size
+ if ((p->Base = malloc(p->AlignOffset + size
#ifndef PPMD_32BIT
+ UNIT_SIZE
#endif
diff --git a/contrib/libarchive/libarchive/archive_ppmd8.c b/contrib/libarchive/libarchive/archive_ppmd8.c
index d1779395dac5..2fb7f7141c36 100644
--- a/contrib/libarchive/libarchive/archive_ppmd8.c
+++ b/contrib/libarchive/libarchive/archive_ppmd8.c
@@ -107,7 +107,7 @@ Bool Ppmd8_Alloc(CPpmd8 *p, UInt32 size)
#else
4 - (size & 3);
#endif
- if ((p->Base = (Byte *)malloc(p->AlignOffset + size)) == 0)
+ if ((p->Base = malloc(p->AlignOffset + size)) == 0)
return False;
p->Size = size;
}
@@ -671,7 +671,7 @@ static CTX_PTR CreateSuccessors(CPpmd8 *p, Bool skip, CPpmd_State *s1, CTX_PTR c
upState.Freq = (Byte)(1 + ((2 * cf <= s0) ? (5 * cf > s0) : ((cf + 2 * s0 - 3) / s0)));
}
- do
+ while (numPs != 0)
{
/* Create Child */
CTX_PTR c1; /* = AllocContext(p); */
@@ -692,8 +692,7 @@ static CTX_PTR CreateSuccessors(CPpmd8 *p, Bool skip, CPpmd_State *s1, CTX_PTR c
SetSuccessor(ps[--numPs], REF(c1));
c = c1;
}
- while (numPs != 0);
-
+
return c;
}
diff --git a/contrib/libarchive/libarchive/archive_private.h b/contrib/libarchive/libarchive/archive_private.h
index 0f05169b7d25..050fc63c0b2e 100644
--- a/contrib/libarchive/libarchive/archive_private.h
+++ b/contrib/libarchive/libarchive/archive_private.h
@@ -27,8 +27,10 @@
#define ARCHIVE_PRIVATE_H_INCLUDED
#ifndef __LIBARCHIVE_BUILD
+#ifndef __LIBARCHIVE_TEST
#error This header is only to be used internally to libarchive.
#endif
+#endif
#if HAVE_ICONV_H
#include <iconv.h>
@@ -158,9 +160,9 @@ __LA_NORETURN void __archive_errx(int retvalue, const char *msg);
void __archive_ensure_cloexec_flag(int fd);
int __archive_mktemp(const char *tmpdir);
#if defined(_WIN32) && !defined(__CYGWIN__)
-int __archive_mkstemp(wchar_t *template);
+int __archive_mkstemp(wchar_t *templates);
#else
-int __archive_mkstemp(char *template);
+int __archive_mkstemp(char *templates);
#endif
int __archive_clean(struct archive *);
diff --git a/contrib/libarchive/libarchive/archive_read.c b/contrib/libarchive/libarchive/archive_read.c
index d71fc2b7cc04..822c534b868a 100644
--- a/contrib/libarchive/libarchive/archive_read.c
+++ b/contrib/libarchive/libarchive/archive_read.c
@@ -92,7 +92,7 @@ archive_read_new(void)
{
struct archive_read *a;
- a = (struct archive_read *)calloc(1, sizeof(*a));
+ a = calloc(1, sizeof(*a));
if (a == NULL)
return (NULL);
a->archive.magic = ARCHIVE_READ_MAGIC;
@@ -582,7 +582,7 @@ choose_filters(struct archive_read *a)
}
filter
- = (struct archive_read_filter *)calloc(1, sizeof(*filter));
+ = calloc(1, sizeof(*filter));
if (filter == NULL)
return (ARCHIVE_FATAL);
filter->bidder = best_bidder;
@@ -1382,7 +1382,7 @@ __archive_read_filter_ahead(struct archive_read_filter *filter,
if (filter->client_avail <= 0) {
if (filter->end_of_file) {
if (avail != NULL)
- *avail = 0;
+ *avail = filter->avail;
return (NULL);
}
bytes_read = (filter->vtable->read)(filter,
@@ -1451,7 +1451,7 @@ __archive_read_filter_ahead(struct archive_read_filter *filter,
s = t;
}
/* Now s >= min, so allocate a new buffer. */
- p = (char *)malloc(s);
+ p = malloc(s);
if (p == NULL) {
archive_set_error(
&filter->archive->archive,
diff --git a/contrib/libarchive/libarchive/archive_read_append_filter.c b/contrib/libarchive/libarchive/archive_read_append_filter.c
index 74eead83e0e7..a3986e9b6e88 100644
--- a/contrib/libarchive/libarchive/archive_read_append_filter.c
+++ b/contrib/libarchive/libarchive/archive_read_append_filter.c
@@ -111,7 +111,7 @@ archive_read_append_filter(struct archive *_a, int code)
number_bidders = sizeof(a->bidders) / sizeof(a->bidders[0]);
bidder = a->bidders;
- for (i = 0; i < number_bidders; i++, bidder++)
+ for (i = 1; i < number_bidders; i++, bidder++)
{
if (!bidder->name || !strcmp(bidder->name, str))
break;
@@ -123,8 +123,7 @@ archive_read_append_filter(struct archive *_a, int code)
return (ARCHIVE_FATAL);
}
- filter
- = (struct archive_read_filter *)calloc(1, sizeof(*filter));
+ filter = calloc(1, sizeof(*filter));
if (filter == NULL)
{
archive_set_error(&a->archive, ENOMEM, "Out of memory");
@@ -180,8 +179,7 @@ archive_read_append_filter_program_signature(struct archive *_a,
return (ARCHIVE_FATAL);
}
- filter
- = (struct archive_read_filter *)calloc(1, sizeof(*filter));
+ filter = calloc(1, sizeof(*filter));
if (filter == NULL)
{
archive_set_error(&a->archive, ENOMEM, "Out of memory");
diff --git a/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c b/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c
index d89f435554f6..3a4915eff406 100644
--- a/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c
+++ b/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c
@@ -520,6 +520,7 @@ setup_xattr(struct archive_read_disk *a,
if (size == -1) {
archive_set_error(&a->archive, errno,
"Couldn't read extended attribute");
+ free(value);
return (ARCHIVE_WARN);
}
diff --git a/contrib/libarchive/libarchive/archive_read_disk_posix.c b/contrib/libarchive/libarchive/archive_read_disk_posix.c
index 76a4fa44de72..09965eb98a2e 100644
--- a/contrib/libarchive/libarchive/archive_read_disk_posix.c
+++ b/contrib/libarchive/libarchive/archive_read_disk_posix.c
@@ -451,7 +451,7 @@ archive_read_disk_new(void)
{
struct archive_read_disk *a;
- a = (struct archive_read_disk *)calloc(1, sizeof(*a));
+ a = calloc(1, sizeof(*a));
if (a == NULL)
return (NULL);
a->archive.magic = ARCHIVE_READ_DISK_MAGIC;
diff --git a/contrib/libarchive/libarchive/archive_read_extract2.c b/contrib/libarchive/libarchive/archive_read_extract2.c
index e11cac1590e9..7cf38c301176 100644
--- a/contrib/libarchive/libarchive/archive_read_extract2.c
+++ b/contrib/libarchive/libarchive/archive_read_extract2.c
@@ -51,7 +51,7 @@ struct archive_read_extract *
__archive_read_get_extract(struct archive_read *a)
{
if (a->extract == NULL) {
- a->extract = (struct archive_read_extract *)calloc(1, sizeof(*a->extract));
+ a->extract = calloc(1, sizeof(*a->extract));
if (a->extract == NULL) {
archive_set_error(&a->archive, ENOMEM, "Can't extract");
return (NULL);
diff --git a/contrib/libarchive/libarchive/archive_read_open_fd.c b/contrib/libarchive/libarchive/archive_read_open_fd.c
index 3ee2423d300e..debfde208687 100644
--- a/contrib/libarchive/libarchive/archive_read_open_fd.c
+++ b/contrib/libarchive/libarchive/archive_read_open_fd.c
@@ -74,7 +74,7 @@ archive_read_open_fd(struct archive *a, int fd, size_t block_size)
return (ARCHIVE_FATAL);
}
- mine = (struct read_fd_data *)calloc(1, sizeof(*mine));
+ mine = calloc(1, sizeof(*mine));
b = malloc(block_size);
if (mine == NULL || b == NULL) {
archive_set_error(a, ENOMEM, "No memory");
diff --git a/contrib/libarchive/libarchive/archive_read_open_file.c b/contrib/libarchive/libarchive/archive_read_open_file.c
index dcf1d4698569..cf49ebd8fc9a 100644
--- a/contrib/libarchive/libarchive/archive_read_open_file.c
+++ b/contrib/libarchive/libarchive/archive_read_open_file.c
@@ -69,7 +69,7 @@ archive_read_open_FILE(struct archive *a, FILE *f)
void *b;
archive_clear_error(a);
- mine = (struct read_FILE_data *)malloc(sizeof(*mine));
+ mine = malloc(sizeof(*mine));
b = malloc(block_size);
if (mine == NULL || b == NULL) {
archive_set_error(a, ENOMEM, "No memory");
diff --git a/contrib/libarchive/libarchive/archive_read_open_filename.c b/contrib/libarchive/libarchive/archive_read_open_filename.c
index dd2e16022844..8def020fff38 100644
--- a/contrib/libarchive/libarchive/archive_read_open_filename.c
+++ b/contrib/libarchive/libarchive/archive_read_open_filename.c
@@ -122,7 +122,7 @@ archive_read_open_filenames(struct archive *a, const char **filenames,
{
if (filename == NULL)
filename = "";
- mine = (struct read_file_data *)calloc(1,
+ mine = calloc(1,
sizeof(*mine) + strlen(filename));
if (mine == NULL)
goto no_memory;
@@ -175,7 +175,7 @@ archive_read_open_filenames_w(struct archive *a, const wchar_t **wfilenames,
{
if (wfilename == NULL)
wfilename = L"";
- mine = (struct read_file_data *)calloc(1,
+ mine = calloc(1,
sizeof(*mine) + wcslen(wfilename) * sizeof(wchar_t));
if (mine == NULL)
goto no_memory;
diff --git a/contrib/libarchive/libarchive/archive_read_open_memory.c b/contrib/libarchive/libarchive/archive_read_open_memory.c
index a057ce643890..460bb5ae6a4d 100644
--- a/contrib/libarchive/libarchive/archive_read_open_memory.c
+++ b/contrib/libarchive/libarchive/archive_read_open_memory.c
@@ -69,7 +69,7 @@ archive_read_open_memory2(struct archive *a, const void *buff,
{
struct read_memory_data *mine;
- mine = (struct read_memory_data *)calloc(1, sizeof(*mine));
+ mine = calloc(1, sizeof(*mine));
if (mine == NULL) {
archive_set_error(a, ENOMEM, "No memory");
return (ARCHIVE_FATAL);
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_bzip2.c b/contrib/libarchive/libarchive/archive_read_support_filter_bzip2.c
index 0392d450a203..479237c27792 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_bzip2.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_bzip2.c
@@ -190,8 +190,8 @@ bzip2_reader_init(struct archive_read_filter *self)
self->code = ARCHIVE_FILTER_BZIP2;
self->name = "bzip2";
- state = (struct private_data *)calloc(1, sizeof(*state));
- out_block = (unsigned char *)malloc(out_block_size);
+ state = calloc(1, sizeof(*state));
+ out_block = malloc(out_block_size);
if (state == NULL || out_block == NULL) {
archive_set_error(&self->archive->archive, ENOMEM,
"Can't allocate data for bzip2 decompression");
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_compress.c b/contrib/libarchive/libarchive/archive_read_support_filter_compress.c
index 36a3dbdea23c..e139674df450 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_compress.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_compress.c
@@ -217,7 +217,7 @@ compress_bidder_init(struct archive_read_filter *self)
self->code = ARCHIVE_FILTER_COMPRESS;
self->name = "compress (.Z)";
- state = (struct private_data *)calloc(1, sizeof(*state));
+ state = calloc(1, sizeof(*state));
out_block = malloc(out_block_size);
if (state == NULL || out_block == NULL) {
free(out_block);
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_gzip.c b/contrib/libarchive/libarchive/archive_read_support_filter_gzip.c
index 152ea9bdbd7c..726385e328a0 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_gzip.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_gzip.c
@@ -123,6 +123,8 @@ archive_read_support_filter_gzip(struct archive *_a)
* number of bytes in header. If pbits is non-NULL, it receives a
* count of bits verified, suitable for use by bidder.
*/
+#define MAX_FILENAME_LENGTH (1024 * 1024L)
+#define MAX_COMMENT_LENGTH (1024 * 1024L)
static ssize_t
peek_at_header(struct archive_read_filter *filter, int *pbits,
#ifdef HAVE_ZLIB_H
@@ -180,9 +182,13 @@ peek_at_header(struct archive_read_filter *filter, int *pbits,
#endif
do {
++len;
- if (avail < len)
+ if (avail < len) {
+ if (avail > MAX_FILENAME_LENGTH) {
+ return (0);
+ }
p = __archive_read_filter_ahead(filter,
len, &avail);
+ }
if (p == NULL)
return (0);
} while (p[len - 1] != 0);
@@ -200,9 +206,13 @@ peek_at_header(struct archive_read_filter *filter, int *pbits,
if (header_flags & 16) {
do {
++len;
- if (avail < len)
+ if (avail < len) {
+ if (avail > MAX_COMMENT_LENGTH) {
+ return (0);
+ }
p = __archive_read_filter_ahead(filter,
len, &avail);
+ }
if (p == NULL)
return (0);
} while (p[len - 1] != 0);
@@ -307,8 +317,8 @@ gzip_bidder_init(struct archive_read_filter *self)
self->code = ARCHIVE_FILTER_GZIP;
self->name = "gzip";
- state = (struct private_data *)calloc(1, sizeof(*state));
- out_block = (unsigned char *)malloc(out_block_size);
+ state = calloc(1, sizeof(*state));
+ out_block = malloc(out_block_size);
if (state == NULL || out_block == NULL) {
free(out_block);
free(state);
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c b/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c
index bccf4fb8f82d..8c9777156409 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c
@@ -223,7 +223,7 @@ lz4_reader_init(struct archive_read_filter *self)
self->code = ARCHIVE_FILTER_LZ4;
self->name = "lz4";
- state = (struct private_data *)calloc(1, sizeof(*state));
+ state = calloc(1, sizeof(*state));
if (state == NULL) {
archive_set_error(&self->archive->archive, ENOMEM,
"Can't allocate data for lz4 decompression");
@@ -248,7 +248,7 @@ lz4_allocate_out_block(struct archive_read_filter *self)
out_block_size += 64 * 1024;
if (state->out_block_size < out_block_size) {
free(state->out_block);
- out_block = (unsigned char *)malloc(out_block_size);
+ out_block = malloc(out_block_size);
state->out_block_size = out_block_size;
if (out_block == NULL) {
archive_set_error(&self->archive->archive, ENOMEM,
@@ -271,7 +271,7 @@ lz4_allocate_out_block_for_legacy(struct archive_read_filter *self)
if (state->out_block_size < out_block_size) {
free(state->out_block);
- out_block = (unsigned char *)malloc(out_block_size);
+ out_block = malloc(out_block_size);
state->out_block_size = out_block_size;
if (out_block == NULL) {
archive_set_error(&self->archive->archive, ENOMEM,
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_lzop.c b/contrib/libarchive/libarchive/archive_read_support_filter_lzop.c
index e971063dc68f..b0c4bb13e8b3 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_lzop.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_lzop.c
@@ -185,7 +185,7 @@ lzop_bidder_init(struct archive_read_filter *self)
self->code = ARCHIVE_FILTER_LZOP;
self->name = "lzop";
- state = (struct read_lzop *)calloc(1, sizeof(*state));
+ state = calloc(1, sizeof(*state));
if (state == NULL) {
archive_set_error(&self->archive->archive, ENOMEM,
"Can't allocate data for lzop decompression");
@@ -291,7 +291,8 @@ consume_header(struct archive_read_filter *self)
if (p == NULL)
goto truncated;
len = archive_be32dec(p);
- __archive_read_filter_consume(self->upstream, len + 4 + 4);
+ __archive_read_filter_consume(self->upstream,
+ (int64_t)len + 4 + 4);
}
state->flags = flags;
state->in_stream = 1;
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_program.c b/contrib/libarchive/libarchive/archive_read_support_filter_program.c
index 0482c57c18eb..9e825223b26c 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_program.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_program.c
@@ -139,7 +139,7 @@ archive_read_support_filter_program_signature(struct archive *_a,
/*
* Allocate our private state.
*/
- state = (struct program_bidder *)calloc(1, sizeof (*state));
+ state = calloc(1, sizeof (*state));
if (state == NULL)
goto memerr;
state->cmd = strdup(cmd);
@@ -398,8 +398,8 @@ __archive_read_program(struct archive_read_filter *self, const char *cmd)
size_t l;
l = strlen(prefix) + strlen(cmd) + 1;
- state = (struct program_filter *)calloc(1, sizeof(*state));
- out_buf = (char *)malloc(out_buf_len);
+ state = calloc(1, sizeof(*state));
+ out_buf = malloc(out_buf_len);
if (state == NULL || out_buf == NULL ||
archive_string_ensure(&state->description, l) == NULL) {
archive_set_error(&self->archive->archive, ENOMEM,
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_rpm.c b/contrib/libarchive/libarchive/archive_read_support_filter_rpm.c
index 87e9f2ec1939..25ace4a25bc9 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_rpm.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_rpm.c
@@ -39,8 +39,8 @@
struct rpm {
int64_t total_in;
- size_t hpos;
- size_t hlen;
+ uint64_t hpos;
+ uint64_t hlen;
unsigned char header[16];
enum {
ST_LEAD, /* Skipping 'Lead' section. */
@@ -53,7 +53,8 @@ struct rpm {
} state;
int first_header;
};
-#define RPM_LEAD_SIZE 96 /* Size of 'Lead' section. */
+#define RPM_LEAD_SIZE 96 /* Size of 'Lead' section. */
+#define RPM_MIN_HEAD_SIZE 16 /* Minimum size of 'Head'. */
static int rpm_bidder_bid(struct archive_read_filter_bidder *,
struct archive_read_filter *);
@@ -63,6 +64,8 @@ static ssize_t rpm_filter_read(struct archive_read_filter *,
const void **);
static int rpm_filter_close(struct archive_read_filter *);
+static inline size_t rpm_limit_bytes(uint64_t, size_t);
+
#if ARCHIVE_VERSION_NUMBER < 4000000
/* Deprecated; remove in libarchive 4.0 */
int
@@ -141,7 +144,7 @@ rpm_bidder_init(struct archive_read_filter *self)
self->code = ARCHIVE_FILTER_RPM;
self->name = "rpm";
- rpm = (struct rpm *)calloc(1, sizeof(*rpm));
+ rpm = calloc(1, sizeof(*rpm));
if (rpm == NULL) {
archive_set_error(&self->archive->archive, ENOMEM,
"Can't allocate data for rpm");
@@ -155,15 +158,21 @@ rpm_bidder_init(struct archive_read_filter *self)
return (ARCHIVE_OK);
}
+static inline size_t
+rpm_limit_bytes(uint64_t bytes, size_t max)
+{
+ return (bytes > max ? max : (size_t)bytes);
+}
+
static ssize_t
rpm_filter_read(struct archive_read_filter *self, const void **buff)
{
struct rpm *rpm;
const unsigned char *b;
- ssize_t avail_in, total;
- size_t used, n;
- uint32_t section;
- uint32_t bytes;
+ ssize_t avail_in, total, used;
+ size_t n;
+ uint64_t section;
+ uint64_t bytes;
rpm = (struct rpm *)self->data;
*buff = NULL;
@@ -197,15 +206,14 @@ rpm_filter_read(struct archive_read_filter *self, const void **buff)
}
break;
case ST_HEADER:
- n = 16 - rpm->hpos;
- if (n > avail_in - used)
- n = avail_in - used;
+ n = rpm_limit_bytes(RPM_MIN_HEAD_SIZE - rpm->hpos,
+ avail_in - used);
memcpy(rpm->header+rpm->hpos, b, n);
b += n;
used += n;
rpm->hpos += n;
- if (rpm->hpos == 16) {
+ if (rpm->hpos == RPM_MIN_HEAD_SIZE) {
if (rpm->header[0] != 0x8e ||
rpm->header[1] != 0xad ||
rpm->header[2] != 0xe8 ||
@@ -219,21 +227,20 @@ rpm_filter_read(struct archive_read_filter *self, const void **buff)
}
rpm->state = ST_ARCHIVE;
*buff = rpm->header;
- total = rpm->hpos;
+ total = RPM_MIN_HEAD_SIZE;
break;
}
/* Calculate 'Header' length. */
section = archive_be32dec(rpm->header+8);
bytes = archive_be32dec(rpm->header+12);
- rpm->hlen = 16 + section * 16 + bytes;
+ rpm->hlen = rpm->hpos + section * 16 + bytes;
rpm->state = ST_HEADER_DATA;
rpm->first_header = 0;
}
break;
case ST_HEADER_DATA:
- n = rpm->hlen - rpm->hpos;
- if (n > avail_in - used)
- n = avail_in - used;
+ n = rpm_limit_bytes(rpm->hlen - rpm->hpos,
+ avail_in - used);
b += n;
used += n;
rpm->hpos += n;
@@ -241,7 +248,7 @@ rpm_filter_read(struct archive_read_filter *self, const void **buff)
rpm->state = ST_PADDING;
break;
case ST_PADDING:
- while (used < (size_t)avail_in) {
+ while (used < avail_in) {
if (*b != 0) {
/* Read next header. */
rpm->state = ST_HEADER;
@@ -259,7 +266,7 @@ rpm_filter_read(struct archive_read_filter *self, const void **buff)
used = avail_in;
break;
}
- if (used == (size_t)avail_in) {
+ if (used == avail_in) {
rpm->total_in += used;
__archive_read_filter_consume(self->upstream, used);
b = NULL;
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_uu.c b/contrib/libarchive/libarchive/archive_read_support_filter_uu.c
index 689ceb8f8760..d722fe343657 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_uu.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_uu.c
@@ -43,11 +43,13 @@
/* Maximum lookahead during bid phase */
#define UUENCODE_BID_MAX_READ 128*1024 /* in bytes */
+#define UUENCODE_MAX_LINE_LENGTH 34*1024 /* in bytes */
+
struct uudecode {
int64_t total;
unsigned char *in_buff;
#define IN_BUFF_SIZE (1024)
- int in_cnt;
+ ssize_t in_cnt;
size_t in_allocated;
unsigned char *out_buff;
#define OUT_BUFF_SIZE (64 * 1024)
@@ -373,7 +375,7 @@ uudecode_bidder_init(struct archive_read_filter *self)
self->code = ARCHIVE_FILTER_UU;
self->name = "uu";
- uudecode = (struct uudecode *)calloc(1, sizeof(*uudecode));
+ uudecode = calloc(1, sizeof(*uudecode));
out_buff = malloc(OUT_BUFF_SIZE);
in_buff = malloc(IN_BUFF_SIZE);
if (uudecode == NULL || out_buff == NULL || in_buff == NULL) {
@@ -484,6 +486,12 @@ read_more:
goto finish;
}
if (uudecode->in_cnt) {
+ if (uudecode->in_cnt > UUENCODE_MAX_LINE_LENGTH) {
+ archive_set_error(&self->archive->archive,
+ ARCHIVE_ERRNO_FILE_FORMAT,
+ "Invalid format data");
+ return (ARCHIVE_FATAL);
+ }
/*
* If there is remaining data which is saved by
* previous calling, use it first.
@@ -498,7 +506,7 @@ read_more:
uudecode->in_cnt = 0;
}
for (;used < avail_in; d += llen, used += llen) {
- int64_t l, body;
+ ssize_t l, body;
b = d;
len = get_line(b, avail_in - used, &nl);
@@ -533,7 +541,7 @@ read_more:
return (ARCHIVE_FATAL);
if (uudecode->in_buff != b)
memmove(uudecode->in_buff, b, len);
- uudecode->in_cnt = (int)len;
+ uudecode->in_cnt = len;
if (total == 0) {
/* Do not return 0; it means end-of-file.
* We should try to read bytes more. */
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_xz.c b/contrib/libarchive/libarchive/archive_read_support_filter_xz.c
index e55fb00edb34..dcbf734ecacb 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_xz.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_xz.c
@@ -476,8 +476,8 @@ xz_lzma_bidder_init(struct archive_read_filter *self)
struct private_data *state;
int ret;
- state = (struct private_data *)calloc(1, sizeof(*state));
- out_block = (unsigned char *)malloc(out_block_size);
+ state = calloc(1, sizeof(*state));
+ out_block = malloc(out_block_size);
if (state == NULL || out_block == NULL) {
archive_set_error(&self->archive->archive, ENOMEM,
"Can't allocate data for xz decompression");
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_zstd.c b/contrib/libarchive/libarchive/archive_read_support_filter_zstd.c
index f7326d2430d3..9a1dd71abdf6 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_zstd.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_zstd.c
@@ -175,8 +175,8 @@ zstd_bidder_init(struct archive_read_filter *self)
self->code = ARCHIVE_FILTER_ZSTD;
self->name = "zstd";
- state = (struct private_data *)calloc(1, sizeof(*state));
- out_block = (unsigned char *)malloc(out_block_size);
+ state = calloc(1, sizeof(*state));
+ out_block = malloc(out_block_size);
dstream = ZSTD_createDStream();
if (state == NULL || out_block == NULL || dstream == NULL) {
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_7zip.c b/contrib/libarchive/libarchive/archive_read_support_format_7zip.c
index 7e465935c902..b4e34d68dbba 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_7zip.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_7zip.c
@@ -767,29 +767,27 @@ archive_read_format_7zip_read_header(struct archive_read *a,
if (zip_entry->attr & supported_attrs) {
char *fflags_text, *ptr;
- /* allocate for "rdonly,hidden,system," */
- fflags_text = malloc(22 * sizeof(char));
+ /* allocate for ",rdonly,hidden,system" */
+ fflags_text = malloc(22 * sizeof(*fflags_text));
if (fflags_text != NULL) {
ptr = fflags_text;
- if (zip_entry->attr & FILE_ATTRIBUTE_READONLY) {
- strcpy(ptr, "rdonly,");
- ptr = ptr + 7;
- }
- if (zip_entry->attr & FILE_ATTRIBUTE_HIDDEN) {
- strcpy(ptr, "hidden,");
- ptr = ptr + 7;
- }
- if (zip_entry->attr & FILE_ATTRIBUTE_SYSTEM) {
- strcpy(ptr, "system,");
- ptr = ptr + 7;
- }
- if (ptr > fflags_text) {
- /* Delete trailing comma */
- *(ptr - 1) = '\0';
- archive_entry_copy_fflags_text(entry,
- fflags_text);
- }
- free(fflags_text);
+ if (zip_entry->attr & FILE_ATTRIBUTE_READONLY) {
+ strcpy(ptr, ",rdonly");
+ ptr = ptr + 7;
+ }
+ if (zip_entry->attr & FILE_ATTRIBUTE_HIDDEN) {
+ strcpy(ptr, ",hidden");
+ ptr = ptr + 7;
+ }
+ if (zip_entry->attr & FILE_ATTRIBUTE_SYSTEM) {
+ strcpy(ptr, ",system");
+ ptr = ptr + 7;
+ }
+ if (ptr > fflags_text) {
+ archive_entry_copy_fflags_text(entry,
+ fflags_text + 1);
+ }
+ free(fflags_text);
}
}
@@ -835,9 +833,20 @@ archive_read_format_7zip_read_header(struct archive_read *a,
zip_entry->mode |= AE_IFREG;
archive_entry_set_mode(entry, zip_entry->mode);
} else {
+ struct archive_string_conv* utf8_conv;
+
symname[symsize] = '\0';
- archive_entry_copy_symlink(entry,
- (const char *)symname);
+
+ /* Symbolic links are embedded as UTF-8 strings */
+ utf8_conv = archive_string_conversion_from_charset(&a->archive,
+ "UTF-8", 1);
+ if (utf8_conv == NULL) {
+ free(symname);
+ return ARCHIVE_FATAL;
+ }
+
+ archive_entry_copy_symlink_l(entry, (const char*)symname, symsize,
+ utf8_conv);
}
free(symname);
archive_entry_set_size(entry, 0);
@@ -877,10 +886,9 @@ archive_read_format_7zip_read_data(struct archive_read *a,
if (zip->end_of_entry)
return (ARCHIVE_EOF);
- const uint64_t max_read_size = 16 * 1024 * 1024; // Don't try to read more than 16 MB at a time
- size_t bytes_to_read = max_read_size;
+ size_t bytes_to_read = 16 * 1024 * 1024; // Don't try to read more than 16 MB at a time
if ((uint64_t)bytes_to_read > zip->entry_bytes_remaining) {
- bytes_to_read = zip->entry_bytes_remaining;
+ bytes_to_read = (size_t)zip->entry_bytes_remaining;
}
bytes = read_stream(a, buff, bytes_to_read, 0);
if (bytes < 0)
@@ -1063,8 +1071,8 @@ ppmd_read(void *p)
*/
ssize_t bytes_avail = 0;
const uint8_t* data = __archive_read_ahead(a,
- zip->ppstream.stream_in+1, &bytes_avail);
- if(bytes_avail < zip->ppstream.stream_in+1) {
+ (size_t)zip->ppstream.stream_in+1, &bytes_avail);
+ if(data == NULL || bytes_avail < zip->ppstream.stream_in+1) {
archive_set_error(&a->archive,
ARCHIVE_ERRNO_FILE_FORMAT,
"Truncated 7z file data");
@@ -1767,6 +1775,10 @@ free_decompression(struct archive_read *a, struct _7zip *zip)
zip->stream_valid = 0;
}
#endif
+#ifdef HAVE_ZSTD_H
+ if (zip->zstdstream_valid)
+ ZSTD_freeDStream(zip->zstd_dstream);
+#endif
if (zip->ppmd7_valid) {
__archive_ppmd7_functions.Ppmd7_Free(
&zip->ppmd7_context);
@@ -2308,7 +2320,7 @@ read_SubStreamsInfo(struct archive_read *a, struct _7z_substream_info *ss,
usizes = ss->unpackSizes;
for (i = 0; i < numFolders; i++) {
unsigned pack;
- uint64_t sum;
+ uint64_t size, sum;
if (f[i].numUnpackStreams == 0)
continue;
@@ -2318,10 +2330,15 @@ read_SubStreamsInfo(struct archive_read *a, struct _7z_substream_info *ss,
for (pack = 1; pack < f[i].numUnpackStreams; pack++) {
if (parse_7zip_uint64(a, usizes) < 0)
return (-1);
+ if (*usizes > UINT64_MAX - sum)
+ return (-1);
sum += *usizes++;
}
}
- *usizes++ = folder_uncompressed_size(&f[i]) - sum;
+ size = folder_uncompressed_size(&f[i]);
+ if (size < sum)
+ return (-1);
+ *usizes++ = size - sum;
}
if (type == kSize) {
@@ -2415,6 +2432,8 @@ read_StreamsInfo(struct archive_read *a, struct _7z_stream_info *si)
packPos = si->pi.pos;
for (i = 0; i < si->pi.numPackStreams; i++) {
si->pi.positions[i] = packPos;
+ if (packPos > UINT64_MAX - si->pi.sizes[i])
+ return (-1);
packPos += si->pi.sizes[i];
if (packPos > zip->header_offset)
return (-1);
@@ -2436,6 +2455,10 @@ read_StreamsInfo(struct archive_read *a, struct _7z_stream_info *si)
f = si->ci.folders;
for (i = 0; i < si->ci.numFolders; i++) {
f[i].packIndex = packIndex;
+ if (f[i].numPackedStreams > UINT32_MAX)
+ return (-1);
+ if (packIndex > UINT32_MAX - (uint32_t)f[i].numPackedStreams)
+ return (-1);
packIndex += (uint32_t)f[i].numPackedStreams;
if (packIndex > si->pi.numPackStreams)
return (-1);
@@ -3000,7 +3023,7 @@ slurp_central_directory(struct archive_read *a, struct _7zip *zip,
/* CRC check. */
if (crc32(0, (const unsigned char *)p + 12, 20)
!= archive_le32dec(p + 8)) {
-#ifdef DONT_FAIL_ON_CRC_ERROR
+#ifndef DONT_FAIL_ON_CRC_ERROR
archive_set_error(&a->archive, -1, "Header CRC error");
return (ARCHIVE_FATAL);
#endif
@@ -3142,7 +3165,7 @@ get_uncompressed_data(struct archive_read *a, const void **buff, size_t size,
/* Copy mode. */
*buff = __archive_read_ahead(a, minimum, &bytes_avail);
- if (bytes_avail <= 0) {
+ if (*buff == NULL) {
archive_set_error(&a->archive,
ARCHIVE_ERRNO_FILE_FORMAT,
"Truncated 7-Zip file data");
@@ -3448,7 +3471,7 @@ read_stream(struct archive_read *a, const void **buff, size_t size,
/*
* Skip the bytes we already has skipped in skip_stream().
*/
- while (skip_bytes) {
+ while (1) {
ssize_t skipped;
if (zip->uncompressed_buffer_bytes_remaining == 0) {
@@ -3468,6 +3491,10 @@ read_stream(struct archive_read *a, const void **buff, size_t size,
return (ARCHIVE_FATAL);
}
}
+
+ if (!skip_bytes)
+ break;
+
skipped = get_uncompressed_data(
a, buff, (size_t)skip_bytes, 0);
if (skipped < 0)
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_ar.c b/contrib/libarchive/libarchive/archive_read_support_format_ar.c
index 6f1be8591fef..6dfe2939d090 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_ar.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_ar.c
@@ -103,7 +103,7 @@ archive_read_support_format_ar(struct archive *_a)
archive_check_magic(_a, ARCHIVE_READ_MAGIC,
ARCHIVE_STATE_NEW, "archive_read_support_format_ar");
- ar = (struct ar *)calloc(1, sizeof(*ar));
+ ar = calloc(1, sizeof(*ar));
if (ar == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate ar data");
@@ -368,7 +368,7 @@ _ar_read_header(struct archive_read *a, struct archive_entry *entry,
return (ARCHIVE_FATAL);
}
/* Store it in the entry. */
- p = (char *)malloc(bsd_name_length + 1);
+ p = malloc(bsd_name_length + 1);
if (p == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate fname buffer");
@@ -439,9 +439,9 @@ archive_read_format_ar_read_header(struct archive_read *a,
if ((header_data = __archive_read_ahead(a, 60, NULL)) == NULL)
/* Broken header. */
return (ARCHIVE_EOF);
-
+
unconsumed = 60;
-
+
ret = _ar_read_header(a, entry, ar, (const char *)header_data, &unconsumed);
if (unconsumed)
@@ -458,7 +458,6 @@ ar_parse_common_header(struct ar *ar, struct archive_entry *entry,
uint64_t n;
/* Copy remaining header */
- archive_entry_set_filetype(entry, AE_IFREG);
archive_entry_set_mtime(entry,
(time_t)ar_atol10(h + AR_date_offset, AR_date_size), 0L);
archive_entry_set_uid(entry,
@@ -467,6 +466,7 @@ ar_parse_common_header(struct ar *ar, struct archive_entry *entry,
(gid_t)ar_atol10(h + AR_gid_offset, AR_gid_size));
archive_entry_set_mode(entry,
(mode_t)ar_atol8(h + AR_mode_offset, AR_mode_size));
+ archive_entry_set_filetype(entry, AE_IFREG);
n = ar_atol10(h + AR_size_offset, AR_size_size);
ar->entry_offset = 0;
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_cab.c b/contrib/libarchive/libarchive/archive_read_support_format_cab.c
index 3b552a84de12..e012248a5bc2 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_cab.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_cab.c
@@ -356,7 +356,7 @@ archive_read_support_format_cab(struct archive *_a)
archive_check_magic(_a, ARCHIVE_READ_MAGIC,
ARCHIVE_STATE_NEW, "archive_read_support_format_cab");
- cab = (struct cab *)calloc(1, sizeof(*cab));
+ cab = calloc(1, sizeof(*cab));
if (cab == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate CAB data");
@@ -717,7 +717,7 @@ cab_read_header(struct archive_read *a)
/*
* Read CFFOLDER.
*/
- hd->folder_array = (struct cffolder *)calloc(
+ hd->folder_array = calloc(
hd->folder_count, sizeof(struct cffolder));
if (hd->folder_array == NULL)
goto nomem;
@@ -780,7 +780,7 @@ cab_read_header(struct archive_read *a)
cab->cab_offset += skip;
}
/* Allocate memory for CFDATA */
- hd->file_array = (struct cffile *)calloc(
+ hd->file_array = calloc(
hd->file_count, sizeof(struct cffile));
if (hd->file_array == NULL)
goto nomem;
@@ -1412,7 +1412,7 @@ cab_read_ahead_cfdata_deflate(struct archive_read *a, ssize_t *avail)
if (cab->uncompressed_buffer == NULL) {
cab->uncompressed_buffer_size = 0x8000;
cab->uncompressed_buffer
- = (unsigned char *)malloc(cab->uncompressed_buffer_size);
+ = malloc(cab->uncompressed_buffer_size);
if (cab->uncompressed_buffer == NULL) {
archive_set_error(&a->archive, ENOMEM,
"No memory for CAB reader");
@@ -1641,7 +1641,7 @@ cab_read_ahead_cfdata_lzx(struct archive_read *a, ssize_t *avail)
if (cab->uncompressed_buffer == NULL) {
cab->uncompressed_buffer_size = 0x8000;
cab->uncompressed_buffer
- = (unsigned char *)malloc(cab->uncompressed_buffer_size);
+ = malloc(cab->uncompressed_buffer_size);
if (cab->uncompressed_buffer == NULL) {
archive_set_error(&a->archive, ENOMEM,
"No memory for CAB reader");
@@ -1682,7 +1682,7 @@ cab_read_ahead_cfdata_lzx(struct archive_read *a, ssize_t *avail)
cfdata->uncompressed_size - cab->xstrm.total_out;
d = __archive_read_ahead(a, 1, &bytes_avail);
- if (bytes_avail <= 0) {
+ if (d == NULL) {
archive_set_error(&a->archive,
ARCHIVE_ERRNO_FILE_FORMAT,
"Truncated CAB file data");
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_cpio.c b/contrib/libarchive/libarchive/archive_read_support_format_cpio.c
index dcff23f694a7..42a89c1b69c4 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_cpio.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_cpio.c
@@ -228,7 +228,7 @@ archive_read_support_format_cpio(struct archive *_a)
archive_check_magic(_a, ARCHIVE_READ_MAGIC,
ARCHIVE_STATE_NEW, "archive_read_support_format_cpio");
- cpio = (struct cpio *)calloc(1, sizeof(*cpio));
+ cpio = calloc(1, sizeof(*cpio));
if (cpio == NULL) {
archive_set_error(&a->archive, ENOMEM, "Can't allocate cpio data");
return (ARCHIVE_FATAL);
@@ -834,6 +834,7 @@ static int
header_afiol(struct archive_read *a, struct cpio *cpio,
struct archive_entry *entry, size_t *namelength, size_t *name_pad)
{
+ int64_t t;
const void *h;
const char *header;
@@ -850,7 +851,12 @@ header_afiol(struct archive_read *a, struct cpio *cpio,
archive_entry_set_dev(entry,
(dev_t)atol16(header + afiol_dev_offset, afiol_dev_size));
- archive_entry_set_ino(entry, atol16(header + afiol_ino_offset, afiol_ino_size));
+ t = atol16(header + afiol_ino_offset, afiol_ino_size);
+ if (t < 0) {
+ archive_set_error(&a->archive, 0, "Nonsensical ino value");
+ return (ARCHIVE_FATAL);
+ }
+ archive_entry_set_ino(entry, t);
archive_entry_set_mode(entry,
(mode_t)atol8(header + afiol_mode_offset, afiol_mode_size));
archive_entry_set_uid(entry, atol16(header + afiol_uid_offset, afiol_uid_size));
@@ -863,8 +869,12 @@ header_afiol(struct archive_read *a, struct cpio *cpio,
*namelength = (size_t)atol16(header + afiol_namesize_offset, afiol_namesize_size);
*name_pad = 0; /* No padding of filename. */
- cpio->entry_bytes_remaining =
- atol16(header + afiol_filesize_offset, afiol_filesize_size);
+ t = atol16(header + afiol_filesize_offset, afiol_filesize_size);
+ if (t < 0) {
+ archive_set_error(&a->archive, 0, "Nonsensical file size");
+ return (ARCHIVE_FATAL);
+ }
+ cpio->entry_bytes_remaining = t;
archive_entry_set_size(entry, cpio->entry_bytes_remaining);
cpio->entry_padding = 0;
__archive_read_consume(a, afiol_header_size);
@@ -1002,7 +1012,7 @@ be4(const unsigned char *p)
static int64_t
atol8(const char *p, unsigned char_cnt)
{
- int64_t l;
+ uint64_t l;
int digit;
l = 0;
@@ -1010,18 +1020,18 @@ atol8(const char *p, unsigned char_cnt)
if (*p >= '0' && *p <= '7')
digit = *p - '0';
else
- return (l);
+ return ((int64_t)l);
p++;
l <<= 3;
l |= digit;
}
- return (l);
+ return ((int64_t)l);
}
static int64_t
atol16(const char *p, unsigned char_cnt)
{
- int64_t l;
+ uint64_t l;
int digit;
l = 0;
@@ -1033,12 +1043,12 @@ atol16(const char *p, unsigned char_cnt)
else if (*p >= '0' && *p <= '9')
digit = *p - '0';
else
- return (l);
+ return ((int64_t)l);
p++;
l <<= 4;
l |= digit;
}
- return (l);
+ return ((int64_t)l);
}
static int
@@ -1078,7 +1088,7 @@ record_hardlink(struct archive_read *a,
}
}
- le = (struct links_entry *)malloc(sizeof(struct links_entry));
+ le = malloc(sizeof(struct links_entry));
if (le == NULL) {
archive_set_error(&a->archive,
ENOMEM, "Out of memory adding file to list");
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c b/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c
index db5cdb67f1cf..baf265f46229 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c
@@ -273,7 +273,7 @@ struct file_info {
char re; /* Having RRIP "RE" extension. */
char re_descendant;
uint64_t cl_offset; /* Having RRIP "CL" extension. */
- int birthtime_is_set;
+ int time_is_set; /* Bitmask indicating which times are known */
time_t birthtime; /* File created time. */
time_t mtime; /* File last modified time. */
time_t atime; /* File last accessed time. */
@@ -306,6 +306,11 @@ struct file_info {
} rede_files;
};
+#define BIRTHTIME_IS_SET 1
+#define MTIME_IS_SET 2
+#define ATIME_IS_SET 4
+#define CTIME_IS_SET 8
+
struct heap_queue {
struct file_info **files;
int allocated;
@@ -394,7 +399,9 @@ static void dump_isodirrec(FILE *, const unsigned char *isodirrec);
#endif
static time_t time_from_tm(struct tm *);
static time_t isodate17(const unsigned char *);
+static int isodate17_valid(const unsigned char *);
static time_t isodate7(const unsigned char *);
+static int isodate7_valid(const unsigned char *);
static int isBootRecord(struct iso9660 *, const unsigned char *);
static int isVolumePartition(struct iso9660 *, const unsigned char *);
static int isVDSetTerminator(struct iso9660 *, const unsigned char *);
@@ -402,6 +409,9 @@ static int isJolietSVD(struct iso9660 *, const unsigned char *);
static int isSVD(struct iso9660 *, const unsigned char *);
static int isEVD(struct iso9660 *, const unsigned char *);
static int isPVD(struct iso9660 *, const unsigned char *);
+static int isRootDirectoryRecord(const unsigned char *);
+static int isValid723Integer(const unsigned char *);
+static int isValid733Integer(const unsigned char *);
static int next_cache_entry(struct archive_read *, struct iso9660 *,
struct file_info **);
static int next_entry_seek(struct archive_read *, struct iso9660 *,
@@ -453,7 +463,7 @@ archive_read_support_format_iso9660(struct archive *_a)
archive_check_magic(_a, ARCHIVE_READ_MAGIC,
ARCHIVE_STATE_NEW, "archive_read_support_format_iso9660");
- iso9660 = (struct iso9660 *)calloc(1, sizeof(*iso9660));
+ iso9660 = calloc(1, sizeof(*iso9660));
if (iso9660 == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate iso9660 data");
@@ -773,8 +783,9 @@ isSVD(struct iso9660 *iso9660, const unsigned char *h)
/* Read Root Directory Record in Volume Descriptor. */
p = h + SVD_root_directory_record_offset;
- if (p[DR_length_offset] != 34)
+ if (!isRootDirectoryRecord(p)) {
return (0);
+ }
return (48);
}
@@ -851,8 +862,9 @@ isEVD(struct iso9660 *iso9660, const unsigned char *h)
/* Read Root Directory Record in Volume Descriptor. */
p = h + PVD_root_directory_record_offset;
- if (p[DR_length_offset] != 34)
+ if (!isRootDirectoryRecord(p)) {
return (0);
+ }
return (48);
}
@@ -882,21 +894,43 @@ isPVD(struct iso9660 *iso9660, const unsigned char *h)
if (!isNull(iso9660, h, PVD_reserved2_offset, PVD_reserved2_size))
return (0);
+ /* Volume space size must be encoded according to 7.3.3 */
+ if (!isValid733Integer(h + PVD_volume_space_size_offset)) {
+ return (0);
+ }
+ volume_block = archive_le32dec(h + PVD_volume_space_size_offset);
+ if (volume_block <= SYSTEM_AREA_BLOCK+4)
+ return (0);
+
/* Reserved field must be 0. */
if (!isNull(iso9660, h, PVD_reserved3_offset, PVD_reserved3_size))
return (0);
+ /* Volume set size must be encoded according to 7.2.3 */
+ if (!isValid723Integer(h + PVD_volume_set_size_offset)) {
+ return (0);
+ }
+
+ /* Volume sequence number must be encoded according to 7.2.3 */
+ if (!isValid723Integer(h + PVD_volume_sequence_number_offset)) {
+ return (0);
+ }
+
/* Logical block size must be > 0. */
/* I've looked at Ecma 119 and can't find any stronger
* restriction on this field. */
+ if (!isValid723Integer(h + PVD_logical_block_size_offset)) {
+ return (0);
+ }
logical_block_size =
archive_le16dec(h + PVD_logical_block_size_offset);
if (logical_block_size <= 0)
return (0);
- volume_block = archive_le32dec(h + PVD_volume_space_size_offset);
- if (volume_block <= SYSTEM_AREA_BLOCK+4)
+ /* Path Table size must be encoded according to 7.3.3 */
+ if (!isValid733Integer(h + PVD_path_table_size_offset)) {
return (0);
+ }
/* File structure version must be 1 for ISO9660/ECMA119. */
if (h[PVD_file_structure_version_offset] != 1)
@@ -935,8 +969,9 @@ isPVD(struct iso9660 *iso9660, const unsigned char *h)
/* Read Root Directory Record in Volume Descriptor. */
p = h + PVD_root_directory_record_offset;
- if (p[DR_length_offset] != 34)
+ if (!isRootDirectoryRecord(p)) {
return (0);
+ }
if (!iso9660->primary.location) {
iso9660->logical_block_size = logical_block_size;
@@ -952,6 +987,51 @@ isPVD(struct iso9660 *iso9660, const unsigned char *h)
}
static int
+isRootDirectoryRecord(const unsigned char *p) {
+ int flags;
+
+ /* ECMA119/ISO9660 requires that the root directory record be _exactly_ 34 bytes.
+ * However, we've seen images that have root directory records up to 68 bytes. */
+ if (p[DR_length_offset] < 34 || p[DR_length_offset] > 68) {
+ return (0);
+ }
+
+ /* The root directory location must be a 7.3.3 32-bit integer. */
+ if (!isValid733Integer(p + DR_extent_offset)) {
+ return (0);
+ }
+
+ /* The root directory size must be a 7.3.3 integer. */
+ if (!isValid733Integer(p + DR_size_offset)) {
+ return (0);
+ }
+
+ /* According to the standard, certain bits must be one or zero:
+ * Bit 1: must be 1 (this is a directory)
+ * Bit 2: must be 0 (not an associated file)
+ * Bit 3: must be 0 (doesn't use extended attribute record)
+ * Bit 7: must be 0 (final directory record for this file)
+ */
+ flags = p[DR_flags_offset];
+ if ((flags & 0x8E) != 0x02) {
+ return (0);
+ }
+
+ /* Volume sequence number must be a 7.2.3 integer. */
+ if (!isValid723Integer(p + DR_volume_sequence_number_offset)) {
+ return (0);
+ }
+
+ /* Root directory name is a single zero byte... */
+ if (p[DR_name_len_offset] != 1 || p[DR_name_offset] != 0) {
+ return (0);
+ }
+
+ /* Nothing looked wrong, so let's accept it. */
+ return (1);
+}
+
+static int
read_children(struct archive_read *a, struct file_info *parent)
{
struct iso9660 *iso9660;
@@ -1212,7 +1292,7 @@ archive_read_format_iso9660_read_header(struct archive_read *a,
}
}
if (iso9660->utf16be_previous_path == NULL) {
- iso9660->utf16be_previous_path = malloc(UTF16_NAME_MAX);
+ iso9660->utf16be_previous_path = calloc(1, UTF16_NAME_MAX);
if (iso9660->utf16be_previous_path == NULL) {
archive_set_error(&a->archive, ENOMEM,
"No memory");
@@ -1278,13 +1358,22 @@ archive_read_format_iso9660_read_header(struct archive_read *a,
archive_entry_set_uid(entry, file->uid);
archive_entry_set_gid(entry, file->gid);
archive_entry_set_nlink(entry, file->nlinks);
- if (file->birthtime_is_set)
+ if ((file->time_is_set & BIRTHTIME_IS_SET))
archive_entry_set_birthtime(entry, file->birthtime, 0);
else
archive_entry_unset_birthtime(entry);
- archive_entry_set_mtime(entry, file->mtime, 0);
- archive_entry_set_ctime(entry, file->ctime, 0);
- archive_entry_set_atime(entry, file->atime, 0);
+ if ((file->time_is_set & MTIME_IS_SET))
+ archive_entry_set_mtime(entry, file->mtime, 0);
+ else
+ archive_entry_unset_mtime(entry);
+ if ((file->time_is_set & CTIME_IS_SET))
+ archive_entry_set_ctime(entry, file->ctime, 0);
+ else
+ archive_entry_unset_ctime(entry);
+ if ((file->time_is_set & ATIME_IS_SET))
+ archive_entry_set_atime(entry, file->atime, 0);
+ else
+ archive_entry_unset_atime(entry);
/* N.B.: Rock Ridge supports 64-bit device numbers. */
archive_entry_set_rdev(entry, (dev_t)file->rdev);
archive_entry_set_size(entry, iso9660->entry_bytes_remaining);
@@ -1816,7 +1905,7 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
}
/* Create a new file entry and copy data from the ISO dir record. */
- file = (struct file_info *)calloc(1, sizeof(*file));
+ file = calloc(1, sizeof(*file));
if (file == NULL) {
archive_set_error(&a->archive, ENOMEM,
"No memory for file entry");
@@ -1825,8 +1914,11 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
file->parent = parent;
file->offset = offset;
file->size = fsize;
- file->mtime = isodate7(isodirrec + DR_date_offset);
- file->ctime = file->atime = file->mtime;
+ if (isodate7_valid(isodirrec + DR_date_offset)) {
+ file->time_is_set |= MTIME_IS_SET | ATIME_IS_SET | CTIME_IS_SET;
+ file->mtime = isodate7(isodirrec + DR_date_offset);
+ file->ctime = file->atime = file->mtime;
+ }
file->rede_files.first = NULL;
file->rede_files.last = &(file->rede_files.first);
@@ -2500,51 +2592,73 @@ parse_rockridge_TF1(struct file_info *file, const unsigned char *data,
/* Use 17-byte time format. */
if ((flag & 1) && data_length >= 17) {
/* Create time. */
- file->birthtime_is_set = 1;
- file->birthtime = isodate17(data);
+ if (isodate17_valid(data)) {
+ file->time_is_set |= BIRTHTIME_IS_SET;
+ file->birthtime = isodate17(data);
+ }
data += 17;
data_length -= 17;
}
if ((flag & 2) && data_length >= 17) {
/* Modify time. */
- file->mtime = isodate17(data);
+ if (isodate17_valid(data)) {
+ file->time_is_set |= MTIME_IS_SET;
+ file->mtime = isodate17(data);
+ }
data += 17;
data_length -= 17;
}
if ((flag & 4) && data_length >= 17) {
/* Access time. */
- file->atime = isodate17(data);
+ if (isodate17_valid(data)) {
+ file->time_is_set |= ATIME_IS_SET;
+ file->atime = isodate17(data);
+ }
data += 17;
data_length -= 17;
}
if ((flag & 8) && data_length >= 17) {
/* Attribute change time. */
- file->ctime = isodate17(data);
+ if (isodate17_valid(data)) {
+ file->time_is_set |= CTIME_IS_SET;
+ file->ctime = isodate17(data);
+ }
}
} else {
/* Use 7-byte time format. */
if ((flag & 1) && data_length >= 7) {
/* Create time. */
- file->birthtime_is_set = 1;
- file->birthtime = isodate7(data);
+ if (isodate7_valid(data)) {
+ file->time_is_set |= BIRTHTIME_IS_SET;
+ file->birthtime = isodate7(data);
+ }
data += 7;
data_length -= 7;
}
if ((flag & 2) && data_length >= 7) {
/* Modify time. */
- file->mtime = isodate7(data);
+ if (isodate7_valid(data)) {
+ file->time_is_set |= MTIME_IS_SET;
+ file->mtime = isodate7(data);
+ }
data += 7;
data_length -= 7;
}
if ((flag & 4) && data_length >= 7) {
/* Access time. */
- file->atime = isodate7(data);
+ if (isodate7_valid(data)) {
+ file->time_is_set |= ATIME_IS_SET;
+ file->atime = isodate7(data);
+ }
data += 7;
data_length -= 7;
}
if ((flag & 8) && data_length >= 7) {
/* Attribute change time. */
- file->ctime = isodate7(data);
+ if (isodate7_valid(data)) {
+ file->time_is_set |= CTIME_IS_SET;
+ file->ctime = isodate7(data);
+ }
}
}
}
@@ -3033,7 +3147,7 @@ heap_add_entry(struct archive_read *a, struct heap_queue *heap,
return (ARCHIVE_FATAL);
}
new_pending_files = (struct file_info **)
- malloc(new_size * sizeof(new_pending_files[0]));
+ calloc(new_size, sizeof(new_pending_files[0]));
if (new_pending_files == NULL) {
archive_set_error(&a->archive,
ENOMEM, "Out of memory");
@@ -3127,6 +3241,82 @@ toi(const void *p, int n)
return (0);
}
+/*
+ * ECMA119/ISO9660 stores multi-byte integers in one of
+ * three different formats:
+ * * Little-endian (specified in section 7.2.1 and 7.3.1)
+ * * Big-endian (specified in section 7.2.2 and 7.3.2)
+ * * Both (specified in section 7.2.3 and 7.3.3)
+ *
+ * For values that follow section 7.2.3 (16-bit) or 7.3.3 (32-bit), we
+ * can check that the little-endian and big-endian forms agree with
+ * each other. This helps us avoid trying to decode files that are
+ * not really ISO images.
+ */
+static int
+isValid723Integer(const unsigned char *p) {
+ return (p[0] == p[3] && p[1] == p[2]);
+}
+
+static int
+isValid733Integer(const unsigned char *p)
+{
+ return (p[0] == p[7]
+ && p[1] == p[6]
+ && p[2] == p[5]
+ && p[3] == p[4]);
+}
+
+static int
+isodate7_valid(const unsigned char *v)
+{
+ int year = v[0];
+ int month = v[1];
+ int day = v[2];
+ int hour = v[3];
+ int minute = v[4];
+ int second = v[5];
+ int gmt_off = (signed char)v[6];
+
+ /* ECMA-119 9.1.5 "If all seven values are zero, it shall mean
+ * that the date is unspecified" */
+ if (year == 0
+ && month == 0
+ && day == 0
+ && hour == 0
+ && minute == 0
+ && second == 0
+ && gmt_off == 0)
+ return 0;
+ /*
+ * Sanity-test each individual field
+ */
+ /* Year can have any value */
+ /* Month must be 1-12 */
+ if (month < 1 || month > 12)
+ return 0;
+ /* Day must be 1-31 */
+ if (day < 1 || day > 31)
+ return 0;
+ /* Hour must be 0-23 */
+ if (hour > 23)
+ return 0;
+ /* Minute must be 0-59 */
+ if (minute > 59)
+ return 0;
+ /* second must be 0-59 according to ECMA-119 9.1.5 */
+ /* BUT: we should probably allow for the time being in UTC, which
+ allows up to 61 seconds in a minute in certain cases */
+ if (second > 61)
+ return 0;
+ /* Offset from GMT must be -48 to +52 */
+ if (gmt_off < -48 || gmt_off > +52)
+ return 0;
+
+ /* All tests pass, this is OK */
+ return 1;
+}
+
static time_t
isodate7(const unsigned char *v)
{
@@ -3153,6 +3343,67 @@ isodate7(const unsigned char *v)
return (t);
}
+static int
+isodate17_valid(const unsigned char *v)
+{
+ /* First 16 bytes are all ASCII digits */
+ for (int i = 0; i < 16; i++) {
+ if (v[i] < '0' || v[i] > '9')
+ return 0;
+ }
+
+ int year = (v[0] - '0') * 1000 + (v[1] - '0') * 100
+ + (v[2] - '0') * 10 + (v[3] - '0');
+ int month = (v[4] - '0') * 10 + (v[5] - '0');
+ int day = (v[6] - '0') * 10 + (v[7] - '0');
+ int hour = (v[8] - '0') * 10 + (v[9] - '0');
+ int minute = (v[10] - '0') * 10 + (v[11] - '0');
+ int second = (v[12] - '0') * 10 + (v[13] - '0');
+ int hundredths = (v[14] - '0') * 10 + (v[15] - '0');
+ int gmt_off = (signed char)v[16];
+
+ if (year == 0 && month == 0 && day == 0
+ && hour == 0 && minute == 0 && second == 0
+ && hundredths == 0 && gmt_off == 0)
+ return 0;
+ /*
+ * Sanity-test each individual field
+ */
+
+ /* Year must be 1900-2300 */
+ /* (Not specified in ECMA-119, but these seem
+ like reasonable limits. */
+ if (year < 1900 || year > 2300)
+ return 0;
+ /* Month must be 1-12 */
+ if (month < 1 || month > 12)
+ return 0;
+ /* Day must be 1-31 */
+ if (day < 1 || day > 31)
+ return 0;
+ /* Hour must be 0-23 */
+ if (hour > 23)
+ return 0;
+ /* Minute must be 0-59 */
+ if (minute > 59)
+ return 0;
+ /* second must be 0-59 according to ECMA-119 9.1.5 */
+ /* BUT: we should probably allow for the time being in UTC, which
+ allows up to 61 seconds in a minute in certain cases */
+ if (second > 61)
+ return 0;
+ /* Hundredths must be 0-99 */
+ if (hundredths > 99)
+ return 0;
+ /* Offset from GMT must be -48 to +52 */
+ if (gmt_off < -48 || gmt_off > +52)
+ return 0;
+
+ /* All tests pass, this is OK */
+ return 1;
+
+}
+
static time_t
isodate17(const unsigned char *v)
{
@@ -3164,7 +3415,7 @@ isodate17(const unsigned char *v)
tm.tm_year = (v[0] - '0') * 1000 + (v[1] - '0') * 100
+ (v[2] - '0') * 10 + (v[3] - '0')
- 1900;
- tm.tm_mon = (v[4] - '0') * 10 + (v[5] - '0');
+ tm.tm_mon = (v[4] - '0') * 10 + (v[5] - '0') - 1;
tm.tm_mday = (v[6] - '0') * 10 + (v[7] - '0');
tm.tm_hour = (v[8] - '0') * 10 + (v[9] - '0');
tm.tm_min = (v[10] - '0') * 10 + (v[11] - '0');
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_lha.c b/contrib/libarchive/libarchive/archive_read_support_format_lha.c
index ae5a1d7d668e..c7cbad272ead 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_lha.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_lha.c
@@ -227,7 +227,7 @@ static int lha_read_file_header_1(struct archive_read *, struct lha *);
static int lha_read_file_header_2(struct archive_read *, struct lha *);
static int lha_read_file_header_3(struct archive_read *, struct lha *);
static int lha_read_file_extended_header(struct archive_read *,
- struct lha *, uint16_t *, int, size_t, size_t *);
+ struct lha *, uint16_t *, int, uint64_t, size_t *);
static size_t lha_check_header_format(const void *);
static int lha_skip_sfx(struct archive_read *);
static time_t lha_dos_time(const unsigned char *);
@@ -265,7 +265,7 @@ archive_read_support_format_lha(struct archive *_a)
archive_check_magic(_a, ARCHIVE_READ_MAGIC,
ARCHIVE_STATE_NEW, "archive_read_support_format_lha");
- lha = (struct lha *)calloc(1, sizeof(*lha));
+ lha = calloc(1, sizeof(*lha));
if (lha == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate lha data");
@@ -945,7 +945,7 @@ lha_read_file_header_1(struct archive_read *a, struct lha *lha)
/* Read extended headers */
err2 = lha_read_file_extended_header(a, lha, NULL, 2,
- (size_t)(lha->compsize + 2), &extdsize);
+ (uint64_t)(lha->compsize + 2), &extdsize);
if (err2 < ARCHIVE_WARN)
return (err2);
if (err2 < err)
@@ -1138,7 +1138,7 @@ invalid:
*/
static int
lha_read_file_extended_header(struct archive_read *a, struct lha *lha,
- uint16_t *crc, int sizefield_length, size_t limitsize, size_t *total_size)
+ uint16_t *crc, int sizefield_length, uint64_t limitsize, size_t *total_size)
{
const void *h;
const unsigned char *extdheader;
@@ -1187,8 +1187,7 @@ lha_read_file_extended_header(struct archive_read *a, struct lha *lha,
}
/* Sanity check to the extended header size. */
- if (((uint64_t)*total_size + extdsize) >
- (uint64_t)limitsize ||
+ if (((uint64_t)*total_size + extdsize) > limitsize ||
extdsize <= (size_t)sizefield_length)
goto invalid;
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_mtree.c b/contrib/libarchive/libarchive/archive_read_support_format_mtree.c
index 6971228eefad..ba0e49de2408 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_mtree.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_mtree.c
@@ -273,7 +273,7 @@ archive_read_support_format_mtree(struct archive *_a)
archive_check_magic(_a, ARCHIVE_READ_MAGIC,
ARCHIVE_STATE_NEW, "archive_read_support_format_mtree");
- mtree = (struct mtree *)calloc(1, sizeof(*mtree));
+ mtree = calloc(1, sizeof(*mtree));
if (mtree == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate mtree data");
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_rar.c b/contrib/libarchive/libarchive/archive_read_support_format_rar.c
index 4fc6626cacfd..9cf4d639a79d 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_rar.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_rar.c
@@ -432,7 +432,7 @@ static int make_table_recurse(struct archive_read *, struct huffman_code *, int,
struct huffman_table_entry *, int, int);
static int expand(struct archive_read *, int64_t *);
static int copy_from_lzss_window_to_unp(struct archive_read *, const void **,
- int64_t, int);
+ int64_t, size_t);
static const void *rar_read_ahead(struct archive_read *, size_t, ssize_t *);
static int parse_filter(struct archive_read *, const uint8_t *, uint16_t,
uint8_t);
@@ -734,7 +734,7 @@ archive_read_support_format_rar(struct archive *_a)
archive_check_magic(_a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW,
"archive_read_support_format_rar");
- rar = (struct rar *)calloc(1, sizeof(*rar));
+ rar = calloc(1, sizeof(*rar));
if (rar == NULL)
{
archive_set_error(&a->archive, ENOMEM, "Can't allocate rar data");
@@ -1371,8 +1371,10 @@ read_header(struct archive_read *a, struct archive_entry *entry,
char unp_size[8];
int ttime;
struct archive_string_conv *sconv, *fn_sconv;
- unsigned long crc32_val;
+ uint32_t crc32_computed, crc32_read;
int ret = (ARCHIVE_OK), ret2;
+ char *newptr;
+ size_t newsize;
rar = (struct rar *)(a->format->data);
@@ -1400,7 +1402,7 @@ read_header(struct archive_read *a, struct archive_entry *entry,
"Invalid header size");
return (ARCHIVE_FATAL);
}
- crc32_val = crc32(0, (const unsigned char *)p + 2, 7 - 2);
+ crc32_computed = crc32(0, (const unsigned char *)p + 2, 7 - 2);
__archive_read_consume(a, 7);
if (!(rar->file_flags & FHD_SOLID))
@@ -1434,8 +1436,9 @@ read_header(struct archive_read *a, struct archive_entry *entry,
return (ARCHIVE_FATAL);
/* File Header CRC check. */
- crc32_val = crc32(crc32_val, h, (unsigned)(header_size - 7));
- if ((crc32_val & 0xffff) != archive_le16dec(rar_header.crc)) {
+ crc32_computed = crc32(crc32_computed, h, (unsigned)(header_size - 7));
+ crc32_read = archive_le16dec(rar_header.crc);
+ if ((crc32_computed & 0xffff) != crc32_read) {
#ifndef DONT_FAIL_ON_CRC_ERROR
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"Header CRC error");
@@ -1469,6 +1472,11 @@ read_header(struct archive_read *a, struct archive_entry *entry,
if (rar->file_flags & FHD_LARGE)
{
+ if (p + 8 > endp) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Invalid header size");
+ return (ARCHIVE_FATAL);
+ }
memcpy(packed_size, file_header.pack_size, 4);
memcpy(packed_size + 4, p, 4); /* High pack size */
p += 4;
@@ -1514,8 +1522,7 @@ read_header(struct archive_read *a, struct archive_entry *entry,
return (ARCHIVE_FATAL);
}
if (rar->filename_allocated < filename_size * 2 + 2) {
- char *newptr;
- size_t newsize = filename_size * 2 + 2;
+ newsize = filename_size * 2 + 2;
newptr = realloc(rar->filename, newsize);
if (newptr == NULL) {
archive_set_error(&a->archive, ENOMEM,
@@ -1539,7 +1546,7 @@ read_header(struct archive_read *a, struct archive_entry *entry,
fn_end = filename_size * 2;
filename_size = 0;
offset = (unsigned)strlen(filename) + 1;
- highbyte = *(p + offset++);
+ highbyte = offset >= end ? 0 : *(p + offset++);
flagbits = 0;
flagbyte = 0;
while (offset < end && filename_size < fn_end)
@@ -1554,14 +1561,22 @@ read_header(struct archive_read *a, struct archive_entry *entry,
switch((flagbyte >> flagbits) & 3)
{
case 0:
+ if (offset >= end)
+ continue;
filename[filename_size++] = '\0';
filename[filename_size++] = *(p + offset++);
break;
case 1:
+ if (offset >= end)
+ continue;
filename[filename_size++] = highbyte;
filename[filename_size++] = *(p + offset++);
break;
case 2:
+ if (offset >= end - 1) {
+ offset = end;
+ continue;
+ }
filename[filename_size++] = *(p + offset + 1);
filename[filename_size++] = *(p + offset);
offset += 2;
@@ -1569,9 +1584,15 @@ read_header(struct archive_read *a, struct archive_entry *entry,
case 3:
{
char extra, high;
- uint8_t length = *(p + offset++);
+ uint8_t length;
+ if (offset >= end)
+ continue;
+
+ length = *(p + offset++);
if (length & 0x80) {
+ if (offset >= end)
+ continue;
extra = *(p + offset++);
high = (char)highbyte;
} else
@@ -1652,13 +1673,16 @@ read_header(struct archive_read *a, struct archive_entry *entry,
rar->cursor++;
if (rar->cursor >= rar->nodes)
{
- rar->nodes++;
- if ((rar->dbo =
- realloc(rar->dbo, sizeof(*rar->dbo) * rar->nodes)) == NULL)
+ struct data_block_offsets *newdbo;
+
+ newsize = sizeof(*rar->dbo) * (rar->nodes + 1);
+ if ((newdbo = realloc(rar->dbo, newsize)) == NULL)
{
archive_set_error(&a->archive, ENOMEM, "Couldn't allocate memory.");
return (ARCHIVE_FATAL);
}
+ rar->dbo = newdbo;
+ rar->nodes++;
rar->dbo[rar->cursor].header_size = header_size;
rar->dbo[rar->cursor].start_offset = -1;
rar->dbo[rar->cursor].end_offset = -1;
@@ -1678,9 +1702,14 @@ read_header(struct archive_read *a, struct archive_entry *entry,
return (ARCHIVE_FATAL);
}
- rar->filename_save = (char*)realloc(rar->filename_save,
- filename_size + 1);
- memcpy(rar->filename_save, rar->filename, filename_size + 1);
+ newsize = filename_size + 1;
+ if ((newptr = realloc(rar->filename_save, newsize)) == NULL)
+ {
+ archive_set_error(&a->archive, ENOMEM, "Couldn't allocate memory.");
+ return (ARCHIVE_FATAL);
+ }
+ rar->filename_save = newptr;
+ memcpy(rar->filename_save, rar->filename, newsize);
rar->filename_save_size = filename_size;
/* Set info for seeking */
@@ -2060,7 +2089,7 @@ read_data_compressed(struct archive_read *a, const void **buff, size_t *size,
bs = rar->unp_buffer_size - rar->unp_offset;
else
bs = (size_t)rar->bytes_uncopied;
- ret = copy_from_lzss_window_to_unp(a, buff, rar->offset, (int)bs);
+ ret = copy_from_lzss_window_to_unp(a, buff, rar->offset, bs);
if (ret != ARCHIVE_OK)
return (ret);
rar->offset += bs;
@@ -2213,7 +2242,7 @@ read_data_compressed(struct archive_read *a, const void **buff, size_t *size,
bs = rar->unp_buffer_size - rar->unp_offset;
else
bs = (size_t)rar->bytes_uncopied;
- ret = copy_from_lzss_window_to_unp(a, buff, rar->offset, (int)bs);
+ ret = copy_from_lzss_window_to_unp(a, buff, rar->offset, bs);
if (ret != ARCHIVE_OK)
return (ret);
rar->offset += bs;
@@ -2579,8 +2608,7 @@ read_next_symbol(struct archive_read *a, struct huffman_code *code)
rar_br_consume(br, code->tablesize);
node = value;
- while (!(code->tree[node].branches[0] ==
- code->tree[node].branches[1]))
+ while (code->tree[node].branches[0] != code->tree[node].branches[1])
{
if (!rar_br_read_ahead(a, br, 1)) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
@@ -2775,9 +2803,7 @@ make_table(struct archive_read *a, struct huffman_code *code)
else
code->tablesize = code->maxlength;
- code->table =
- (struct huffman_table_entry *)calloc(1, sizeof(*code->table)
- * ((size_t)1 << code->tablesize));
+ code->table = calloc(1U << code->tablesize, sizeof(*code->table));
return make_table_recurse(a, code, 0, code->table, 0, code->tablesize);
}
@@ -2955,7 +2981,7 @@ expand(struct archive_read *a, int64_t *end)
if ((lensymbol = read_next_symbol(a, &rar->lengthcode)) < 0)
goto bad_data;
- if (lensymbol > lengthb_min)
+ if (lensymbol >= lengthb_min)
goto bad_data;
len = lengthbases[lensymbol] + 2;
if (lengthbits[lensymbol] > 0) {
@@ -2987,7 +3013,7 @@ expand(struct archive_read *a, int64_t *end)
}
else
{
- if (symbol-271 > lengthb_min)
+ if (symbol-271 >= lengthb_min)
goto bad_data;
len = lengthbases[symbol-271]+3;
if(lengthbits[symbol-271] > 0) {
@@ -2999,7 +3025,7 @@ expand(struct archive_read *a, int64_t *end)
if ((offssymbol = read_next_symbol(a, &rar->offsetcode)) < 0)
goto bad_data;
- if (offssymbol > offsetb_min)
+ if (offssymbol >= offsetb_min)
goto bad_data;
offs = offsetbases[offssymbol]+1;
if(offsetbits[offssymbol] > 0)
@@ -3094,11 +3120,16 @@ copy_from_lzss_window(struct archive_read *a, void *buffer,
static int
copy_from_lzss_window_to_unp(struct archive_read *a, const void **buffer,
- int64_t startpos, int length)
+ int64_t startpos, size_t length)
{
int windowoffs, firstpart;
struct rar *rar = (struct rar *)(a->format->data);
+ if (length > rar->unp_buffer_size)
+ {
+ goto fatal;
+ }
+
if (!rar->unp_buffer)
{
if ((rar->unp_buffer = malloc(rar->unp_buffer_size)) == NULL)
@@ -3110,17 +3141,17 @@ copy_from_lzss_window_to_unp(struct archive_read *a, const void **buffer,
}
windowoffs = lzss_offset_for_position(&rar->lzss, startpos);
- if(windowoffs + length <= lzss_size(&rar->lzss)) {
+ if(windowoffs + length <= (size_t)lzss_size(&rar->lzss)) {
memcpy(&rar->unp_buffer[rar->unp_offset], &rar->lzss.window[windowoffs],
length);
- } else if (length <= lzss_size(&rar->lzss)) {
+ } else if (length <= (size_t)lzss_size(&rar->lzss)) {
firstpart = lzss_size(&rar->lzss) - windowoffs;
if (firstpart < 0) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"Bad RAR file data");
return (ARCHIVE_FATAL);
}
- if (firstpart < length) {
+ if ((size_t)firstpart < length) {
memcpy(&rar->unp_buffer[rar->unp_offset],
&rar->lzss.window[windowoffs], firstpart);
memcpy(&rar->unp_buffer[rar->unp_offset + firstpart],
@@ -3130,16 +3161,19 @@ copy_from_lzss_window_to_unp(struct archive_read *a, const void **buffer,
&rar->lzss.window[windowoffs], length);
}
} else {
- archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
- "Bad RAR file data");
- return (ARCHIVE_FATAL);
+ goto fatal;
}
- rar->unp_offset += length;
+ rar->unp_offset += (unsigned int) length;
if (rar->unp_offset >= rar->unp_buffer_size)
*buffer = rar->unp_buffer;
else
*buffer = NULL;
return (ARCHIVE_OK);
+
+fatal:
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Bad RAR file data");
+ return (ARCHIVE_FATAL);
}
static const void *
@@ -3325,7 +3359,10 @@ create_filter(struct rar_program_code *prog, const uint8_t *globaldata, uint32_t
filter->globaldatalen = globaldatalen > PROGRAM_SYSTEM_GLOBAL_SIZE ? globaldatalen : PROGRAM_SYSTEM_GLOBAL_SIZE;
filter->globaldata = calloc(1, filter->globaldatalen);
if (!filter->globaldata)
+ {
+ free(filter);
return NULL;
+ }
if (globaldata)
memcpy(filter->globaldata, globaldata, globaldatalen);
if (registers)
@@ -3352,7 +3389,7 @@ run_filters(struct archive_read *a)
if (filters == NULL || filter == NULL)
return (0);
- start = filters->filterstart;
+ start = (size_t)filters->filterstart;
end = start + filter->blocklength;
filters->filterstart = INT64_MAX;
@@ -3389,10 +3426,16 @@ run_filters(struct archive_read *a)
return 0;
}
+ if (filter->blocklength > VM_MEMORY_SIZE)
+ {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, "Bad RAR file data");
+ return 0;
+ }
+
ret = copy_from_lzss_window(a, filters->vm->memory, start, filter->blocklength);
if (ret != ARCHIVE_OK)
return 0;
- if (!execute_filter(a, filter, filters->vm, rar->offset))
+ if (!execute_filter(a, filter, filters->vm, (size_t)rar->offset))
return 0;
lastfilteraddress = filter->filteredblockaddress;
@@ -3404,7 +3447,7 @@ run_filters(struct archive_read *a)
while ((filter = filters->stack) != NULL && (int64_t)filter->blockstartpos == filters->filterstart && filter->blocklength == lastfilterlength)
{
memmove(&filters->vm->memory[0], &filters->vm->memory[lastfilteraddress], lastfilterlength);
- if (!execute_filter(a, filter, filters->vm, rar->offset))
+ if (!execute_filter(a, filter, filters->vm, (size_t)rar->offset))
return 0;
lastfilteraddress = filter->filteredblockaddress;
@@ -3645,7 +3688,7 @@ execute_filter_e8(struct rar_filter *filter, struct rar_virtual_machine *vm, siz
{
uint32_t currpos = (uint32_t)pos + i + 1;
int32_t address = (int32_t)vm_read_32(vm, i + 1);
- if (address < 0 && currpos >= (uint32_t)-address)
+ if (address < 0 && currpos >= (~(uint32_t)address + 1))
vm_write_32(vm, i + 1, address + filesize);
else if (address >= 0 && (uint32_t)address < filesize)
vm_write_32(vm, i + 1, address - currpos);
@@ -3668,7 +3711,7 @@ execute_filter_rgb(struct rar_filter *filter, struct rar_virtual_machine *vm)
uint8_t *src, *dst;
uint32_t i, j;
- if (blocklength > PROGRAM_WORK_SIZE / 2 || stride > blocklength)
+ if (blocklength > PROGRAM_WORK_SIZE / 2 || stride > blocklength || blocklength < 3 || byteoffset > 2)
return 0;
src = &vm->memory[0];
@@ -3678,6 +3721,13 @@ execute_filter_rgb(struct rar_filter *filter, struct rar_virtual_machine *vm)
uint8_t *prev = dst + i - stride;
for (j = i; j < blocklength; j += 3)
{
+ /*
+ * The src block should not overlap with the dst block.
+ * If so it would be better to consider this archive is broken.
+ */
+ if (src >= dst)
+ return 0;
+
if (prev >= dst)
{
uint32_t delta1 = abs(prev[3] - prev[0]);
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_rar5.c b/contrib/libarchive/libarchive/archive_read_support_format_rar5.c
index e8846a5b0d0d..b99105d0cd33 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_rar5.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_rar5.c
@@ -210,7 +210,11 @@ struct comp_state {
or just a part of it. */
uint8_t block_parsing_finished : 1;
- signed int notused : 4;
+ /* Flag used to indicate that a previous file using this buffer was
+ encrypted, meaning no data in the buffer can be trusted */
+ uint8_t data_encrypted : 1;
+
+ signed int notused : 3;
int flags; /* Uncompression flags. */
int method; /* Uncompression algorithm method. */
@@ -220,7 +224,7 @@ struct comp_state {
decompression. */
uint8_t* filtered_buf; /* Buffer used when applying filters. */
const uint8_t* block_buf; /* Buffer used when merging blocks. */
- size_t window_mask; /* Convenience field; window_size - 1. */
+ ssize_t window_mask; /* Convenience field; window_size - 1. */
int64_t write_ptr; /* This amount of data has been unpacked
in the window buffer. */
int64_t last_write_ptr; /* This amount of data has been stored in
@@ -352,6 +356,12 @@ struct rar5 {
/* The header of currently processed RARv5 block. Used in main
* decompression logic loop. */
struct compressed_block_header last_block_hdr;
+
+ /*
+ * Custom field to denote that this archive contains encrypted entries
+ */
+ int has_encrypted_entries;
+ int headers_are_encrypted;
};
/* Forward function declarations. */
@@ -361,6 +371,7 @@ static int verify_global_checksums(struct archive_read* a);
static int rar5_read_data_skip(struct archive_read *a);
static int push_data_ready(struct archive_read* a, struct rar5* rar,
const uint8_t* buf, size_t size, int64_t offset);
+static void clear_data_ready_stack(struct rar5* rar);
/* CDE_xxx = Circular Double Ended (Queue) return values. */
enum CDE_RETURN_VALUES {
@@ -505,7 +516,7 @@ static inline struct rar5* get_context(struct archive_read* a) {
}
/* Convenience functions used by filter implementations. */
-static void circular_memcpy(uint8_t* dst, uint8_t* window, const uint64_t mask,
+static void circular_memcpy(uint8_t* dst, uint8_t* window, const ssize_t mask,
int64_t start, int64_t end)
{
if((start & mask) > (end & mask)) {
@@ -534,8 +545,7 @@ static void write_filter_data(struct rar5* rar, uint32_t offset,
/* Allocates a new filter descriptor and adds it to the filter array. */
static struct filter_info* add_new_filter(struct rar5* rar) {
- struct filter_info* f =
- (struct filter_info*) calloc(1, sizeof(struct filter_info));
+ struct filter_info* f = calloc(1, sizeof(*f));
if(!f) {
return NULL;
@@ -652,6 +662,7 @@ static int run_filter(struct archive_read* a, struct filter_info* flt) {
int ret;
struct rar5* rar = get_context(a);
+ clear_data_ready_stack(rar);
free(rar->cstate.filtered_buf);
rar->cstate.filtered_buf = malloc(flt->block_length);
@@ -709,7 +720,7 @@ static int run_filter(struct archive_read* a, struct filter_info* flt) {
static void push_data(struct archive_read* a, struct rar5* rar,
const uint8_t* buf, int64_t idx_begin, int64_t idx_end)
{
- const uint64_t wmask = rar->cstate.window_mask;
+ const ssize_t wmask = rar->cstate.window_mask;
const ssize_t solid_write_ptr = (rar->cstate.solid_offset +
rar->cstate.last_write_ptr) & wmask;
@@ -1246,7 +1257,7 @@ static int process_main_locator_extra_block(struct archive_read* a,
}
static int parse_file_extra_hash(struct archive_read* a, struct rar5* rar,
- ssize_t* extra_data_size)
+ int64_t* extra_data_size)
{
size_t hash_type = 0;
size_t value_len;
@@ -1296,7 +1307,7 @@ static uint64_t time_win_to_unix(uint64_t win_time) {
}
static int parse_htime_item(struct archive_read* a, char unix_time,
- uint64_t* where, ssize_t* extra_data_size)
+ uint64_t* where, int64_t* extra_data_size)
{
if(unix_time) {
uint32_t time_val;
@@ -1318,7 +1329,7 @@ static int parse_htime_item(struct archive_read* a, char unix_time,
}
static int parse_file_extra_version(struct archive_read* a,
- struct archive_entry* e, ssize_t* extra_data_size)
+ struct archive_entry* e, int64_t* extra_data_size)
{
size_t flags = 0;
size_t version = 0;
@@ -1372,7 +1383,7 @@ static int parse_file_extra_version(struct archive_read* a,
}
static int parse_file_extra_htime(struct archive_read* a,
- struct archive_entry* e, struct rar5* rar, ssize_t* extra_data_size)
+ struct archive_entry* e, struct rar5* rar, int64_t* extra_data_size)
{
char unix_time = 0;
size_t flags = 0;
@@ -1425,7 +1436,7 @@ static int parse_file_extra_htime(struct archive_read* a,
}
static int parse_file_extra_redir(struct archive_read* a,
- struct archive_entry* e, struct rar5* rar, ssize_t* extra_data_size)
+ struct archive_entry* e, struct rar5* rar, int64_t* extra_data_size)
{
uint64_t value_size = 0;
size_t target_size = 0;
@@ -1448,9 +1459,6 @@ static int parse_file_extra_redir(struct archive_read* a,
return ARCHIVE_EOF;
*extra_data_size -= target_size + 1;
- if(!read_ahead(a, target_size, &p))
- return ARCHIVE_EOF;
-
if(target_size > (MAX_NAME_IN_CHARS - 1)) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"Link target is too long");
@@ -1463,6 +1471,9 @@ static int parse_file_extra_redir(struct archive_read* a,
return ARCHIVE_FATAL;
}
+ if(!read_ahead(a, target_size, &p))
+ return ARCHIVE_EOF;
+
memcpy(target_utf8_buf, p, target_size);
target_utf8_buf[target_size] = 0;
@@ -1496,7 +1507,7 @@ static int parse_file_extra_redir(struct archive_read* a,
}
static int parse_file_extra_owner(struct archive_read* a,
- struct archive_entry* e, ssize_t* extra_data_size)
+ struct archive_entry* e, int64_t* extra_data_size)
{
uint64_t flags = 0;
uint64_t value_size = 0;
@@ -1576,15 +1587,15 @@ static int parse_file_extra_owner(struct archive_read* a,
}
static int process_head_file_extra(struct archive_read* a,
- struct archive_entry* e, struct rar5* rar, ssize_t extra_data_size)
+ struct archive_entry* e, struct rar5* rar, int64_t extra_data_size)
{
- size_t extra_field_size;
- size_t extra_field_id = 0;
+ uint64_t extra_field_size;
+ uint64_t extra_field_id = 0;
int ret = ARCHIVE_FATAL;
- size_t var_size;
+ uint64_t var_size;
while(extra_data_size > 0) {
- if(!read_var_sized(a, &extra_field_size, &var_size))
+ if(!read_var(a, &extra_field_size, &var_size))
return ARCHIVE_EOF;
extra_data_size -= var_size;
@@ -1592,9 +1603,10 @@ static int process_head_file_extra(struct archive_read* a,
return ARCHIVE_EOF;
}
- if(!read_var_sized(a, &extra_field_id, &var_size))
+ if(!read_var(a, &extra_field_id, &var_size))
return ARCHIVE_EOF;
+ extra_field_size -= var_size;
extra_data_size -= var_size;
if(ARCHIVE_OK != consume(a, var_size)) {
return ARCHIVE_EOF;
@@ -1622,12 +1634,19 @@ static int process_head_file_extra(struct archive_read* a,
&extra_data_size);
break;
case EX_CRYPT:
+ /* Mark the entry as encrypted */
+ archive_entry_set_is_data_encrypted(e, 1);
+ rar->has_encrypted_entries = 1;
+ rar->cstate.data_encrypted = 1;
/* fallthrough */
case EX_SUBDATA:
/* fallthrough */
default:
/* Skip unsupported entry. */
- return consume(a, extra_data_size);
+ extra_data_size -= extra_field_size;
+ if (ARCHIVE_OK != consume(a, extra_field_size)) {
+ return ARCHIVE_EOF;
+ }
}
}
@@ -1642,7 +1661,7 @@ static int process_head_file_extra(struct archive_read* a,
static int process_head_file(struct archive_read* a, struct rar5* rar,
struct archive_entry* entry, size_t block_flags)
{
- ssize_t extra_data_size = 0;
+ int64_t extra_data_size = 0;
size_t data_size = 0;
size_t file_flags = 0;
size_t file_attr = 0;
@@ -1682,12 +1701,12 @@ static int process_head_file(struct archive_read* a, struct rar5* rar,
}
if(block_flags & HFL_EXTRA_DATA) {
- size_t edata_size = 0;
- if(!read_var_sized(a, &edata_size, NULL))
+ uint64_t edata_size = 0;
+ if(!read_var(a, &edata_size, NULL))
return ARCHIVE_EOF;
/* Intentional type cast from unsigned to signed. */
- extra_data_size = (ssize_t) edata_size;
+ extra_data_size = (int64_t) edata_size;
}
if(block_flags & HFL_DATA) {
@@ -1745,9 +1764,11 @@ static int process_head_file(struct archive_read* a, struct rar5* rar,
rar->file.solid = (compression_info & SOLID) > 0;
/* Archives which declare solid files without initializing the window
- * buffer first are invalid. */
+ * buffer first are invalid, unless previous data was encrypted, in
+ * which case we may never have had the chance */
- if(rar->file.solid > 0 && rar->cstate.window_buf == NULL) {
+ if(rar->file.solid > 0 && rar->cstate.data_encrypted == 0 &&
+ rar->cstate.window_buf == NULL) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"Declared solid file, but no window buffer "
"initialized yet.");
@@ -1776,15 +1797,24 @@ static int process_head_file(struct archive_read* a, struct rar5* rar,
return ARCHIVE_FATAL;
}
}
+ else
+ rar->cstate.data_encrypted = 0; /* Reset for new buffer */
if(rar->cstate.window_size < (ssize_t) window_size &&
rar->cstate.window_buf)
{
+ /* The `data_ready` stack contains pointers to the `window_buf` or
+ * `filtered_buf` buffers. Since we're about to reallocate the first
+ * buffer, some of those pointers could become invalid. Therefore, we
+ * need to dispose of all entries from the stack before attempting the
+ * realloc. */
+ clear_data_ready_stack(rar);
+
/* If window_buf has been allocated before, reallocate it, so
* that its size will match new window_size. */
uint8_t* new_window_buf =
- realloc(rar->cstate.window_buf, window_size);
+ realloc(rar->cstate.window_buf, (size_t) window_size);
if(!new_window_buf) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
@@ -1837,27 +1867,25 @@ static int process_head_file(struct archive_read* a, struct rar5* rar,
if (file_attr & (ATTR_READONLY | ATTR_HIDDEN | ATTR_SYSTEM)) {
char *fflags_text, *ptr;
- /* allocate for "rdonly,hidden,system," */
- fflags_text = malloc(22 * sizeof(char));
+ /* allocate for ",rdonly,hidden,system" */
+ fflags_text = malloc(22 * sizeof(*fflags_text));
if (fflags_text != NULL) {
ptr = fflags_text;
if (file_attr & ATTR_READONLY) {
- strcpy(ptr, "rdonly,");
+ strcpy(ptr, ",rdonly");
ptr = ptr + 7;
}
if (file_attr & ATTR_HIDDEN) {
- strcpy(ptr, "hidden,");
+ strcpy(ptr, ",hidden");
ptr = ptr + 7;
}
if (file_attr & ATTR_SYSTEM) {
- strcpy(ptr, "system,");
+ strcpy(ptr, ",system");
ptr = ptr + 7;
}
if (ptr > fflags_text) {
- /* Delete trailing comma */
- *(ptr - 1) = '\0';
archive_entry_copy_fflags_text(entry,
- fflags_text);
+ fflags_text + 1);
}
free(fflags_text);
}
@@ -1876,9 +1904,6 @@ static int process_head_file(struct archive_read* a, struct rar5* rar,
if(!read_var_sized(a, &name_size, NULL))
return ARCHIVE_EOF;
- if(!read_ahead(a, name_size, &p))
- return ARCHIVE_EOF;
-
if(name_size > (MAX_NAME_IN_CHARS - 1)) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"Filename is too long");
@@ -1893,6 +1918,9 @@ static int process_head_file(struct archive_read* a, struct rar5* rar,
return ARCHIVE_FATAL;
}
+ if(!read_ahead(a, name_size, &p))
+ return ARCHIVE_EOF;
+
memcpy(name_utf8_buf, p, name_size);
name_utf8_buf[name_size] = 0;
if(ARCHIVE_OK != consume(a, name_size)) {
@@ -1980,7 +2008,7 @@ static int process_head_main(struct archive_read* a, struct rar5* rar,
struct archive_entry* entry, size_t block_flags)
{
int ret;
- size_t extra_data_size = 0;
+ uint64_t extra_data_size = 0;
size_t extra_field_size = 0;
size_t extra_field_id = 0;
size_t archive_flags = 0;
@@ -2002,7 +2030,7 @@ static int process_head_main(struct archive_read* a, struct rar5* rar,
(void) entry;
if(block_flags & HFL_EXTRA_DATA) {
- if(!read_var_sized(a, &extra_data_size, NULL))
+ if(!read_var(a, &extra_data_size, NULL))
return ARCHIVE_EOF;
} else {
extra_data_size = 0;
@@ -2229,10 +2257,12 @@ static int process_base_block(struct archive_read* a,
/* Verify the CRC32 of the header data. */
computed_crc = (uint32_t) crc32(0, p, (int) hdr_size);
if(computed_crc != hdr_crc) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"Header CRC error");
return ARCHIVE_FATAL;
+#endif
}
/* If the checksum is OK, we proceed with parsing. */
@@ -2271,6 +2301,10 @@ static int process_base_block(struct archive_read* a,
ret = process_head_file(a, rar, entry, header_flags);
return ret;
case HEAD_CRYPT:
+ archive_entry_set_is_metadata_encrypted(entry, 1);
+ archive_entry_set_is_data_encrypted(entry, 1);
+ rar->has_encrypted_entries = 1;
+ rar->headers_are_encrypted = 1;
archive_set_error(&a->archive,
ARCHIVE_ERRNO_FILE_FORMAT,
"Encryption is not supported");
@@ -2415,6 +2449,14 @@ static int rar5_read_header(struct archive_read *a,
struct rar5* rar = get_context(a);
int ret;
+ /*
+ * It should be sufficient to call archive_read_next_header() for
+ * a reader to determine if an entry is encrypted or not.
+ */
+ if (rar->has_encrypted_entries == ARCHIVE_READ_FORMAT_ENCRYPTION_DONT_KNOW) {
+ rar->has_encrypted_entries = 0;
+ }
+
if(rar->header_initialized == 0) {
init_header(a);
if ((ret = try_skip_sfx(a)) < ARCHIVE_WARN)
@@ -2453,6 +2495,8 @@ static void init_unpack(struct rar5* rar) {
rar->cstate.filtered_buf = NULL;
}
+ clear_data_ready_stack(rar);
+
rar->cstate.write_ptr = 0;
rar->cstate.last_write_ptr = 0;
@@ -2983,7 +3027,7 @@ static int decode_code_length(struct archive_read* a, struct rar5* rar,
static int copy_string(struct archive_read* a, int len, int dist) {
struct rar5* rar = get_context(a);
- const uint64_t cmask = rar->cstate.window_mask;
+ const ssize_t cmask = rar->cstate.window_mask;
const uint64_t write_ptr = rar->cstate.write_ptr +
rar->cstate.solid_offset;
int i;
@@ -3627,6 +3671,10 @@ static int use_data(struct rar5* rar, const void** buf, size_t* size,
return ARCHIVE_RETRY;
}
+static void clear_data_ready_stack(struct rar5* rar) {
+ memset(&rar->cstate.dready, 0, sizeof(rar->cstate.dready));
+}
+
/* Pushes the `buf`, `size` and `offset` arguments to the rar->cstate.dready
* FIFO stack. Those values will be popped from this stack by the `use_data`
* function. */
@@ -4069,6 +4117,16 @@ static int rar5_read_data(struct archive_read *a, const void **buff,
if (size)
*size = 0;
+ if (rar->has_encrypted_entries == ARCHIVE_READ_FORMAT_ENCRYPTION_DONT_KNOW) {
+ rar->has_encrypted_entries = 0;
+ }
+
+ if (rar->headers_are_encrypted || rar->cstate.data_encrypted) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Reading encrypted data is not currently supported");
+ return ARCHIVE_FATAL;
+ }
+
if(rar->file.dir > 0) {
/* Don't process any data if this file entry was declared
* as a directory. This is needed, because entries marked as
@@ -4120,11 +4178,14 @@ static int rar5_read_data(struct archive_read *a, const void **buff,
static int rar5_read_data_skip(struct archive_read *a) {
struct rar5* rar = get_context(a);
- if(rar->main.solid) {
+ if(rar->main.solid && (rar->cstate.data_encrypted == 0)) {
/* In solid archives, instead of skipping the data, we need to
* extract it, and dispose the result. The side effect of this
* operation will be setting up the initial window buffer state
- * needed to be able to extract the selected file. */
+ * needed to be able to extract the selected file. Note that
+ * this is only possible when data withing this solid block is
+ * not encrypted, in which case we'll skip and fail if the user
+ * tries to read data. */
int ret;
@@ -4185,6 +4246,7 @@ static int rar5_cleanup(struct archive_read *a) {
free(rar->cstate.window_buf);
free(rar->cstate.filtered_buf);
+ clear_data_ready_stack(rar);
free(rar->vol.push_buf);
@@ -4199,14 +4261,19 @@ static int rar5_cleanup(struct archive_read *a) {
static int rar5_capabilities(struct archive_read * a) {
(void) a;
- return 0;
+ return (ARCHIVE_READ_FORMAT_CAPS_ENCRYPT_DATA
+ | ARCHIVE_READ_FORMAT_CAPS_ENCRYPT_METADATA);
}
static int rar5_has_encrypted_entries(struct archive_read *_a) {
- (void) _a;
+ if (_a && _a->format) {
+ struct rar5 *rar = (struct rar5 *)_a->format->data;
+ if (rar) {
+ return rar->has_encrypted_entries;
+ }
+ }
- /* Unsupported for now. */
- return ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED;
+ return ARCHIVE_READ_FORMAT_ENCRYPTION_DONT_KNOW;
}
static int rar5_init(struct rar5* rar) {
@@ -4215,6 +4282,12 @@ static int rar5_init(struct rar5* rar) {
if(CDE_OK != cdeque_init(&rar->cstate.filters, 8192))
return ARCHIVE_FATAL;
+ /*
+ * Until enough data has been read, we cannot tell about
+ * any encrypted entries yet.
+ */
+ rar->has_encrypted_entries = ARCHIVE_READ_FORMAT_ENCRYPTION_DONT_KNOW;
+
return ARCHIVE_OK;
}
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_raw.c b/contrib/libarchive/libarchive/archive_read_support_format_raw.c
index efdbf276baf7..e935396dda6f 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_raw.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_raw.c
@@ -61,7 +61,7 @@ archive_read_support_format_raw(struct archive *_a)
archive_check_magic(_a, ARCHIVE_READ_MAGIC,
ARCHIVE_STATE_NEW, "archive_read_support_format_raw");
- info = (struct raw_info *)calloc(1, sizeof(*info));
+ info = calloc(1, sizeof(*info));
if (info == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate raw_info data");
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_tar.c b/contrib/libarchive/libarchive/archive_read_support_format_tar.c
index db36b9e07767..ecaf6c392d9a 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_tar.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_tar.c
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2003-2007 Tim Kientzle
+ * Copyright (c) 2003-2023 Tim Kientzle
* Copyright (c) 2011-2012 Michihiro NAKAJIMA
* Copyright (c) 2016 Martin Matuska
* All rights reserved.
@@ -117,33 +117,27 @@ struct sparse_block {
};
struct tar {
- struct archive_string acl_text;
struct archive_string entry_pathname;
/* For "GNU.sparse.name" and other similar path extensions. */
struct archive_string entry_pathname_override;
- struct archive_string entry_linkpath;
struct archive_string entry_uname;
struct archive_string entry_gname;
- struct archive_string longlink;
- struct archive_string longname;
- struct archive_string pax_header;
- struct archive_string pax_global;
+ struct archive_string entry_linkpath;
struct archive_string line;
- int pax_hdrcharset_binary;
- int header_recursion_depth;
+ int pax_hdrcharset_utf8;
int64_t entry_bytes_remaining;
int64_t entry_offset;
int64_t entry_padding;
int64_t entry_bytes_unconsumed;
int64_t realsize;
- int sparse_allowed;
struct sparse_block *sparse_list;
struct sparse_block *sparse_last;
int64_t sparse_offset;
int64_t sparse_numbytes;
int sparse_gnu_major;
int sparse_gnu_minor;
- char sparse_gnu_pending;
+ char sparse_gnu_attributes_seen;
+ char filetype;
struct archive_string localname;
struct archive_string_conv *opt_sconv;
@@ -168,25 +162,26 @@ static int gnu_sparse_old_read(struct archive_read *, struct tar *,
static int gnu_sparse_old_parse(struct archive_read *, struct tar *,
const struct gnu_sparse *sparse, int length);
static int gnu_sparse_01_parse(struct archive_read *, struct tar *,
- const char *);
+ const char *, size_t);
static ssize_t gnu_sparse_10_read(struct archive_read *, struct tar *,
- size_t *);
+ size_t *);
static int header_Solaris_ACL(struct archive_read *, struct tar *,
struct archive_entry *, const void *, size_t *);
static int header_common(struct archive_read *, struct tar *,
struct archive_entry *, const void *);
static int header_old_tar(struct archive_read *, struct tar *,
struct archive_entry *, const void *);
-static int header_pax_extensions(struct archive_read *, struct tar *,
+static int header_pax_extension(struct archive_read *, struct tar *,
struct archive_entry *, const void *, size_t *);
static int header_pax_global(struct archive_read *, struct tar *,
struct archive_entry *, const void *h, size_t *);
-static int header_longlink(struct archive_read *, struct tar *,
+static int header_gnu_longlink(struct archive_read *, struct tar *,
struct archive_entry *, const void *h, size_t *);
-static int header_longname(struct archive_read *, struct tar *,
- struct archive_entry *, const void *h, size_t *);
-static int read_mac_metadata_blob(struct archive_read *, struct tar *,
+static int header_gnu_longname(struct archive_read *, struct tar *,
struct archive_entry *, const void *h, size_t *);
+static int is_mac_metadata_entry(struct archive_entry *entry);
+static int read_mac_metadata_blob(struct archive_read *,
+ struct archive_entry *, size_t *);
static int header_volume(struct archive_read *, struct tar *,
struct archive_entry *, const void *h, size_t *);
static int header_ustar(struct archive_read *, struct tar *,
@@ -204,21 +199,21 @@ static int archive_read_format_tar_read_header(struct archive_read *,
struct archive_entry *);
static int checksum(struct archive_read *, const void *);
static int pax_attribute(struct archive_read *, struct tar *,
- struct archive_entry *, const char *key, const char *value,
- size_t value_length);
-static int pax_attribute_acl(struct archive_read *, struct tar *,
- struct archive_entry *, const char *, int);
-static int pax_attribute_xattr(struct archive_entry *, const char *,
- const char *);
-static int pax_header(struct archive_read *, struct tar *,
- struct archive_entry *, struct archive_string *);
-static void pax_time(const char *, int64_t *sec, long *nanos);
+ struct archive_entry *, const char *key, size_t key_length,
+ size_t value_length, size_t *unconsumed);
+static int pax_attribute_LIBARCHIVE_xattr(struct archive_entry *,
+ const char *, size_t, const char *, size_t);
+static int pax_attribute_SCHILY_acl(struct archive_read *, struct tar *,
+ struct archive_entry *, size_t, int);
+static int pax_attribute_SUN_holesdata(struct archive_read *, struct tar *,
+ struct archive_entry *, const char *, size_t);
+static void pax_time(const char *, size_t, int64_t *sec, long *nanos);
static ssize_t readline(struct archive_read *, struct tar *, const char **,
ssize_t limit, size_t *);
static int read_body_to_string(struct archive_read *, struct tar *,
struct archive_string *, const void *h, size_t *);
-static int solaris_sparse_parse(struct archive_read *, struct tar *,
- struct archive_entry *, const char *);
+static int read_bytes_to_string(struct archive_read *,
+ struct archive_string *, size_t, size_t *);
static int64_t tar_atol(const char *, size_t);
static int64_t tar_atol10(const char *, size_t);
static int64_t tar_atol256(const char *, size_t);
@@ -226,9 +221,21 @@ static int64_t tar_atol8(const char *, size_t);
static int tar_read_header(struct archive_read *, struct tar *,
struct archive_entry *, size_t *);
static int tohex(int c);
-static char *url_decode(const char *);
+static char *url_decode(const char *, size_t);
static void tar_flush_unconsumed(struct archive_read *, size_t *);
+/* Sanity limits: These numbers should be low enough to
+ * prevent a maliciously-crafted archive from forcing us to
+ * allocate extreme amounts of memory. But of course, they
+ * need to be high enough for any correct value. These
+ * will likely need some adjustment as we get more experience. */
+static const size_t guname_limit = 65536; /* Longest uname or gname: 64kiB */
+static const size_t pathname_limit = 1048576; /* Longest path name: 1MiB */
+static const size_t sparse_map_limit = 8 * 1048576; /* Longest sparse map: 8MiB */
+static const size_t xattr_limit = 16 * 1048576; /* Longest xattr: 16MiB */
+static const size_t fflags_limit = 512; /* Longest fflags */
+static const size_t acl_limit = 131072; /* Longest textual ACL: 128kiB */
+static const int64_t entry_limit = 0xfffffffffffffffLL; /* 2^60 bytes = 1 ExbiByte */
int
archive_read_support_format_gnutar(struct archive *a)
@@ -249,7 +256,7 @@ archive_read_support_format_tar(struct archive *_a)
archive_check_magic(_a, ARCHIVE_READ_MAGIC,
ARCHIVE_STATE_NEW, "archive_read_support_format_tar");
- tar = (struct tar *)calloc(1, sizeof(*tar));
+ tar = calloc(1, sizeof(*tar));
if (tar == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate tar data");
@@ -283,17 +290,12 @@ archive_read_format_tar_cleanup(struct archive_read *a)
tar = (struct tar *)(a->format->data);
gnu_clear_sparse_list(tar);
- archive_string_free(&tar->acl_text);
archive_string_free(&tar->entry_pathname);
archive_string_free(&tar->entry_pathname_override);
- archive_string_free(&tar->entry_linkpath);
archive_string_free(&tar->entry_uname);
archive_string_free(&tar->entry_gname);
+ archive_string_free(&tar->entry_linkpath);
archive_string_free(&tar->line);
- archive_string_free(&tar->pax_global);
- archive_string_free(&tar->pax_header);
- archive_string_free(&tar->longname);
- archive_string_free(&tar->longlink);
archive_string_free(&tar->localname);
free(tar);
(a->format->data) = NULL;
@@ -505,6 +507,8 @@ archive_read_format_tar_read_header(struct archive_read *a,
* probably not worthwhile just to support the relatively
* obscure tar->cpio conversion case.
*/
+ /* TODO: Move this into `struct tar` to avoid conflicts
+ * when reading multiple archives */
static int default_inode;
static int default_dev;
struct tar *tar;
@@ -623,11 +627,10 @@ archive_read_format_tar_read_data(struct archive_read *a,
}
*buff = __archive_read_ahead(a, 1, &bytes_read);
- if (bytes_read < 0)
- return (ARCHIVE_FATAL);
if (*buff == NULL) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "Truncated tar archive");
+ "Truncated tar archive"
+ " detected while reading data");
return (ARCHIVE_FATAL);
}
if (bytes_read > tar->entry_bytes_remaining)
@@ -688,7 +691,7 @@ archive_read_format_tar_skip(struct archive_read *a)
}
/*
- * This function recursively interprets all of the headers associated
+ * This function reads and interprets all of the headers associated
* with a single entry.
*/
static int
@@ -696,190 +699,258 @@ tar_read_header(struct archive_read *a, struct tar *tar,
struct archive_entry *entry, size_t *unconsumed)
{
ssize_t bytes;
- int err, eof_vol_header;
+ int err = ARCHIVE_OK, err2;
+ int eof_fatal = 0; /* EOF is okay at some points... */
const char *h;
const struct archive_entry_header_ustar *header;
const struct archive_entry_header_gnutar *gnuheader;
- eof_vol_header = 0;
-
- /* Loop until we find a workable header record. */
- for (;;) {
- tar_flush_unconsumed(a, unconsumed);
+ /* Bitmask of what header types we've seen. */
+ int32_t seen_headers = 0;
+ static const int32_t seen_A_header = 1;
+ static const int32_t seen_g_header = 2;
+ static const int32_t seen_K_header = 4;
+ static const int32_t seen_L_header = 8;
+ static const int32_t seen_V_header = 16;
+ static const int32_t seen_x_header = 32; /* Also X */
+ static const int32_t seen_mac_metadata = 512;
+
+ tar->pax_hdrcharset_utf8 = 1;
+ tar->sparse_gnu_attributes_seen = 0;
+ archive_string_empty(&(tar->entry_gname));
+ archive_string_empty(&(tar->entry_pathname));
+ archive_string_empty(&(tar->entry_pathname_override));
+ archive_string_empty(&(tar->entry_uname));
+ archive_string_empty(&tar->entry_linkpath);
- /* Read 512-byte header record */
- h = __archive_read_ahead(a, 512, &bytes);
- if (bytes < 0)
- return ((int)bytes);
- if (bytes == 0) { /* EOF at a block boundary. */
- /* Some writers do omit the block of nulls. <sigh> */
- return (ARCHIVE_EOF);
- }
- if (bytes < 512) { /* Short block at EOF; this is bad. */
- archive_set_error(&a->archive,
- ARCHIVE_ERRNO_FILE_FORMAT,
- "Truncated tar archive");
- return (ARCHIVE_FATAL);
- }
- *unconsumed = 512;
+ /* Ensure format is set. */
+ if (a->archive.archive_format_name == NULL) {
+ a->archive.archive_format = ARCHIVE_FORMAT_TAR;
+ a->archive.archive_format_name = "tar";
+ }
- /* Header is workable if it's not an end-of-archive mark. */
- if (h[0] != 0 || !archive_block_is_null(h))
- break;
+ /*
+ * TODO: Write global/default pax options into
+ * 'entry' struct here before overwriting with
+ * file-specific options.
+ */
- /* Ensure format is set for archives with only null blocks. */
- if (a->archive.archive_format_name == NULL) {
- a->archive.archive_format = ARCHIVE_FORMAT_TAR;
- a->archive.archive_format_name = "tar";
- }
+ /* Loop over all the headers needed for the next entry */
+ for (;;) {
- if (!tar->read_concatenated_archives) {
- /* Try to consume a second all-null record, as well. */
+ /* Find the next valid header record. */
+ while (1) {
tar_flush_unconsumed(a, unconsumed);
- h = __archive_read_ahead(a, 512, NULL);
- if (h != NULL && h[0] == 0 && archive_block_is_null(h))
- __archive_read_consume(a, 512);
- archive_clear_error(&a->archive);
- return (ARCHIVE_EOF);
- }
- /*
- * We're reading concatenated archives, ignore this block and
- * loop to get the next.
- */
- }
+ /* Read 512-byte header record */
+ h = __archive_read_ahead(a, 512, &bytes);
+ if (bytes == 0) { /* EOF at a block boundary. */
+ if (eof_fatal) {
+ /* We've read a special header already;
+ * if there's no regular header, then this is
+ * a premature EOF. */
+ archive_set_error(&a->archive, EINVAL,
+ "Damaged tar archive");
+ return (ARCHIVE_FATAL);
+ } else {
+ return (ARCHIVE_EOF);
+ }
+ }
+ if (h == NULL) { /* Short block at EOF; this is bad. */
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_FILE_FORMAT,
+ "Truncated tar archive"
+ " detected while reading next heaader");
+ return (ARCHIVE_FATAL);
+ }
+ *unconsumed += 512;
- /*
- * Note: If the checksum fails and we return ARCHIVE_RETRY,
- * then the client is likely to just retry. This is a very
- * crude way to search for the next valid header!
- *
- * TODO: Improve this by implementing a real header scan.
- */
- if (!checksum(a, h)) {
- tar_flush_unconsumed(a, unconsumed);
- archive_set_error(&a->archive, EINVAL, "Damaged tar archive");
- return (ARCHIVE_RETRY); /* Retryable: Invalid header */
- }
+ if (h[0] == 0 && archive_block_is_null(h)) {
+ /* We found a NULL block which indicates end-of-archive */
- if (++tar->header_recursion_depth > 32) {
- tar_flush_unconsumed(a, unconsumed);
- archive_set_error(&a->archive, EINVAL, "Too many special headers");
- return (ARCHIVE_WARN);
- }
+ if (tar->read_concatenated_archives) {
+ /* We're ignoring NULL blocks, so keep going. */
+ continue;
+ }
- /* Determine the format variant. */
- header = (const struct archive_entry_header_ustar *)h;
+ /* Try to consume a second all-null record, as well. */
+ /* If we can't, that's okay. */
+ tar_flush_unconsumed(a, unconsumed);
+ h = __archive_read_ahead(a, 512, NULL);
+ if (h != NULL && h[0] == 0 && archive_block_is_null(h))
+ __archive_read_consume(a, 512);
- switch(header->typeflag[0]) {
- case 'A': /* Solaris tar ACL */
- a->archive.archive_format = ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE;
- a->archive.archive_format_name = "Solaris tar";
- err = header_Solaris_ACL(a, tar, entry, h, unconsumed);
- break;
- case 'g': /* POSIX-standard 'g' header. */
- a->archive.archive_format = ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE;
- a->archive.archive_format_name = "POSIX pax interchange format";
- err = header_pax_global(a, tar, entry, h, unconsumed);
- if (err == ARCHIVE_EOF)
- return (err);
- break;
- case 'K': /* Long link name (GNU tar, others) */
- err = header_longlink(a, tar, entry, h, unconsumed);
- break;
- case 'L': /* Long filename (GNU tar, others) */
- err = header_longname(a, tar, entry, h, unconsumed);
- break;
- case 'V': /* GNU volume header */
- err = header_volume(a, tar, entry, h, unconsumed);
- if (err == ARCHIVE_EOF)
- eof_vol_header = 1;
- break;
- case 'X': /* Used by SUN tar; same as 'x'. */
- a->archive.archive_format = ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE;
- a->archive.archive_format_name =
- "POSIX pax interchange format (Sun variant)";
- err = header_pax_extensions(a, tar, entry, h, unconsumed);
- break;
- case 'x': /* POSIX-standard 'x' header. */
- a->archive.archive_format = ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE;
- a->archive.archive_format_name = "POSIX pax interchange format";
- err = header_pax_extensions(a, tar, entry, h, unconsumed);
- break;
- default:
- gnuheader = (const struct archive_entry_header_gnutar *)h;
- if (memcmp(gnuheader->magic, "ustar \0", 8) == 0) {
- a->archive.archive_format = ARCHIVE_FORMAT_TAR_GNUTAR;
- a->archive.archive_format_name = "GNU tar format";
- err = header_gnutar(a, tar, entry, h, unconsumed);
- } else if (memcmp(header->magic, "ustar", 5) == 0) {
- if (a->archive.archive_format != ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE) {
- a->archive.archive_format = ARCHIVE_FORMAT_TAR_USTAR;
- a->archive.archive_format_name = "POSIX ustar format";
+ archive_clear_error(&a->archive);
+ return (ARCHIVE_EOF);
}
- err = header_ustar(a, tar, entry, h);
- } else {
- a->archive.archive_format = ARCHIVE_FORMAT_TAR;
- a->archive.archive_format_name = "tar (non-POSIX)";
- err = header_old_tar(a, tar, entry, h);
- }
- }
- if (err == ARCHIVE_FATAL)
- return (err);
- tar_flush_unconsumed(a, unconsumed);
-
- h = NULL;
- header = NULL;
+ /* This is NOT a null block, so it must be a valid header. */
+ if (!checksum(a, h)) {
+ tar_flush_unconsumed(a, unconsumed);
+ archive_set_error(&a->archive, EINVAL, "Damaged tar archive");
+ /* If we've read some critical information (pax headers, etc)
+ * and _then_ see a bad header, we can't really recover. */
+ if (eof_fatal) {
+ return (ARCHIVE_FATAL);
+ } else {
+ return (ARCHIVE_RETRY);
+ }
+ }
+ break;
+ }
- --tar->header_recursion_depth;
- /* Yuck. Apple's design here ends up storing long pathname
- * extensions for both the AppleDouble extension entry and the
- * regular entry.
- */
- if ((err == ARCHIVE_WARN || err == ARCHIVE_OK) &&
- tar->header_recursion_depth == 0 &&
- tar->process_mac_extensions) {
- int err2 = read_mac_metadata_blob(a, tar, entry, h, unconsumed);
- if (err2 < err)
- err = err2;
- }
-
- /* We return warnings or success as-is. Anything else is fatal. */
- if (err == ARCHIVE_WARN || err == ARCHIVE_OK) {
- if (tar->sparse_gnu_pending) {
- if (tar->sparse_gnu_major == 1 &&
- tar->sparse_gnu_minor == 0) {
- ssize_t bytes_read;
-
- tar->sparse_gnu_pending = 0;
- /* Read initial sparse map. */
- bytes_read = gnu_sparse_10_read(a, tar, unconsumed);
- if (bytes_read < 0)
- return ((int)bytes_read);
- tar->entry_bytes_remaining -= bytes_read;
+ /* Determine the format variant. */
+ header = (const struct archive_entry_header_ustar *)h;
+ switch(header->typeflag[0]) {
+ case 'A': /* Solaris tar ACL */
+ if (seen_headers & seen_A_header) {
+ return (ARCHIVE_FATAL);
+ }
+ seen_headers |= seen_A_header;
+ a->archive.archive_format = ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE;
+ a->archive.archive_format_name = "Solaris tar";
+ err2 = header_Solaris_ACL(a, tar, entry, h, unconsumed);
+ break;
+ case 'g': /* POSIX-standard 'g' header. */
+ if (seen_headers & seen_g_header) {
+ return (ARCHIVE_FATAL);
+ }
+ seen_headers |= seen_g_header;
+ a->archive.archive_format = ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE;
+ a->archive.archive_format_name = "POSIX pax interchange format";
+ err2 = header_pax_global(a, tar, entry, h, unconsumed);
+ break;
+ case 'K': /* Long link name (GNU tar, others) */
+ if (seen_headers & seen_K_header) {
+ return (ARCHIVE_FATAL);
+ }
+ seen_headers |= seen_K_header;
+ err2 = header_gnu_longlink(a, tar, entry, h, unconsumed);
+ break;
+ case 'L': /* Long filename (GNU tar, others) */
+ if (seen_headers & seen_L_header) {
+ return (ARCHIVE_FATAL);
+ }
+ seen_headers |= seen_L_header;
+ err2 = header_gnu_longname(a, tar, entry, h, unconsumed);
+ break;
+ case 'V': /* GNU volume header */
+ if (seen_headers & seen_V_header) {
+ return (ARCHIVE_FATAL);
+ }
+ seen_headers |= seen_V_header;
+ err2 = header_volume(a, tar, entry, h, unconsumed);
+ break;
+ case 'X': /* Used by SUN tar; same as 'x'. */
+ if (seen_headers & seen_x_header) {
+ return (ARCHIVE_FATAL);
+ }
+ seen_headers |= seen_x_header;
+ a->archive.archive_format = ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE;
+ a->archive.archive_format_name =
+ "POSIX pax interchange format (Sun variant)";
+ err2 = header_pax_extension(a, tar, entry, h, unconsumed);
+ break;
+ case 'x': /* POSIX-standard 'x' header. */
+ if (seen_headers & seen_x_header) {
+ return (ARCHIVE_FATAL);
+ }
+ seen_headers |= seen_x_header;
+ a->archive.archive_format = ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE;
+ a->archive.archive_format_name = "POSIX pax interchange format";
+ err2 = header_pax_extension(a, tar, entry, h, unconsumed);
+ break;
+ default: /* Regular header: Legacy tar, GNU tar, or ustar */
+ gnuheader = (const struct archive_entry_header_gnutar *)h;
+ if (memcmp(gnuheader->magic, "ustar \0", 8) == 0) {
+ a->archive.archive_format = ARCHIVE_FORMAT_TAR_GNUTAR;
+ a->archive.archive_format_name = "GNU tar format";
+ err2 = header_gnutar(a, tar, entry, h, unconsumed);
+ } else if (memcmp(header->magic, "ustar", 5) == 0) {
+ if (a->archive.archive_format != ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE) {
+ a->archive.archive_format = ARCHIVE_FORMAT_TAR_USTAR;
+ a->archive.archive_format_name = "POSIX ustar format";
+ }
+ err2 = header_ustar(a, tar, entry, h);
} else {
- archive_set_error(&a->archive,
- ARCHIVE_ERRNO_MISC,
- "Unrecognized GNU sparse file format");
- return (ARCHIVE_WARN);
+ a->archive.archive_format = ARCHIVE_FORMAT_TAR;
+ a->archive.archive_format_name = "tar (non-POSIX)";
+ err2 = header_old_tar(a, tar, entry, h);
}
- tar->sparse_gnu_pending = 0;
+ err = err_combine(err, err2);
+ /* We return warnings or success as-is. Anything else is fatal. */
+ if (err < ARCHIVE_WARN) {
+ return (ARCHIVE_FATAL);
+ }
+ /* Filename of the form `._filename` is an AppleDouble
+ * extension entry. The body is the macOS metadata blob;
+ * this is followed by another entry with the actual
+ * regular file data.
+ * This design has two drawbacks:
+ * = it's brittle; you might just have a file with such a name
+ * = it duplicates any long pathname extensions
+ *
+ * TODO: This probably shouldn't be here at all. Consider
+ * just returning the contents as a regular entry here and
+ * then dealing with it when we write data to disk.
+ */
+ if (tar->process_mac_extensions
+ && ((seen_headers & seen_mac_metadata) == 0)
+ && is_mac_metadata_entry(entry)) {
+ err2 = read_mac_metadata_blob(a, entry, unconsumed);
+ if (err2 < ARCHIVE_WARN) {
+ return (ARCHIVE_FATAL);
+ }
+ err = err_combine(err, err2);
+ /* Note: Other headers can appear again. */
+ seen_headers = seen_mac_metadata;
+ break;
+ }
+
+ /* Reconcile GNU sparse attributes */
+ if (tar->sparse_gnu_attributes_seen) {
+ /* Only 'S' (GNU sparse) and ustar '0' regular files can be sparse */
+ if (tar->filetype != 'S' && tar->filetype != '0') {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Non-regular file cannot be sparse");
+ return (ARCHIVE_WARN);
+ } else if (tar->sparse_gnu_major == 0 &&
+ tar->sparse_gnu_minor == 0) {
+ /* Sparse map already parsed from 'x' header */
+ } else if (tar->sparse_gnu_major == 0 &&
+ tar->sparse_gnu_minor == 1) {
+ /* Sparse map already parsed from 'x' header */
+ } else if (tar->sparse_gnu_major == 1 &&
+ tar->sparse_gnu_minor == 0) {
+ /* Sparse map is prepended to file contents */
+ ssize_t bytes_read;
+ bytes_read = gnu_sparse_10_read(a, tar, unconsumed);
+ if (bytes_read < 0)
+ return ((int)bytes_read);
+ tar->entry_bytes_remaining -= bytes_read;
+ } else {
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_MISC,
+ "Unrecognized GNU sparse file format");
+ return (ARCHIVE_WARN);
+ }
+ }
+ return (err);
}
- return (err);
- }
- if (err == ARCHIVE_EOF) {
- if (!eof_vol_header) {
- /* EOF when recursively reading a header is bad. */
- archive_set_error(&a->archive, EINVAL,
- "Damaged tar archive");
- } else {
- /* If we encounter just a GNU volume header treat
- * this situation as an empty archive */
- return (ARCHIVE_EOF);
+
+ /* We're between headers ... */
+ err = err_combine(err, err2);
+ if (err == ARCHIVE_FATAL)
+ return (err);
+
+ /* The GNU volume header and the pax `g` global header
+ * are both allowed to be the only header in an
+ * archive. If we've seen any other header, a
+ * following EOF is fatal. */
+ if ((seen_headers & ~seen_V_header & ~seen_g_header) != 0) {
+ eof_fatal = 1;
}
}
- return (ARCHIVE_FATAL);
}
/*
@@ -934,7 +1005,12 @@ checksum(struct archive_read *a, const void *h)
if (sum == check)
return (1);
+#if DONT_FAIL_ON_CRC_ERROR
+ /* Speed up fuzzing by pretending the checksum is always right. */
+ return (1);
+#else
return (0);
+#endif
}
/*
@@ -959,25 +1035,20 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar,
struct archive_entry *entry, const void *h, size_t *unconsumed)
{
const struct archive_entry_header_ustar *header;
+ struct archive_string acl_text;
size_t size;
int err, acl_type;
int64_t type;
char *acl, *p;
- /*
- * read_body_to_string adds a NUL terminator, but we need a little
- * more to make sure that we don't overrun acl_text later.
- */
header = (const struct archive_entry_header_ustar *)h;
size = (size_t)tar_atol(header->size, sizeof(header->size));
- err = read_body_to_string(a, tar, &(tar->acl_text), h, unconsumed);
- if (err != ARCHIVE_OK)
- return (err);
-
- /* Recursively read next header */
- err = tar_read_header(a, tar, entry, unconsumed);
- if ((err != ARCHIVE_OK) && (err != ARCHIVE_WARN))
+ archive_string_init(&acl_text);
+ err = read_body_to_string(a, tar, &acl_text, h, unconsumed);
+ if (err != ARCHIVE_OK) {
+ archive_string_free(&acl_text);
return (err);
+ }
/* TODO: Examine the first characters to see if this
* is an AIX ACL descriptor. We'll likely never support
@@ -985,12 +1056,13 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar,
* we do see them. */
/* Leading octal number indicates ACL type and number of entries. */
- p = acl = tar->acl_text.s;
+ p = acl = acl_text.s;
type = 0;
while (*p != '\0' && p < acl + size) {
if (*p < '0' || *p > '7') {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Malformed Solaris ACL attribute (invalid digit)");
+ archive_string_free(&acl_text);
return(ARCHIVE_WARN);
}
type <<= 3;
@@ -998,6 +1070,7 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar,
if (type > 077777777) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Malformed Solaris ACL attribute (count too large)");
+ archive_string_free(&acl_text);
return (ARCHIVE_WARN);
}
p++;
@@ -1015,6 +1088,7 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar,
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Malformed Solaris ACL attribute (unsupported type %o)",
(int)type);
+ archive_string_free(&acl_text);
return (ARCHIVE_WARN);
}
p++;
@@ -1022,6 +1096,7 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar,
if (p >= acl + size) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Malformed Solaris ACL attribute (body overflow)");
+ archive_string_free(&acl_text);
return(ARCHIVE_WARN);
}
@@ -1035,12 +1110,17 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar,
if (tar->sconv_acl == NULL) {
tar->sconv_acl = archive_string_conversion_from_charset(
&(a->archive), "UTF-8", 1);
- if (tar->sconv_acl == NULL)
+ if (tar->sconv_acl == NULL) {
+ archive_string_free(&acl_text);
return (ARCHIVE_FATAL);
+ }
}
archive_strncpy(&(tar->localname), acl, p - acl);
err = archive_acl_from_text_l(archive_entry_acl(entry),
tar->localname.s, acl_type, tar->sconv_acl);
+ /* Workaround: Force perm_is_set() to be correct */
+ /* If this bit were stored in the ACL, this wouldn't be needed */
+ archive_entry_set_perm(entry, archive_entry_perm(entry));
if (err != ARCHIVE_OK) {
if (errno == ENOMEM) {
archive_set_error(&a->archive, ENOMEM,
@@ -1049,6 +1129,7 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar,
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Malformed Solaris ACL attribute (unparsable)");
}
+ archive_string_free(&acl_text);
return (err);
}
@@ -1056,20 +1137,17 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar,
* Interpret 'K' long linkname header.
*/
static int
-header_longlink(struct archive_read *a, struct tar *tar,
+header_gnu_longlink(struct archive_read *a, struct tar *tar,
struct archive_entry *entry, const void *h, size_t *unconsumed)
{
int err;
- err = read_body_to_string(a, tar, &(tar->longlink), h, unconsumed);
- if (err != ARCHIVE_OK)
- return (err);
- err = tar_read_header(a, tar, entry, unconsumed);
- if ((err != ARCHIVE_OK) && (err != ARCHIVE_WARN))
- return (err);
- /* Set symlink if symlink already set, else hardlink. */
- archive_entry_copy_link(entry, tar->longlink.s);
- return (ARCHIVE_OK);
+ struct archive_string linkpath;
+ archive_string_init(&linkpath);
+ err = read_body_to_string(a, tar, &linkpath, h, unconsumed);
+ archive_entry_set_link(entry, linkpath.s);
+ archive_string_free(&linkpath);
+ return (err);
}
static int
@@ -1091,25 +1169,23 @@ set_conversion_failed_error(struct archive_read *a,
* Interpret 'L' long filename header.
*/
static int
-header_longname(struct archive_read *a, struct tar *tar,
+header_gnu_longname(struct archive_read *a, struct tar *tar,
struct archive_entry *entry, const void *h, size_t *unconsumed)
{
int err;
+ struct archive_string longname;
- err = read_body_to_string(a, tar, &(tar->longname), h, unconsumed);
- if (err != ARCHIVE_OK)
- return (err);
- /* Read and parse "real" header, then override name. */
- err = tar_read_header(a, tar, entry, unconsumed);
- if ((err != ARCHIVE_OK) && (err != ARCHIVE_WARN))
- return (err);
- if (archive_entry_copy_pathname_l(entry, tar->longname.s,
- archive_strlen(&(tar->longname)), tar->sconv) != 0)
- err = set_conversion_failed_error(a, tar->sconv, "Pathname");
+ archive_string_init(&longname);
+ err = read_body_to_string(a, tar, &longname, h, unconsumed);
+ if (err == ARCHIVE_OK) {
+ if (archive_entry_copy_pathname_l(entry, longname.s,
+ archive_strlen(&longname), tar->sconv) != 0)
+ err = set_conversion_failed_error(a, tar->sconv, "Pathname");
+ }
+ archive_string_free(&longname);
return (err);
}
-
/*
* Interpret 'V' GNU tar volume header.
*/
@@ -1117,32 +1193,33 @@ static int
header_volume(struct archive_read *a, struct tar *tar,
struct archive_entry *entry, const void *h, size_t *unconsumed)
{
- (void)h;
+ const struct archive_entry_header_ustar *header;
+ int64_t size, to_consume;
+
+ (void)a; /* UNUSED */
+ (void)tar; /* UNUSED */
+ (void)entry; /* UNUSED */
- /* Just skip this and read the next header. */
- return (tar_read_header(a, tar, entry, unconsumed));
+ header = (const struct archive_entry_header_ustar *)h;
+ size = tar_atol(header->size, sizeof(header->size));
+ if (size > (int64_t)pathname_limit) {
+ return (ARCHIVE_FATAL);
+ }
+ to_consume = ((size + 511) & ~511);
+ *unconsumed += to_consume;
+ return (ARCHIVE_OK);
}
/*
- * Read body of an archive entry into an archive_string object.
+ * Read the next `size` bytes into the provided string.
+ * Null-terminate the string.
*/
static int
-read_body_to_string(struct archive_read *a, struct tar *tar,
- struct archive_string *as, const void *h, size_t *unconsumed)
-{
- int64_t size;
- const struct archive_entry_header_ustar *header;
+read_bytes_to_string(struct archive_read *a,
+ struct archive_string *as, size_t size,
+ size_t *unconsumed) {
const void *src;
- (void)tar; /* UNUSED */
- header = (const struct archive_entry_header_ustar *)h;
- size = tar_atol(header->size, sizeof(header->size));
- if ((size > 1048576) || (size < 0)) {
- archive_set_error(&a->archive, EINVAL,
- "Special header too large");
- return (ARCHIVE_FATAL);
- }
-
/* Fail if we can't make our buffer big enough. */
if (archive_string_ensure(as, (size_t)size+1) == NULL) {
archive_set_error(&a->archive, ENOMEM,
@@ -1153,19 +1230,55 @@ read_body_to_string(struct archive_read *a, struct tar *tar,
tar_flush_unconsumed(a, unconsumed);
/* Read the body into the string. */
- *unconsumed = (size_t)((size + 511) & ~ 511);
- src = __archive_read_ahead(a, *unconsumed, NULL);
+ src = __archive_read_ahead(a, size, NULL);
if (src == NULL) {
+ archive_set_error(&a->archive, EINVAL,
+ "Truncated archive"
+ " detected while reading metadata");
*unconsumed = 0;
return (ARCHIVE_FATAL);
}
memcpy(as->s, src, (size_t)size);
as->s[size] = '\0';
as->length = (size_t)size;
+ *unconsumed += size;
return (ARCHIVE_OK);
}
/*
+ * Read body of an archive entry into an archive_string object.
+ */
+static int
+read_body_to_string(struct archive_read *a, struct tar *tar,
+ struct archive_string *as, const void *h, size_t *unconsumed)
+{
+ int64_t size;
+ const struct archive_entry_header_ustar *header;
+ int r;
+
+ (void)tar; /* UNUSED */
+ header = (const struct archive_entry_header_ustar *)h;
+ size = tar_atol(header->size, sizeof(header->size));
+ if (size > entry_limit) {
+ return (ARCHIVE_FATAL);
+ }
+ if ((size > (int64_t)pathname_limit) || (size < 0)) {
+ archive_string_empty(as);
+ int64_t to_consume = ((size + 511) & ~511);
+ if (to_consume != __archive_read_consume(a, to_consume)) {
+ return (ARCHIVE_FATAL);
+ }
+ archive_set_error(&a->archive, EINVAL,
+ "Special header too large: %d > 1MiB",
+ (int)size);
+ return (ARCHIVE_WARN);
+ }
+ r = read_bytes_to_string(a, as, size, unconsumed);
+ *unconsumed += 0x1ff & (-size);
+ return(r);
+}
+
+/*
* Parse out common header elements.
*
* This would be the same as header_old_tar, except that the
@@ -1180,21 +1293,28 @@ header_common(struct archive_read *a, struct tar *tar,
struct archive_entry *entry, const void *h)
{
const struct archive_entry_header_ustar *header;
- char tartype;
+ const char *existing_linkpath;
+ const wchar_t *existing_wcs_linkpath;
int err = ARCHIVE_OK;
header = (const struct archive_entry_header_ustar *)h;
- if (header->linkname[0])
- archive_strncpy(&(tar->entry_linkpath),
- header->linkname, sizeof(header->linkname));
- else
- archive_string_empty(&(tar->entry_linkpath));
/* Parse out the numeric fields (all are octal) */
- archive_entry_set_mode(entry,
- (mode_t)tar_atol(header->mode, sizeof(header->mode)));
- archive_entry_set_uid(entry, tar_atol(header->uid, sizeof(header->uid)));
- archive_entry_set_gid(entry, tar_atol(header->gid, sizeof(header->gid)));
+
+ /* Split mode handling: Set filetype always, perm only if not already set */
+ archive_entry_set_filetype(entry,
+ (mode_t)tar_atol(header->mode, sizeof(header->mode)));
+ if (!archive_entry_perm_is_set(entry)) {
+ archive_entry_set_perm(entry,
+ (mode_t)tar_atol(header->mode, sizeof(header->mode)));
+ }
+ if (!archive_entry_uid_is_set(entry)) {
+ archive_entry_set_uid(entry, tar_atol(header->uid, sizeof(header->uid)));
+ }
+ if (!archive_entry_gid_is_set(entry)) {
+ archive_entry_set_gid(entry, tar_atol(header->gid, sizeof(header->gid)));
+ }
+
tar->entry_bytes_remaining = tar_atol(header->size, sizeof(header->size));
if (tar->entry_bytes_remaining < 0) {
tar->entry_bytes_remaining = 0;
@@ -1202,28 +1322,49 @@ header_common(struct archive_read *a, struct tar *tar,
"Tar entry has negative size");
return (ARCHIVE_FATAL);
}
- if (tar->entry_bytes_remaining == INT64_MAX) {
- /* Note: tar_atol returns INT64_MAX on overflow */
+ if (tar->entry_bytes_remaining > entry_limit) {
tar->entry_bytes_remaining = 0;
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Tar entry size overflow");
return (ARCHIVE_FATAL);
}
- tar->realsize = tar->entry_bytes_remaining;
- archive_entry_set_size(entry, tar->entry_bytes_remaining);
- archive_entry_set_mtime(entry, tar_atol(header->mtime, sizeof(header->mtime)), 0);
+ if (!tar->realsize_override) {
+ tar->realsize = tar->entry_bytes_remaining;
+ }
+ archive_entry_set_size(entry, tar->realsize);
+
+ if (!archive_entry_mtime_is_set(entry)) {
+ archive_entry_set_mtime(entry, tar_atol(header->mtime, sizeof(header->mtime)), 0);
+ }
/* Handle the tar type flag appropriately. */
- tartype = header->typeflag[0];
+ tar->filetype = header->typeflag[0];
- switch (tartype) {
+ /*
+ * TODO: If the linkpath came from Pax extension header, then
+ * we should obey the hdrcharset_utf8 flag when converting these.
+ */
+ switch (tar->filetype) {
case '1': /* Hard link */
- if (archive_entry_copy_hardlink_l(entry, tar->entry_linkpath.s,
- archive_strlen(&(tar->entry_linkpath)), tar->sconv) != 0) {
- err = set_conversion_failed_error(a, tar->sconv,
- "Linkname");
- if (err == ARCHIVE_FATAL)
- return (err);
+ archive_entry_set_link_to_hardlink(entry);
+ existing_wcs_linkpath = archive_entry_hardlink_w(entry);
+ existing_linkpath = archive_entry_hardlink(entry);
+ if ((existing_linkpath == NULL || existing_linkpath[0] == '\0')
+ && (existing_wcs_linkpath == NULL || existing_wcs_linkpath[0] == '\0')) {
+ struct archive_string linkpath;
+ archive_string_init(&linkpath);
+ archive_strncpy(&linkpath,
+ header->linkname, sizeof(header->linkname));
+ if (archive_entry_copy_hardlink_l(entry, linkpath.s,
+ archive_strlen(&linkpath), tar->sconv) != 0) {
+ err = set_conversion_failed_error(a, tar->sconv,
+ "Linkname");
+ if (err == ARCHIVE_FATAL) {
+ archive_string_free(&linkpath);
+ return (err);
+ }
+ }
+ archive_string_free(&linkpath);
}
/*
* The following may seem odd, but: Technically, tar
@@ -1283,16 +1424,29 @@ header_common(struct archive_read *a, struct tar *tar,
*/
break;
case '2': /* Symlink */
+ archive_entry_set_link_to_symlink(entry);
+ existing_wcs_linkpath = archive_entry_symlink_w(entry);
+ existing_linkpath = archive_entry_symlink(entry);
+ if ((existing_linkpath == NULL || existing_linkpath[0] == '\0')
+ && (existing_wcs_linkpath == NULL || existing_wcs_linkpath[0] == '\0')) {
+ struct archive_string linkpath;
+ archive_string_init(&linkpath);
+ archive_strncpy(&linkpath,
+ header->linkname, sizeof(header->linkname));
+ if (archive_entry_copy_symlink_l(entry, linkpath.s,
+ archive_strlen(&linkpath), tar->sconv) != 0) {
+ err = set_conversion_failed_error(a, tar->sconv,
+ "Linkname");
+ if (err == ARCHIVE_FATAL) {
+ archive_string_free(&linkpath);
+ return (err);
+ }
+ }
+ archive_string_free(&linkpath);
+ }
archive_entry_set_filetype(entry, AE_IFLNK);
archive_entry_set_size(entry, 0);
tar->entry_bytes_remaining = 0;
- if (archive_entry_copy_symlink_l(entry, tar->entry_linkpath.s,
- archive_strlen(&(tar->entry_linkpath)), tar->sconv) != 0) {
- err = set_conversion_failed_error(a, tar->sconv,
- "Linkname");
- if (err == ARCHIVE_FATAL)
- return (err);
- }
break;
case '3': /* Character device */
archive_entry_set_filetype(entry, AE_IFCHR);
@@ -1342,15 +1496,9 @@ header_common(struct archive_read *a, struct tar *tar,
* sparse information in the extended area.
*/
/* FALLTHROUGH */
- case '0':
- /*
- * Enable sparse file "read" support only for regular
- * files and explicit GNU sparse files. However, we
- * don't allow non-standard file types to be sparse.
- */
- tar->sparse_allowed = 1;
+ case '0': /* ustar "regular" file */
/* FALLTHROUGH */
- default: /* Regular file and non-standard types */
+ default: /* Non-standard file types */
/*
* Per POSIX: non-recognized types should always be
* treated as regular files.
@@ -1371,9 +1519,17 @@ header_old_tar(struct archive_read *a, struct tar *tar,
const struct archive_entry_header_ustar *header;
int err = ARCHIVE_OK, err2;
- /* Copy filename over (to ensure null termination). */
+ /*
+ * Copy filename over (to ensure null termination).
+ * Skip if pathname was already set e.g. by header_gnu_longname()
+ */
header = (const struct archive_entry_header_ustar *)h;
- if (archive_entry_copy_pathname_l(entry,
+
+ const char *existing_pathname = archive_entry_pathname(entry);
+ const wchar_t *existing_wcs_pathname = archive_entry_pathname_w(entry);
+ if ((existing_pathname == NULL || existing_pathname[0] == '\0')
+ && (existing_wcs_pathname == NULL || existing_wcs_pathname[0] == '\0') &&
+ archive_entry_copy_pathname_l(entry,
header->name, sizeof(header->name), tar->sconv) != 0) {
err = set_conversion_failed_error(a, tar->sconv, "Pathname");
if (err == ARCHIVE_FATAL)
@@ -1390,21 +1546,13 @@ header_old_tar(struct archive_read *a, struct tar *tar,
}
/*
- * Read a Mac AppleDouble-encoded blob of file metadata,
- * if there is one.
+ * Is this likely an AppleDouble extension?
*/
static int
-read_mac_metadata_blob(struct archive_read *a, struct tar *tar,
- struct archive_entry *entry, const void *h, size_t *unconsumed)
-{
- int64_t size;
- size_t msize;
- const void *data;
+is_mac_metadata_entry(struct archive_entry *entry) {
const char *p, *name;
const wchar_t *wp, *wname;
- (void)h; /* UNUSED */
-
wname = wp = archive_entry_pathname_w(entry);
if (wp != NULL) {
/* Find the last path element. */
@@ -1416,8 +1564,8 @@ read_mac_metadata_blob(struct archive_read *a, struct tar *tar,
* If last path element starts with "._", then
* this is a Mac extension.
*/
- if (wname[0] != L'.' || wname[1] != L'_' || wname[2] == L'\0')
- return ARCHIVE_OK;
+ if (wname[0] == L'.' && wname[1] == L'_' && wname[2] != L'\0')
+ return 1;
} else {
/* Find the last path element. */
name = p = archive_entry_pathname(entry);
@@ -1431,9 +1579,29 @@ read_mac_metadata_blob(struct archive_read *a, struct tar *tar,
* If last path element starts with "._", then
* this is a Mac extension.
*/
- if (name[0] != '.' || name[1] != '_' || name[2] == '\0')
- return ARCHIVE_OK;
+ if (name[0] == '.' && name[1] == '_' && name[2] != '\0')
+ return 1;
}
+ /* Not a mac extension */
+ return 0;
+}
+
+/*
+ * Read a Mac AppleDouble-encoded blob of file metadata,
+ * if there is one.
+ *
+ * TODO: In Libarchive 4, we should consider ripping this
+ * out -- instead, return a file starting with `._` as
+ * a regular file and let the client (or archive_write logic)
+ * handle it.
+ */
+static int
+read_mac_metadata_blob(struct archive_read *a,
+ struct archive_entry *entry, size_t *unconsumed)
+{
+ int64_t size;
+ size_t msize;
+ const void *data;
/* Read the body as a Mac OS metadata blob. */
size = archive_entry_size(entry);
@@ -1443,6 +1611,17 @@ read_mac_metadata_blob(struct archive_read *a, struct tar *tar,
return (ARCHIVE_FATAL);
}
+ /* TODO: Should this merely skip the overlarge entry and
+ * WARN? Or is xattr_limit sufficiently large that we can
+ * safely assume anything larger is malicious? */
+ if (size > (int64_t)xattr_limit) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Oversized AppleDouble extension has size %llu > %llu",
+ (unsigned long long)size,
+ (unsigned long long)xattr_limit);
+ return (ARCHIVE_FATAL);
+ }
+
/*
* TODO: Look beyond the body here to peek at the next header.
* If it's a regular header (not an extension header)
@@ -1455,15 +1634,19 @@ read_mac_metadata_blob(struct archive_read *a, struct tar *tar,
* Q: Is the above idea really possible? Even
* when there are GNU or pax extension entries?
*/
+ tar_flush_unconsumed(a, unconsumed);
data = __archive_read_ahead(a, msize, NULL);
if (data == NULL) {
+ archive_set_error(&a->archive, EINVAL,
+ "Truncated archive"
+ " detected while reading macOS metadata");
*unconsumed = 0;
return (ARCHIVE_FATAL);
}
+ archive_entry_clear(entry);
archive_entry_copy_mac_metadata(entry, data, msize);
*unconsumed = (msize + 511) & ~ 511;
- tar_flush_unconsumed(a, unconsumed);
- return (tar_read_header(a, tar, entry, unconsumed));
+ return (ARCHIVE_OK);
}
/*
@@ -1473,76 +1656,62 @@ static int
header_pax_global(struct archive_read *a, struct tar *tar,
struct archive_entry *entry, const void *h, size_t *unconsumed)
{
- int err;
-
- err = read_body_to_string(a, tar, &(tar->pax_global), h, unconsumed);
- if (err != ARCHIVE_OK)
- return (err);
- err = tar_read_header(a, tar, entry, unconsumed);
- return (err);
-}
-
-static int
-header_pax_extensions(struct archive_read *a, struct tar *tar,
- struct archive_entry *entry, const void *h, size_t *unconsumed)
-{
- int err, err2;
-
- err = read_body_to_string(a, tar, &(tar->pax_header), h, unconsumed);
- if (err != ARCHIVE_OK)
- return (err);
+ const struct archive_entry_header_ustar *header;
+ int64_t size, to_consume;
- /* Parse the next header. */
- err = tar_read_header(a, tar, entry, unconsumed);
- if ((err != ARCHIVE_OK) && (err != ARCHIVE_WARN))
- return (err);
+ (void)a; /* UNUSED */
+ (void)tar; /* UNUSED */
+ (void)entry; /* UNUSED */
- /*
- * TODO: Parse global/default options into 'entry' struct here
- * before handling file-specific options.
- *
- * This design (parse standard header, then overwrite with pax
- * extended attribute data) usually works well, but isn't ideal;
- * it would be better to parse the pax extended attributes first
- * and then skip any fields in the standard header that were
- * defined in the pax header.
- */
- err2 = pax_header(a, tar, entry, &tar->pax_header);
- err = err_combine(err, err2);
- tar->entry_padding = 0x1ff & (-tar->entry_bytes_remaining);
- return (err);
+ header = (const struct archive_entry_header_ustar *)h;
+ size = tar_atol(header->size, sizeof(header->size));
+ if (size > entry_limit) {
+ return (ARCHIVE_FATAL);
+ }
+ to_consume = ((size + 511) & ~511);
+ *unconsumed += to_consume;
+ return (ARCHIVE_OK);
}
-
/*
* Parse a file header for a Posix "ustar" archive entry. This also
* handles "pax" or "extended ustar" entries.
+ *
+ * In order to correctly handle pax attributes (which precede this),
+ * we have to skip parsing any field for which the entry already has
+ * contents.
*/
static int
header_ustar(struct archive_read *a, struct tar *tar,
struct archive_entry *entry, const void *h)
{
const struct archive_entry_header_ustar *header;
- struct archive_string *as;
+ struct archive_string as;
int err = ARCHIVE_OK, r;
header = (const struct archive_entry_header_ustar *)h;
/* Copy name into an internal buffer to ensure null-termination. */
- as = &(tar->entry_pathname);
- if (header->prefix[0]) {
- archive_strncpy(as, header->prefix, sizeof(header->prefix));
- if (as->s[archive_strlen(as) - 1] != '/')
- archive_strappend_char(as, '/');
- archive_strncat(as, header->name, sizeof(header->name));
- } else {
- archive_strncpy(as, header->name, sizeof(header->name));
- }
- if (archive_entry_copy_pathname_l(entry, as->s, archive_strlen(as),
- tar->sconv) != 0) {
- err = set_conversion_failed_error(a, tar->sconv, "Pathname");
- if (err == ARCHIVE_FATAL)
- return (err);
+ const char *existing_pathname = archive_entry_pathname(entry);
+ const wchar_t *existing_wcs_pathname = archive_entry_pathname_w(entry);
+ if ((existing_pathname == NULL || existing_pathname[0] == '\0')
+ && (existing_wcs_pathname == NULL || existing_wcs_pathname[0] == '\0')) {
+ archive_string_init(&as);
+ if (header->prefix[0]) {
+ archive_strncpy(&as, header->prefix, sizeof(header->prefix));
+ if (as.s[archive_strlen(&as) - 1] != '/')
+ archive_strappend_char(&as, '/');
+ archive_strncat(&as, header->name, sizeof(header->name));
+ } else {
+ archive_strncpy(&as, header->name, sizeof(header->name));
+ }
+ if (archive_entry_copy_pathname_l(entry, as.s, archive_strlen(&as),
+ tar->sconv) != 0) {
+ err = set_conversion_failed_error(a, tar->sconv, "Pathname");
+ if (err == ARCHIVE_FATAL)
+ return (err);
+ }
+ archive_string_free(&as);
}
/* Handle rest of common fields. */
@@ -1553,26 +1722,36 @@ header_ustar(struct archive_read *a, struct tar *tar,
err = r;
/* Handle POSIX ustar fields. */
- if (archive_entry_copy_uname_l(entry,
- header->uname, sizeof(header->uname), tar->sconv) != 0) {
- err = set_conversion_failed_error(a, tar->sconv, "Uname");
- if (err == ARCHIVE_FATAL)
- return (err);
+ const char *existing_uname = archive_entry_uname(entry);
+ if (existing_uname == NULL || existing_uname[0] == '\0') {
+ if (archive_entry_copy_uname_l(entry,
+ header->uname, sizeof(header->uname), tar->sconv) != 0) {
+ err = set_conversion_failed_error(a, tar->sconv, "Uname");
+ if (err == ARCHIVE_FATAL)
+ return (err);
+ }
}
- if (archive_entry_copy_gname_l(entry,
- header->gname, sizeof(header->gname), tar->sconv) != 0) {
- err = set_conversion_failed_error(a, tar->sconv, "Gname");
- if (err == ARCHIVE_FATAL)
- return (err);
+ const char *existing_gname = archive_entry_gname(entry);
+ if (existing_gname == NULL || existing_gname[0] == '\0') {
+ if (archive_entry_copy_gname_l(entry,
+ header->gname, sizeof(header->gname), tar->sconv) != 0) {
+ err = set_conversion_failed_error(a, tar->sconv, "Gname");
+ if (err == ARCHIVE_FATAL)
+ return (err);
+ }
}
/* Parse out device numbers only for char and block specials. */
if (header->typeflag[0] == '3' || header->typeflag[0] == '4') {
- archive_entry_set_rdevmajor(entry, (dev_t)
- tar_atol(header->rdevmajor, sizeof(header->rdevmajor)));
- archive_entry_set_rdevminor(entry, (dev_t)
- tar_atol(header->rdevminor, sizeof(header->rdevminor)));
+ if (!archive_entry_rdev_is_set(entry)) {
+ archive_entry_set_rdevmajor(entry, (dev_t)
+ tar_atol(header->rdevmajor, sizeof(header->rdevmajor)));
+ archive_entry_set_rdevminor(entry, (dev_t)
+ tar_atol(header->rdevminor, sizeof(header->rdevminor)));
+ }
+ } else {
+ archive_entry_set_rdev(entry, 0);
}
tar->entry_padding = 0x1ff & (-tar->entry_bytes_remaining);
@@ -1580,117 +1759,203 @@ header_ustar(struct archive_read *a, struct tar *tar,
return (err);
}
-
-/*
- * Parse the pax extended attributes record.
- *
- * Returns non-zero if there's an error in the data.
- */
static int
-pax_header(struct archive_read *a, struct tar *tar,
- struct archive_entry *entry, struct archive_string *in_as)
+header_pax_extension(struct archive_read *a, struct tar *tar,
+ struct archive_entry *entry, const void *h, size_t *unconsumed)
{
- size_t attr_length, l, line_length, value_length;
- char *p;
- char *key, *value;
- struct archive_string *as;
+ /* Sanity checks: The largest `x` body I've ever heard of was
+ * a little over 4MB. So I doubt there has ever been a
+ * well-formed archive with an `x` body over 1GiB. Similarly,
+ * it seems plausible that no single attribute has ever been
+ * larger than 100MB. So if we see a larger value here, it's
+ * almost certainly a sign of a corrupted/malicious archive. */
+
+ /* Maximum sane size for extension body: 1 GiB */
+ /* This cannot be raised to larger than 8GiB without
+ * exceeding the maximum size for a standard ustar
+ * entry. */
+ const int64_t ext_size_limit = 1024 * 1024 * (int64_t)1024;
+ /* Maximum size for a single line/attr: 100 million characters */
+ /* This cannot be raised to more than 2GiB without exceeding
+ * a `size_t` on 32-bit platforms. */
+ const size_t max_parsed_line_length = 99999999ULL;
+ /* Largest attribute prolog: size + name. */
+ const size_t max_size_name = 512;
+
+ /* Size and padding of the full extension body */
+ int64_t ext_size, ext_padding;
+ size_t line_length, value_length, name_length;
+ ssize_t to_read, did_read;
+ const struct archive_entry_header_ustar *header;
+ const char *p, *attr_start, *name_start;
struct archive_string_conv *sconv;
- int err, err2;
- char *attr = in_as->s;
+ struct archive_string *pas = NULL;
+ struct archive_string attr_name;
+ int err = ARCHIVE_OK, r;
- attr_length = in_as->length;
- tar->pax_hdrcharset_binary = 0;
- archive_string_empty(&(tar->entry_gname));
- archive_string_empty(&(tar->entry_linkpath));
- archive_string_empty(&(tar->entry_pathname));
- archive_string_empty(&(tar->entry_pathname_override));
- archive_string_empty(&(tar->entry_uname));
- err = ARCHIVE_OK;
- while (attr_length > 0) {
- /* Parse decimal length field at start of line. */
+ header = (const struct archive_entry_header_ustar *)h;
+ ext_size = tar_atol(header->size, sizeof(header->size));
+ if (ext_size > entry_limit) {
+ return (ARCHIVE_FATAL);
+ }
+ if (ext_size < 0) {
+ archive_set_error(&a->archive, EINVAL,
+ "pax extension header has invalid size: %lld",
+ (long long)ext_size);
+ return (ARCHIVE_FATAL);
+ }
+
+ ext_padding = 0x1ff & (-ext_size);
+ if (ext_size > ext_size_limit) {
+ /* Consume the pax extension body and return an error */
+ if (ext_size + ext_padding != __archive_read_consume(a, ext_size + ext_padding)) {
+ return (ARCHIVE_FATAL);
+ }
+ archive_set_error(&a->archive, EINVAL,
+ "Ignoring oversized pax extensions: %d > %d",
+ (int)ext_size, (int)ext_size_limit);
+ return (ARCHIVE_WARN);
+ }
+ tar_flush_unconsumed(a, unconsumed);
+
+ /* Parse the size/name of each pax attribute in the body */
+ archive_string_init(&attr_name);
+ while (ext_size > 0) {
+ /* Read enough bytes to parse the size/name of the next attribute */
+ to_read = max_size_name;
+ if (to_read > ext_size) {
+ to_read = ext_size;
+ }
+ p = __archive_read_ahead(a, to_read, &did_read);
+ if (p == NULL) { /* EOF */
+ archive_set_error(&a->archive, EINVAL,
+ "Truncated tar archive"
+ " detected while reading pax attribute name");
+ return (ARCHIVE_FATAL);
+ }
+ if (did_read > ext_size) {
+ did_read = ext_size;
+ }
+
+ /* Parse size of attribute */
line_length = 0;
- l = attr_length;
- p = attr; /* Record start of line. */
- while (l>0) {
+ attr_start = p;
+ while (1) {
+ if (p >= attr_start + did_read) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Ignoring malformed pax attributes: overlarge attribute size field");
+ *unconsumed += ext_size + ext_padding;
+ return (ARCHIVE_WARN);
+ }
if (*p == ' ') {
p++;
- l--;
break;
}
if (*p < '0' || *p > '9') {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "Ignoring malformed pax extended attributes");
+ "Ignoring malformed pax attributes: malformed attribute size field");
+ *unconsumed += ext_size + ext_padding;
return (ARCHIVE_WARN);
}
line_length *= 10;
line_length += *p - '0';
- if (line_length > 999999) {
+ if (line_length > max_parsed_line_length) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "Rejecting pax extended attribute > 1MB");
+ "Ignoring malformed pax attribute: size > %lld",
+ (long long)max_parsed_line_length);
+ *unconsumed += ext_size + ext_padding;
return (ARCHIVE_WARN);
}
p++;
- l--;
}
- /*
- * Parsed length must be no bigger than available data,
- * at least 1, and the last character of the line must
- * be '\n'.
- */
- if (line_length > attr_length
- || line_length < 1
- || attr[line_length - 1] != '\n')
- {
- archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "Ignoring malformed pax extended attribute");
- return (ARCHIVE_WARN);
+ if ((int64_t)line_length > ext_size) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Ignoring malformed pax attribute: %lld > %lld",
+ (long long)line_length, (long long)ext_size);
+ *unconsumed += ext_size + ext_padding;
+ return (ARCHIVE_WARN);
}
- /* Null-terminate the line. */
- attr[line_length - 1] = '\0';
-
- /* Find end of key and null terminate it. */
- key = p;
- if (key[0] == '=')
- return (-1);
- while (*p && *p != '=')
- ++p;
- if (*p == '\0') {
+ /* Parse name of attribute */
+ if (p >= attr_start + did_read
+ || p >= attr_start + line_length
+ || *p == '=') {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "Invalid pax extended attributes");
+ "Ignoring malformed pax attributes: empty name found");
+ *unconsumed += ext_size + ext_padding;
return (ARCHIVE_WARN);
}
- *p = '\0';
+ name_start = p;
+ while (1) {
+ if (p >= attr_start + did_read || p >= attr_start + line_length) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Ignoring malformed pax attributes: overlarge attribute name");
+ *unconsumed += ext_size + ext_padding;
+ return (ARCHIVE_WARN);
+ }
+ if (*p == '=') {
+ break;
+ }
+ p++;
+ }
+ name_length = p - name_start;
+ p++; // Skip '='
- value = p + 1;
+ // Save the name before we consume it
+ archive_strncpy(&attr_name, name_start, name_length);
- /* Some values may be binary data */
- value_length = attr + line_length - 1 - value;
+ ext_size -= p - attr_start;
+ value_length = line_length - (p - attr_start);
- /* Identify this attribute and set it in the entry. */
- err2 = pax_attribute(a, tar, entry, key, value, value_length);
- if (err2 == ARCHIVE_FATAL)
- return (err2);
- err = err_combine(err, err2);
+ /* Consume size, name, and `=` */
+ *unconsumed += p - attr_start;
+ tar_flush_unconsumed(a, unconsumed);
+
+ /* pax_attribute will consume value_length - 1 */
+ r = pax_attribute(a, tar, entry, attr_name.s, archive_strlen(&attr_name), value_length - 1, unconsumed);
+ ext_size -= value_length - 1;
- /* Skip to next line */
- attr += line_length;
- attr_length -= line_length;
+ // Release the allocated attr_name (either here or before every return in this function)
+ archive_string_free(&attr_name);
+
+ if (r < ARCHIVE_WARN) {
+ *unconsumed += ext_size + ext_padding;
+ return (r);
+ }
+ err = err_combine(err, r);
+
+ /* Consume the `\n` that follows the pax attribute value. */
+ tar_flush_unconsumed(a, unconsumed);
+ p = __archive_read_ahead(a, 1, &did_read);
+ if (p == NULL) {
+ archive_set_error(&a->archive, EINVAL,
+ "Truncated tar archive"
+ " detected while completing pax attribute");
+ return (ARCHIVE_FATAL);
+ }
+ if (p[0] != '\n') {
+ archive_set_error(&a->archive, EINVAL,
+ "Malformed pax attributes");
+ *unconsumed += ext_size + ext_padding;
+ return (ARCHIVE_WARN);
+ }
+ ext_size -= 1;
+ *unconsumed += 1;
+ tar_flush_unconsumed(a, unconsumed);
}
+ *unconsumed += ext_size + ext_padding;
/*
- * PAX format uses UTF-8 as default charset for its metadata
- * unless hdrcharset=BINARY is present in its header.
- * We apply the charset specified by the hdrcharset option only
- * when the hdrcharset attribute(in PAX header) is BINARY because
- * we respect the charset described in PAX header and BINARY also
- * means that metadata(filename,uname and gname) character-set
- * is unknown.
+ * Some PAX values -- pathname, linkpath, uname, gname --
+ * can't be copied into the entry until we know the character
+ * set to use:
*/
- if (tar->pax_hdrcharset_binary)
+ if (!tar->pax_hdrcharset_utf8)
+ /* PAX specified "BINARY", so use the default charset */
sconv = tar->opt_sconv;
else {
+ /* PAX default UTF-8 */
sconv = archive_string_conversion_from_charset(
&(a->archive), "UTF-8", 1);
if (sconv == NULL)
@@ -1700,83 +1965,85 @@ pax_header(struct archive_read *a, struct tar *tar,
SCONV_SET_OPT_UTF8_LIBARCHIVE2X);
}
+ /* Pathname */
+ pas = NULL;
+ if (archive_strlen(&(tar->entry_pathname_override)) > 0) {
+ /* Prefer GNU.sparse.name attribute if present */
+ /* GNU sparse files store a fake name under the standard
+ * "pathname" key. */
+ pas = &(tar->entry_pathname_override);
+ } else if (archive_strlen(&(tar->entry_pathname)) > 0) {
+ /* Use standard "pathname" PAX extension */
+ pas = &(tar->entry_pathname);
+ }
+ if (pas != NULL) {
+ if (archive_entry_copy_pathname_l(entry, pas->s,
+ archive_strlen(pas), sconv) != 0) {
+ err = set_conversion_failed_error(a, sconv, "Pathname");
+ if (err == ARCHIVE_FATAL)
+ return (err);
+ /* Use raw name without conversion */
+ archive_entry_copy_pathname(entry, pas->s);
+ }
+ }
+ /* Uname */
+ if (archive_strlen(&(tar->entry_uname)) > 0) {
+ if (archive_entry_copy_uname_l(entry, tar->entry_uname.s,
+ archive_strlen(&(tar->entry_uname)), sconv) != 0) {
+ err = set_conversion_failed_error(a, sconv, "Uname");
+ if (err == ARCHIVE_FATAL)
+ return (err);
+ /* Use raw name without conversion */
+ archive_entry_copy_uname(entry, tar->entry_uname.s);
+ }
+ }
+ /* Gname */
if (archive_strlen(&(tar->entry_gname)) > 0) {
if (archive_entry_copy_gname_l(entry, tar->entry_gname.s,
archive_strlen(&(tar->entry_gname)), sconv) != 0) {
err = set_conversion_failed_error(a, sconv, "Gname");
if (err == ARCHIVE_FATAL)
return (err);
- /* Use a converted an original name. */
+ /* Use raw name without conversion */
archive_entry_copy_gname(entry, tar->entry_gname.s);
}
}
+ /* Linkpath */
if (archive_strlen(&(tar->entry_linkpath)) > 0) {
if (archive_entry_copy_link_l(entry, tar->entry_linkpath.s,
archive_strlen(&(tar->entry_linkpath)), sconv) != 0) {
- err = set_conversion_failed_error(a, sconv, "Linkname");
+ err = set_conversion_failed_error(a, sconv, "Linkpath");
if (err == ARCHIVE_FATAL)
return (err);
- /* Use a converted an original name. */
+ /* Use raw name without conversion */
archive_entry_copy_link(entry, tar->entry_linkpath.s);
}
}
- /*
- * Some extensions (such as the GNU sparse file extensions)
- * deliberately store a synthetic name under the regular 'path'
- * attribute and the real file name under a different attribute.
- * Since we're supposed to not care about the order, we
- * have no choice but to store all of the various filenames
- * we find and figure it all out afterwards. This is the
- * figuring out part.
- */
- as = NULL;
- if (archive_strlen(&(tar->entry_pathname_override)) > 0)
- as = &(tar->entry_pathname_override);
- else if (archive_strlen(&(tar->entry_pathname)) > 0)
- as = &(tar->entry_pathname);
- if (as != NULL) {
- if (archive_entry_copy_pathname_l(entry, as->s,
- archive_strlen(as), sconv) != 0) {
- err = set_conversion_failed_error(a, sconv, "Pathname");
- if (err == ARCHIVE_FATAL)
- return (err);
- /* Use a converted an original name. */
- archive_entry_copy_pathname(entry, as->s);
- }
- }
- if (archive_strlen(&(tar->entry_uname)) > 0) {
- if (archive_entry_copy_uname_l(entry, tar->entry_uname.s,
- archive_strlen(&(tar->entry_uname)), sconv) != 0) {
- err = set_conversion_failed_error(a, sconv, "Uname");
- if (err == ARCHIVE_FATAL)
- return (err);
- /* Use a converted an original name. */
- archive_entry_copy_uname(entry, tar->entry_uname.s);
- }
- }
+
+ /* Extension may have given us a corrected `entry_bytes_remaining` for
+ * the main entry; update the padding appropriately. */
+ tar->entry_padding = 0x1ff & (-tar->entry_bytes_remaining);
return (err);
}
static int
-pax_attribute_xattr(struct archive_entry *entry,
- const char *name, const char *value)
+pax_attribute_LIBARCHIVE_xattr(struct archive_entry *entry,
+ const char *name, size_t name_length, const char *value, size_t value_length)
{
char *name_decoded;
void *value_decoded;
size_t value_len;
- if (strlen(name) < 18 || (memcmp(name, "LIBARCHIVE.xattr.", 17)) != 0)
+ if (name_length < 1)
return 3;
- name += 17;
-
/* URL-decode name */
- name_decoded = url_decode(name);
+ name_decoded = url_decode(name, name_length);
if (name_decoded == NULL)
return 2;
/* Base-64 decode value */
- value_decoded = base64_decode(value, strlen(value), &value_len);
+ value_decoded = base64_decode(value, value_length, &value_len);
if (value_decoded == NULL) {
free(name_decoded);
return 1;
@@ -1791,21 +2058,26 @@ pax_attribute_xattr(struct archive_entry *entry,
}
static int
-pax_attribute_schily_xattr(struct archive_entry *entry,
- const char *name, const char *value, size_t value_length)
+pax_attribute_SCHILY_xattr(struct archive_entry *entry,
+ const char *name, size_t name_length, const char *value, size_t value_length)
{
- if (strlen(name) < 14 || (memcmp(name, "SCHILY.xattr.", 13)) != 0)
+ if (name_length < 1 || name_length > 128) {
return 1;
+ }
- name += 13;
-
- archive_entry_xattr_add_entry(entry, name, value, value_length);
+ char * null_terminated_name = malloc(name_length + 1);
+ if (null_terminated_name != NULL) {
+ memcpy(null_terminated_name, name, name_length);
+ null_terminated_name[name_length] = '\0';
+ archive_entry_xattr_add_entry(entry, null_terminated_name, value, value_length);
+ free(null_terminated_name);
+ }
return 0;
}
static int
-pax_attribute_rht_security_selinux(struct archive_entry *entry,
+pax_attribute_RHT_security_selinux(struct archive_entry *entry,
const char *value, size_t value_length)
{
archive_entry_xattr_add_entry(entry, "security.selinux",
@@ -1815,10 +2087,11 @@ pax_attribute_rht_security_selinux(struct archive_entry *entry,
}
static int
-pax_attribute_acl(struct archive_read *a, struct tar *tar,
- struct archive_entry *entry, const char *value, int type)
+pax_attribute_SCHILY_acl(struct archive_read *a, struct tar *tar,
+ struct archive_entry *entry, size_t value_length, int type)
{
int r;
+ const char *p;
const char* errstr;
switch (type) {
@@ -1845,8 +2118,28 @@ pax_attribute_acl(struct archive_read *a, struct tar *tar,
return (ARCHIVE_FATAL);
}
- r = archive_acl_from_text_l(archive_entry_acl(entry), value, type,
- tar->sconv_acl);
+ if (value_length > acl_limit) {
+ __archive_read_consume(a, value_length);
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Unreasonably large ACL: %d > %d",
+ (int)value_length, (int)acl_limit);
+ return (ARCHIVE_WARN);
+ }
+
+ p = __archive_read_ahead(a, value_length, NULL);
+ if (p == NULL) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Truncated tar archive "
+ "detected while reading ACL data");
+ return (ARCHIVE_FATAL);
+ }
+
+ r = archive_acl_from_text_nl(archive_entry_acl(entry), p, value_length,
+ type, tar->sconv_acl);
+ __archive_read_consume(a, value_length);
+ /* Workaround: Force perm_is_set() to be correct */
+ /* If this bit were stored in the ACL, this wouldn't be needed */
+ archive_entry_set_perm(entry, archive_entry_perm(entry));
if (r != ARCHIVE_OK) {
if (r == ARCHIVE_FATAL) {
archive_set_error(&a->archive, ENOMEM,
@@ -1860,242 +2153,559 @@ pax_attribute_acl(struct archive_read *a, struct tar *tar,
return (r);
}
+static int
+pax_attribute_read_time(struct archive_read *a, size_t value_length, int64_t *ps, long *pn, size_t *unconsumed) {
+ struct archive_string as;
+ int r;
+
+ if (value_length > 128) {
+ __archive_read_consume(a, value_length);
+ *ps = 0;
+ *pn = 0;
+ return (ARCHIVE_FATAL);
+ }
+
+ archive_string_init(&as);
+ r = read_bytes_to_string(a, &as, value_length, unconsumed);
+ if (r < ARCHIVE_OK) {
+ archive_string_free(&as);
+ return (r);
+ }
+
+ pax_time(as.s, archive_strlen(&as), ps, pn);
+ archive_string_free(&as);
+ if (*ps < 0 || *ps == INT64_MAX) {
+ return (ARCHIVE_WARN);
+ }
+ return (ARCHIVE_OK);
+}
+
+static int
+pax_attribute_read_number(struct archive_read *a, size_t value_length, int64_t *result) {
+ struct archive_string as;
+ size_t unconsumed = 0;
+ int r;
+
+ if (value_length > 64) {
+ __archive_read_consume(a, value_length);
+ *result = 0;
+ return (ARCHIVE_FATAL);
+ }
+
+ archive_string_init(&as);
+ r = read_bytes_to_string(a, &as, value_length, &unconsumed);
+ tar_flush_unconsumed(a, &unconsumed);
+ if (r < ARCHIVE_OK) {
+ archive_string_free(&as);
+ return (r);
+ }
+
+ *result = tar_atol10(as.s, archive_strlen(&as));
+ archive_string_free(&as);
+ if (*result < 0 || *result == INT64_MAX) {
+ *result = INT64_MAX;
+ return (ARCHIVE_WARN);
+ }
+ return (ARCHIVE_OK);
+}
+
/*
- * Parse a single key=value attribute. key/value pointers are
- * assumed to point into reasonably long-lived storage.
+ * Parse a single key=value attribute.
*
- * Note that POSIX reserves all-lowercase keywords. Vendor-specific
- * extensions should always have keywords of the form "VENDOR.attribute"
- * In particular, it's quite feasible to support many different
- * vendor extensions here. I'm using "LIBARCHIVE" for extensions
- * unique to this library.
+ * POSIX reserves all-lowercase keywords. Vendor-specific extensions
+ * should always have keywords of the form "VENDOR.attribute" In
+ * particular, it's quite feasible to support many different vendor
+ * extensions here. I'm using "LIBARCHIVE" for extensions unique to
+ * this library.
*
- * Investigate other vendor-specific extensions and see if
+ * TODO: Investigate other vendor-specific extensions and see if
* any of them look useful.
*/
static int
-pax_attribute(struct archive_read *a, struct tar *tar,
- struct archive_entry *entry, const char *key, const char *value, size_t value_length)
+pax_attribute(struct archive_read *a, struct tar *tar, struct archive_entry *entry,
+ const char *key, size_t key_length, size_t value_length, size_t *unconsumed)
{
- int64_t s;
+ int64_t t;
long n;
- int err = ARCHIVE_OK, r;
+ const char *p;
+ ssize_t bytes_read;
+ int err = ARCHIVE_OK;
-#ifndef __FreeBSD__
- if (value == NULL)
- value = ""; /* Disable compiler warning; do not pass
- * NULL pointer to strlen(). */
-#endif
switch (key[0]) {
case 'G':
- /* Reject GNU.sparse.* headers on non-regular files. */
- if (strncmp(key, "GNU.sparse", 10) == 0 &&
- !tar->sparse_allowed) {
- archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "Non-regular file cannot be sparse");
- return (ARCHIVE_FATAL);
- }
-
- /* GNU "0.0" sparse pax format. */
- if (strcmp(key, "GNU.sparse.numblocks") == 0) {
- tar->sparse_offset = -1;
- tar->sparse_numbytes = -1;
- tar->sparse_gnu_major = 0;
- tar->sparse_gnu_minor = 0;
- }
- if (strcmp(key, "GNU.sparse.offset") == 0) {
- tar->sparse_offset = tar_atol10(value, strlen(value));
- if (tar->sparse_numbytes != -1) {
- if (gnu_add_sparse_entry(a, tar,
- tar->sparse_offset, tar->sparse_numbytes)
- != ARCHIVE_OK)
- return (ARCHIVE_FATAL);
- tar->sparse_offset = -1;
- tar->sparse_numbytes = -1;
- }
- }
- if (strcmp(key, "GNU.sparse.numbytes") == 0) {
- tar->sparse_numbytes = tar_atol10(value, strlen(value));
- if (tar->sparse_offset != -1) {
- if (gnu_add_sparse_entry(a, tar,
- tar->sparse_offset, tar->sparse_numbytes)
- != ARCHIVE_OK)
- return (ARCHIVE_FATAL);
- tar->sparse_offset = -1;
- tar->sparse_numbytes = -1;
+ /* GNU.* extensions */
+ if (key_length > 4 && memcmp(key, "GNU.", 4) == 0) {
+ key += 4;
+ key_length -= 4;
+
+ /* GNU.sparse marks the existence of GNU sparse information */
+ if (key_length == 6 && memcmp(key, "sparse", 6) == 0) {
+ tar->sparse_gnu_attributes_seen = 1;
}
- }
- if (strcmp(key, "GNU.sparse.size") == 0) {
- tar->realsize = tar_atol10(value, strlen(value));
- archive_entry_set_size(entry, tar->realsize);
- tar->realsize_override = 1;
- }
- /* GNU "0.1" sparse pax format. */
- if (strcmp(key, "GNU.sparse.map") == 0) {
- tar->sparse_gnu_major = 0;
- tar->sparse_gnu_minor = 1;
- if (gnu_sparse_01_parse(a, tar, value) != ARCHIVE_OK)
- return (ARCHIVE_WARN);
- }
-
- /* GNU "1.0" sparse pax format */
- if (strcmp(key, "GNU.sparse.major") == 0) {
- tar->sparse_gnu_major = (int)tar_atol10(value, strlen(value));
- tar->sparse_gnu_pending = 1;
- }
- if (strcmp(key, "GNU.sparse.minor") == 0) {
- tar->sparse_gnu_minor = (int)tar_atol10(value, strlen(value));
- tar->sparse_gnu_pending = 1;
- }
- if (strcmp(key, "GNU.sparse.name") == 0) {
- /*
- * The real filename; when storing sparse
- * files, GNU tar puts a synthesized name into
- * the regular 'path' attribute in an attempt
- * to limit confusion. ;-)
- */
- archive_strcpy(&(tar->entry_pathname_override), value);
- }
- if (strcmp(key, "GNU.sparse.realsize") == 0) {
- tar->realsize = tar_atol10(value, strlen(value));
- archive_entry_set_size(entry, tar->realsize);
- tar->realsize_override = 1;
+ /* GNU.sparse.* extensions */
+ else if (key_length > 7 && memcmp(key, "sparse.", 7) == 0) {
+ tar->sparse_gnu_attributes_seen = 1;
+ key += 7;
+ key_length -= 7;
+
+ /* GNU "0.0" sparse pax format. */
+ if (key_length == 9 && memcmp(key, "numblocks", 9) == 0) {
+ /* GNU.sparse.numblocks */
+ tar->sparse_offset = -1;
+ tar->sparse_numbytes = -1;
+ tar->sparse_gnu_major = 0;
+ tar->sparse_gnu_minor = 0;
+ }
+ else if (key_length == 6 && memcmp(key, "offset", 6) == 0) {
+ /* GNU.sparse.offset */
+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) {
+ tar->sparse_offset = t;
+ if (tar->sparse_numbytes != -1) {
+ if (gnu_add_sparse_entry(a, tar,
+ tar->sparse_offset, tar->sparse_numbytes)
+ != ARCHIVE_OK)
+ return (ARCHIVE_FATAL);
+ tar->sparse_offset = -1;
+ tar->sparse_numbytes = -1;
+ }
+ }
+ return (err);
+ }
+ else if (key_length == 8 && memcmp(key, "numbytes", 8) == 0) {
+ /* GNU.sparse.numbytes */
+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) {
+ tar->sparse_numbytes = t;
+ if (tar->sparse_offset != -1) {
+ if (gnu_add_sparse_entry(a, tar,
+ tar->sparse_offset, tar->sparse_numbytes)
+ != ARCHIVE_OK)
+ return (ARCHIVE_FATAL);
+ tar->sparse_offset = -1;
+ tar->sparse_numbytes = -1;
+ }
+ }
+ return (err);
+ }
+ else if (key_length == 4 && memcmp(key, "size", 4) == 0) {
+ /* GNU.sparse.size */
+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) {
+ tar->realsize = t;
+ archive_entry_set_size(entry, tar->realsize);
+ tar->realsize_override = 1;
+ }
+ return (err);
+ }
+
+ /* GNU "0.1" sparse pax format. */
+ else if (key_length == 3 && memcmp(key, "map", 3) == 0) {
+ /* GNU.sparse.map */
+ tar->sparse_gnu_major = 0;
+ tar->sparse_gnu_minor = 1;
+ if (value_length > sparse_map_limit) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Unreasonably large sparse map: %d > %d",
+ (int)value_length, (int)sparse_map_limit);
+ err = ARCHIVE_FAILED;
+ } else {
+ p = __archive_read_ahead(a, value_length, &bytes_read);
+ if (p == NULL) {
+ archive_set_error(&a->archive, EINVAL,
+ "Truncated archive"
+ " detected while reading GNU sparse data");
+ return (ARCHIVE_FATAL);
+ }
+ if (gnu_sparse_01_parse(a, tar, p, value_length) != ARCHIVE_OK) {
+ err = ARCHIVE_WARN;
+ }
+ }
+ __archive_read_consume(a, value_length);
+ return (err);
+ }
+
+ /* GNU "1.0" sparse pax format */
+ else if (key_length == 5 && memcmp(key, "major", 5) == 0) {
+ /* GNU.sparse.major */
+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK
+ && t >= 0
+ && t <= 10) {
+ tar->sparse_gnu_major = (int)t;
+ }
+ return (err);
+ }
+ else if (key_length == 5 && memcmp(key, "minor", 5) == 0) {
+ /* GNU.sparse.minor */
+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK
+ && t >= 0
+ && t <= 10) {
+ tar->sparse_gnu_minor = (int)t;
+ }
+ return (err);
+ }
+ else if (key_length == 4 && memcmp(key, "name", 4) == 0) {
+ /* GNU.sparse.name */
+ /*
+ * The real filename; when storing sparse
+ * files, GNU tar puts a synthesized name into
+ * the regular 'path' attribute in an attempt
+ * to limit confusion. ;-)
+ */
+ if (value_length > pathname_limit) {
+ *unconsumed += value_length;
+ err = ARCHIVE_WARN;
+ } else {
+ err = read_bytes_to_string(a, &(tar->entry_pathname_override),
+ value_length, unconsumed);
+ }
+ return (err);
+ }
+ else if (key_length == 8 && memcmp(key, "realsize", 8) == 0) {
+ /* GNU.sparse.realsize */
+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) {
+ tar->realsize = t;
+ archive_entry_set_size(entry, tar->realsize);
+ tar->realsize_override = 1;
+ }
+ return (err);
+ }
+ }
}
break;
case 'L':
- /* Our extensions */
-/* TODO: Handle arbitrary extended attributes... */
-/*
- if (strcmp(key, "LIBARCHIVE.xxxxxxx") == 0)
- archive_entry_set_xxxxxx(entry, value);
-*/
- if (strcmp(key, "LIBARCHIVE.creationtime") == 0) {
- pax_time(value, &s, &n);
- archive_entry_set_birthtime(entry, s, n);
- }
- if (strcmp(key, "LIBARCHIVE.symlinktype") == 0) {
- if (strcmp(value, "file") == 0) {
- archive_entry_set_symlink_type(entry,
- AE_SYMLINK_TYPE_FILE);
- } else if (strcmp(value, "dir") == 0) {
- archive_entry_set_symlink_type(entry,
- AE_SYMLINK_TYPE_DIRECTORY);
+ /* LIBARCHIVE extensions */
+ if (key_length > 11 && memcmp(key, "LIBARCHIVE.", 11) == 0) {
+ key_length -= 11;
+ key += 11;
+
+ /* TODO: Handle arbitrary extended attributes... */
+ /*
+ if (strcmp(key, "LIBARCHIVE.xxxxxxx") == 0)
+ archive_entry_set_xxxxxx(entry, value);
+ */
+ if (key_length == 12 && memcmp(key, "creationtime", 12) == 0) {
+ /* LIBARCHIVE.creationtime */
+ if ((err = pax_attribute_read_time(a, value_length, &t, &n, unconsumed)) == ARCHIVE_OK) {
+ archive_entry_set_birthtime(entry, t, n);
+ }
+ return (err);
+ }
+ else if (key_length == 11 && memcmp(key, "symlinktype", 11) == 0) {
+ /* LIBARCHIVE.symlinktype */
+ if (value_length < 16) {
+ p = __archive_read_ahead(a, value_length, &bytes_read);
+ if (p == NULL) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Truncated tar archive "
+ "detected while reading `symlinktype` attribute");
+ return (ARCHIVE_FATAL);
+ }
+ if (value_length == 4 && memcmp(p, "file", 4) == 0) {
+ archive_entry_set_symlink_type(entry,
+ AE_SYMLINK_TYPE_FILE);
+ } else if (value_length == 3 && memcmp(p, "dir", 3) == 0) {
+ archive_entry_set_symlink_type(entry,
+ AE_SYMLINK_TYPE_DIRECTORY);
+ } else {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Unrecognized symlink type");
+ err = ARCHIVE_WARN;
+ }
+ } else {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "symlink type is very long"
+ "(longest recognized value is 4 bytes, this is %d)",
+ (int)value_length);
+ err = ARCHIVE_WARN;
+ }
+ __archive_read_consume(a, value_length);
+ return (err);
+ }
+ else if (key_length > 6 && memcmp(key, "xattr.", 6) == 0) {
+ key_length -= 6;
+ key += 6;
+ if (value_length > xattr_limit) {
+ err = ARCHIVE_WARN;
+ } else {
+ p = __archive_read_ahead(a, value_length, &bytes_read);
+ if (p == NULL) {
+ archive_set_error(&a->archive, EINVAL,
+ "Truncated archive"
+ " detected while reading xattr information");
+ return (ARCHIVE_FATAL);
+ }
+ if (pax_attribute_LIBARCHIVE_xattr(entry, key, key_length, p, value_length)) {
+ /* TODO: Unable to parse xattr */
+ err = ARCHIVE_WARN;
+ }
+ }
+ __archive_read_consume(a, value_length);
+ return (err);
}
}
- if (memcmp(key, "LIBARCHIVE.xattr.", 17) == 0)
- pax_attribute_xattr(entry, key, value);
break;
case 'R':
/* GNU tar uses RHT.security header to store SELinux xattrs
* SCHILY.xattr.security.selinux == RHT.security.selinux */
- if (strcmp(key, "RHT.security.selinux") == 0) {
- pax_attribute_rht_security_selinux(entry, value,
- value_length);
+ if (key_length == 20 && memcmp(key, "RHT.security.selinux", 20) == 0) {
+ if (value_length > xattr_limit) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Ignoring unreasonably large security.selinux attribute:"
+ " %d > %d",
+ (int)value_length, (int)xattr_limit);
+ /* TODO: Should this be FAILED instead? */
+ err = ARCHIVE_WARN;
+ } else {
+ p = __archive_read_ahead(a, value_length, &bytes_read);
+ if (p == NULL) {
+ archive_set_error(&a->archive, EINVAL,
+ "Truncated archive"
+ " detected while reading selinux data");
+ return (ARCHIVE_FATAL);
+ }
+ if (pax_attribute_RHT_security_selinux(entry, p, value_length)) {
+ /* TODO: Unable to parse xattr */
+ err = ARCHIVE_WARN;
+ }
}
+ __archive_read_consume(a, value_length);
+ return (err);
+ }
break;
case 'S':
- /* We support some keys used by the "star" archiver */
- if (strcmp(key, "SCHILY.acl.access") == 0) {
- r = pax_attribute_acl(a, tar, entry, value,
- ARCHIVE_ENTRY_ACL_TYPE_ACCESS);
- if (r == ARCHIVE_FATAL)
- return (r);
- } else if (strcmp(key, "SCHILY.acl.default") == 0) {
- r = pax_attribute_acl(a, tar, entry, value,
- ARCHIVE_ENTRY_ACL_TYPE_DEFAULT);
- if (r == ARCHIVE_FATAL)
- return (r);
- } else if (strcmp(key, "SCHILY.acl.ace") == 0) {
- r = pax_attribute_acl(a, tar, entry, value,
- ARCHIVE_ENTRY_ACL_TYPE_NFS4);
- if (r == ARCHIVE_FATAL)
- return (r);
- } else if (strcmp(key, "SCHILY.devmajor") == 0) {
- archive_entry_set_rdevmajor(entry,
- (dev_t)tar_atol10(value, strlen(value)));
- } else if (strcmp(key, "SCHILY.devminor") == 0) {
- archive_entry_set_rdevminor(entry,
- (dev_t)tar_atol10(value, strlen(value)));
- } else if (strcmp(key, "SCHILY.fflags") == 0) {
- archive_entry_copy_fflags_text(entry, value);
- } else if (strcmp(key, "SCHILY.dev") == 0) {
- archive_entry_set_dev(entry,
- (dev_t)tar_atol10(value, strlen(value)));
- } else if (strcmp(key, "SCHILY.ino") == 0) {
- archive_entry_set_ino(entry,
- tar_atol10(value, strlen(value)));
- } else if (strcmp(key, "SCHILY.nlink") == 0) {
- archive_entry_set_nlink(entry, (unsigned)
- tar_atol10(value, strlen(value)));
- } else if (strcmp(key, "SCHILY.realsize") == 0) {
- tar->realsize = tar_atol10(value, strlen(value));
- tar->realsize_override = 1;
- archive_entry_set_size(entry, tar->realsize);
- } else if (strncmp(key, "SCHILY.xattr.", 13) == 0) {
- pax_attribute_schily_xattr(entry, key, value,
- value_length);
- } else if (strcmp(key, "SUN.holesdata") == 0) {
- /* A Solaris extension for sparse. */
- r = solaris_sparse_parse(a, tar, entry, value);
- if (r < err) {
- if (r == ARCHIVE_FATAL)
- return (r);
- err = r;
- archive_set_error(&a->archive,
- ARCHIVE_ERRNO_MISC,
- "Parse error: SUN.holesdata");
+ /* SCHILY.* extensions used by "star" archiver */
+ if (key_length > 7 && memcmp(key, "SCHILY.", 7) == 0) {
+ key_length -= 7;
+ key += 7;
+
+ if (key_length == 10 && memcmp(key, "acl.access", 10) == 0) {
+ err = pax_attribute_SCHILY_acl(a, tar, entry, value_length,
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS);
+ // TODO: Mark mode as set
+ return (err);
+ }
+ else if (key_length == 11 && memcmp(key, "acl.default", 11) == 0) {
+ err = pax_attribute_SCHILY_acl(a, tar, entry, value_length,
+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT);
+ return (err);
+ }
+ else if (key_length == 7 && memcmp(key, "acl.ace", 7) == 0) {
+ err = pax_attribute_SCHILY_acl(a, tar, entry, value_length,
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4);
+ // TODO: Mark mode as set
+ return (err);
+ }
+ else if (key_length == 8 && memcmp(key, "devmajor", 8) == 0) {
+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) {
+ archive_entry_set_rdevmajor(entry, (dev_t)t);
+ }
+ return (err);
+ }
+ else if (key_length == 8 && memcmp(key, "devminor", 8) == 0) {
+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) {
+ archive_entry_set_rdevminor(entry, (dev_t)t);
+ }
+ return (err);
+ }
+ else if (key_length == 6 && memcmp(key, "fflags", 6) == 0) {
+ if (value_length < fflags_limit) {
+ p = __archive_read_ahead(a, value_length, &bytes_read);
+ if (p == NULL) {
+ /* Truncated archive */
+ archive_set_error(&a->archive, EINVAL,
+ "Truncated archive"
+ " detected while reading SCHILY.fflags");
+ return (ARCHIVE_FATAL);
+ }
+ archive_entry_copy_fflags_text_len(entry, p, value_length);
+ err = ARCHIVE_OK;
+ } else {
+ /* Overlong fflags field */
+ err = ARCHIVE_WARN;
+ }
+ __archive_read_consume(a, value_length);
+ return (err);
+ }
+ else if (key_length == 3 && memcmp(key, "dev", 3) == 0) {
+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) {
+ archive_entry_set_dev(entry, (dev_t)t);
+ }
+ return (err);
+ }
+ else if (key_length == 3 && memcmp(key, "ino", 3) == 0) {
+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) {
+ archive_entry_set_ino(entry, t);
+ }
+ return (err);
+ }
+ else if (key_length == 5 && memcmp(key, "nlink", 5) == 0) {
+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) {
+ archive_entry_set_nlink(entry, (unsigned int)t);
+ }
+ return (err);
+ }
+ else if (key_length == 8 && memcmp(key, "realsize", 8) == 0) {
+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) {
+ tar->realsize = t;
+ tar->realsize_override = 1;
+ archive_entry_set_size(entry, tar->realsize);
+ }
+ return (err);
+ }
+ else if (key_length > 6 && memcmp(key, "xattr.", 6) == 0) {
+ key_length -= 6;
+ key += 6;
+ if (value_length < xattr_limit) {
+ p = __archive_read_ahead(a, value_length, &bytes_read);
+ if (p == NULL) {
+ archive_set_error(&a->archive, EINVAL,
+ "Truncated archive"
+ " detected while reading SCHILY.xattr");
+ return (ARCHIVE_FATAL);
+ }
+ if (pax_attribute_SCHILY_xattr(entry, key, key_length, p, value_length)) {
+ /* TODO: Unable to parse xattr */
+ err = ARCHIVE_WARN;
+ }
+ } else {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Unreasonably large xattr: %d > %d",
+ (int)value_length, (int)xattr_limit);
+ err = ARCHIVE_WARN;
+ }
+ __archive_read_consume(a, value_length);
+ return (err);
+ }
+ }
+ /* SUN.* extensions from Solaris tar */
+ if (key_length > 4 && memcmp(key, "SUN.", 4) == 0) {
+ key_length -= 4;
+ key += 4;
+
+ if (key_length == 9 && memcmp(key, "holesdata", 9) == 0) {
+ /* SUN.holesdata */
+ if (value_length < sparse_map_limit) {
+ p = __archive_read_ahead(a, value_length, &bytes_read);
+ if (p == NULL) {
+ archive_set_error(&a->archive, EINVAL,
+ "Truncated archive"
+ " detected while reading SUN.holesdata");
+ return (ARCHIVE_FATAL);
+ }
+ err = pax_attribute_SUN_holesdata(a, tar, entry, p, value_length);
+ if (err < ARCHIVE_OK) {
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_MISC,
+ "Parse error: SUN.holesdata");
+ }
+ } else {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Unreasonably large sparse map: %d > %d",
+ (int)value_length, (int)sparse_map_limit);
+ err = ARCHIVE_FAILED;
+ }
+ __archive_read_consume(a, value_length);
+ return (err);
}
}
break;
case 'a':
- if (strcmp(key, "atime") == 0) {
- pax_time(value, &s, &n);
- archive_entry_set_atime(entry, s, n);
+ if (key_length == 5 && memcmp(key, "atime", 5) == 0) {
+ if ((err = pax_attribute_read_time(a, value_length, &t, &n, unconsumed)) == ARCHIVE_OK) {
+ archive_entry_set_atime(entry, t, n);
+ }
+ return (err);
}
break;
case 'c':
- if (strcmp(key, "ctime") == 0) {
- pax_time(value, &s, &n);
- archive_entry_set_ctime(entry, s, n);
- } else if (strcmp(key, "charset") == 0) {
+ if (key_length == 5 && memcmp(key, "ctime", 5) == 0) {
+ if ((err = pax_attribute_read_time(a, value_length, &t, &n, unconsumed)) == ARCHIVE_OK) {
+ archive_entry_set_ctime(entry, t, n);
+ }
+ return (err);
+ } else if (key_length == 7 && memcmp(key, "charset", 7) == 0) {
/* TODO: Publish charset information in entry. */
- } else if (strcmp(key, "comment") == 0) {
+ } else if (key_length == 7 && memcmp(key, "comment", 7) == 0) {
/* TODO: Publish comment in entry. */
}
break;
case 'g':
- if (strcmp(key, "gid") == 0) {
- archive_entry_set_gid(entry,
- tar_atol10(value, strlen(value)));
- } else if (strcmp(key, "gname") == 0) {
- archive_strcpy(&(tar->entry_gname), value);
+ if (key_length == 3 && memcmp(key, "gid", 3) == 0) {
+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) {
+ archive_entry_set_gid(entry, t);
+ }
+ return (err);
+ } else if (key_length == 5 && memcmp(key, "gname", 5) == 0) {
+ if (value_length > guname_limit) {
+ *unconsumed += value_length;
+ err = ARCHIVE_WARN;
+ } else {
+ err = read_bytes_to_string(a, &(tar->entry_gname), value_length, unconsumed);
+ }
+ return (err);
}
break;
case 'h':
- if (strcmp(key, "hdrcharset") == 0) {
- if (strcmp(value, "BINARY") == 0)
- /* Binary mode. */
- tar->pax_hdrcharset_binary = 1;
- else if (strcmp(value, "ISO-IR 10646 2000 UTF-8") == 0)
- tar->pax_hdrcharset_binary = 0;
+ if (key_length == 10 && memcmp(key, "hdrcharset", 10) == 0) {
+ if (value_length < 64) {
+ p = __archive_read_ahead(a, value_length, &bytes_read);
+ if (p == NULL) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Truncated tar archive "
+ "detected while reading hdrcharset attribute");
+ return (ARCHIVE_FATAL);
+ }
+ if (value_length == 6
+ && memcmp(p, "BINARY", 6) == 0) {
+ /* Binary mode. */
+ tar->pax_hdrcharset_utf8 = 0;
+ err = ARCHIVE_OK;
+ } else if (value_length == 23
+ && memcmp(p, "ISO-IR 10646 2000 UTF-8", 23) == 0) {
+ tar->pax_hdrcharset_utf8 = 1;
+ err = ARCHIVE_OK;
+ } else {
+ /* TODO: Unrecognized character set */
+ err = ARCHIVE_WARN;
+ }
+ } else {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "hdrcharset attribute is unreasonably large (%d bytes)",
+ (int)value_length);
+ err = ARCHIVE_WARN;
+ }
+ __archive_read_consume(a, value_length);
+ return (err);
}
break;
case 'l':
/* pax interchange doesn't distinguish hardlink vs. symlink. */
- if (strcmp(key, "linkpath") == 0) {
- archive_strcpy(&(tar->entry_linkpath), value);
+ if (key_length == 8 && memcmp(key, "linkpath", 8) == 0) {
+ if (value_length > pathname_limit) {
+ *unconsumed += value_length;
+ err = ARCHIVE_WARN;
+ } else {
+ err = read_bytes_to_string(a, &tar->entry_linkpath, value_length, unconsumed);
+ }
+ return (err);
}
break;
case 'm':
- if (strcmp(key, "mtime") == 0) {
- pax_time(value, &s, &n);
- archive_entry_set_mtime(entry, s, n);
+ if (key_length == 5 && memcmp(key, "mtime", 5) == 0) {
+ if ((err = pax_attribute_read_time(a, value_length, &t, &n, unconsumed)) == ARCHIVE_OK) {
+ archive_entry_set_mtime(entry, t, n);
+ }
+ return (err);
}
break;
case 'p':
- if (strcmp(key, "path") == 0) {
- archive_strcpy(&(tar->entry_pathname), value);
+ if (key_length == 4 && memcmp(key, "path", 4) == 0) {
+ if (value_length > pathname_limit) {
+ *unconsumed += value_length;
+ err = ARCHIVE_WARN;
+ } else {
+ err = read_bytes_to_string(a, &(tar->entry_pathname), value_length, unconsumed);
+ }
+ return (err);
}
break;
case 'r':
@@ -2104,48 +2714,54 @@ pax_attribute(struct archive_read *a, struct tar *tar,
case 's':
/* POSIX has reserved 'security.*' */
/* Someday: if (strcmp(key, "security.acl") == 0) { ... } */
- if (strcmp(key, "size") == 0) {
+ if (key_length == 4 && memcmp(key, "size", 4) == 0) {
/* "size" is the size of the data in the entry. */
- tar->entry_bytes_remaining
- = tar_atol10(value, strlen(value));
- if (tar->entry_bytes_remaining < 0) {
- tar->entry_bytes_remaining = 0;
- archive_set_error(&a->archive,
- ARCHIVE_ERRNO_MISC,
- "Tar size attribute is negative");
- return (ARCHIVE_FATAL);
+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) {
+ tar->entry_bytes_remaining = t;
+ /*
+ * The "size" pax header keyword always overrides the
+ * "size" field in the tar header.
+ * GNU.sparse.realsize, GNU.sparse.size and
+ * SCHILY.realsize override this value.
+ */
+ if (!tar->realsize_override) {
+ archive_entry_set_size(entry,
+ tar->entry_bytes_remaining);
+ tar->realsize
+ = tar->entry_bytes_remaining;
+ }
}
- if (tar->entry_bytes_remaining == INT64_MAX) {
- /* Note: tar_atol returns INT64_MAX on overflow */
+ else if (t == INT64_MAX) {
+ /* Note: pax_attr_read_number returns INT64_MAX on overflow or < 0 */
tar->entry_bytes_remaining = 0;
archive_set_error(&a->archive,
ARCHIVE_ERRNO_MISC,
"Tar size attribute overflow");
return (ARCHIVE_FATAL);
}
- /*
- * The "size" pax header keyword always overrides the
- * "size" field in the tar header.
- * GNU.sparse.realsize, GNU.sparse.size and
- * SCHILY.realsize override this value.
- */
- if (!tar->realsize_override) {
- archive_entry_set_size(entry,
- tar->entry_bytes_remaining);
- tar->realsize
- = tar->entry_bytes_remaining;
- }
+ return (err);
}
break;
case 'u':
- if (strcmp(key, "uid") == 0) {
- archive_entry_set_uid(entry,
- tar_atol10(value, strlen(value)));
- } else if (strcmp(key, "uname") == 0) {
- archive_strcpy(&(tar->entry_uname), value);
+ if (key_length == 3 && memcmp(key, "uid", 3) == 0) {
+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) {
+ archive_entry_set_uid(entry, t);
+ }
+ return (err);
+ } else if (key_length == 5 && memcmp(key, "uname", 5) == 0) {
+ if (value_length > guname_limit) {
+ *unconsumed += value_length;
+ err = ARCHIVE_WARN;
+ } else {
+ err = read_bytes_to_string(a, &(tar->entry_uname), value_length, unconsumed);
+ }
+ return (err);
}
break;
}
+
+ /* Unrecognized key, just skip the entire value. */
+ __archive_read_consume(a, value_length);
return (err);
}
@@ -2155,7 +2771,7 @@ pax_attribute(struct archive_read *a, struct tar *tar,
* parse a decimal time value, which may include a fractional portion
*/
static void
-pax_time(const char *p, int64_t *ps, long *pn)
+pax_time(const char *p, size_t length, int64_t *ps, long *pn)
{
char digit;
int64_t s;
@@ -2166,13 +2782,18 @@ pax_time(const char *p, int64_t *ps, long *pn)
limit = INT64_MAX / 10;
last_digit_limit = INT64_MAX % 10;
+ if (length <= 0) {
+ *ps = 0;
+ return;
+ }
s = 0;
sign = 1;
if (*p == '-') {
sign = -1;
p++;
+ length--;
}
- while (*p >= '0' && *p <= '9') {
+ while (length > 0 && *p >= '0' && *p <= '9') {
digit = *p - '0';
if (s > limit ||
(s == limit && digit > last_digit_limit)) {
@@ -2181,6 +2802,7 @@ pax_time(const char *p, int64_t *ps, long *pn)
}
s = (s * 10) + digit;
++p;
+ --length;
}
*ps = s * sign;
@@ -2188,13 +2810,14 @@ pax_time(const char *p, int64_t *ps, long *pn)
/* Calculate nanoseconds. */
*pn = 0;
- if (*p != '.')
+ if (length <= 0 || *p != '.')
return;
l = 100000000UL;
do {
++p;
- if (*p >= '0' && *p <= '9')
+ --length;
+ if (length > 0 && *p >= '0' && *p <= '9')
*pn += (*p - '0') * l;
else
break;
@@ -2225,49 +2848,65 @@ header_gnutar(struct archive_read *a, struct tar *tar,
/* Copy filename over (to ensure null termination). */
header = (const struct archive_entry_header_gnutar *)h;
- if (archive_entry_copy_pathname_l(entry,
- header->name, sizeof(header->name), tar->sconv) != 0) {
- err = set_conversion_failed_error(a, tar->sconv, "Pathname");
- if (err == ARCHIVE_FATAL)
- return (err);
+ const char *existing_pathname = archive_entry_pathname(entry);
+ if (existing_pathname == NULL || existing_pathname[0] == '\0') {
+ if (archive_entry_copy_pathname_l(entry,
+ header->name, sizeof(header->name), tar->sconv) != 0) {
+ err = set_conversion_failed_error(a, tar->sconv, "Pathname");
+ if (err == ARCHIVE_FATAL)
+ return (err);
+ }
}
/* Fields common to ustar and GNU */
/* XXX Can the following be factored out since it's common
* to ustar and gnu tar? Is it okay to move it down into
* header_common, perhaps? */
- if (archive_entry_copy_uname_l(entry,
- header->uname, sizeof(header->uname), tar->sconv) != 0) {
- err = set_conversion_failed_error(a, tar->sconv, "Uname");
- if (err == ARCHIVE_FATAL)
- return (err);
+ const char *existing_uname = archive_entry_uname(entry);
+ if (existing_uname == NULL || existing_uname[0] == '\0') {
+ if (archive_entry_copy_uname_l(entry,
+ header->uname, sizeof(header->uname), tar->sconv) != 0) {
+ err = set_conversion_failed_error(a, tar->sconv, "Uname");
+ if (err == ARCHIVE_FATAL)
+ return (err);
+ }
}
- if (archive_entry_copy_gname_l(entry,
- header->gname, sizeof(header->gname), tar->sconv) != 0) {
- err = set_conversion_failed_error(a, tar->sconv, "Gname");
- if (err == ARCHIVE_FATAL)
- return (err);
+ const char *existing_gname = archive_entry_gname(entry);
+ if (existing_gname == NULL || existing_gname[0] == '\0') {
+ if (archive_entry_copy_gname_l(entry,
+ header->gname, sizeof(header->gname), tar->sconv) != 0) {
+ err = set_conversion_failed_error(a, tar->sconv, "Gname");
+ if (err == ARCHIVE_FATAL)
+ return (err);
+ }
}
/* Parse out device numbers only for char and block specials */
if (header->typeflag[0] == '3' || header->typeflag[0] == '4') {
- archive_entry_set_rdevmajor(entry, (dev_t)
- tar_atol(header->rdevmajor, sizeof(header->rdevmajor)));
- archive_entry_set_rdevminor(entry, (dev_t)
- tar_atol(header->rdevminor, sizeof(header->rdevminor)));
- } else
+ if (!archive_entry_rdev_is_set(entry)) {
+ archive_entry_set_rdevmajor(entry, (dev_t)
+ tar_atol(header->rdevmajor, sizeof(header->rdevmajor)));
+ archive_entry_set_rdevminor(entry, (dev_t)
+ tar_atol(header->rdevminor, sizeof(header->rdevminor)));
+ }
+ } else {
archive_entry_set_rdev(entry, 0);
+ }
tar->entry_padding = 0x1ff & (-tar->entry_bytes_remaining);
/* Grab GNU-specific fields. */
- t = tar_atol(header->atime, sizeof(header->atime));
- if (t > 0)
- archive_entry_set_atime(entry, t, 0);
- t = tar_atol(header->ctime, sizeof(header->ctime));
- if (t > 0)
- archive_entry_set_ctime(entry, t, 0);
+ if (!archive_entry_atime_is_set(entry)) {
+ t = tar_atol(header->atime, sizeof(header->atime));
+ if (t > 0)
+ archive_entry_set_atime(entry, t, 0);
+ }
+ if (!archive_entry_ctime_is_set(entry)) {
+ t = tar_atol(header->ctime, sizeof(header->ctime));
+ if (t > 0)
+ archive_entry_set_ctime(entry, t, 0);
+ }
if (header->realsize[0] != 0) {
tar->realsize
@@ -2295,7 +2934,7 @@ gnu_add_sparse_entry(struct archive_read *a, struct tar *tar,
{
struct sparse_block *p;
- p = (struct sparse_block *)calloc(1, sizeof(*p));
+ p = calloc(1, sizeof(*p));
if (p == NULL) {
archive_set_error(&a->archive, ENOMEM, "Out of memory");
return (ARCHIVE_FATAL);
@@ -2360,9 +2999,7 @@ gnu_sparse_old_read(struct archive_read *a, struct tar *tar,
do {
tar_flush_unconsumed(a, unconsumed);
data = __archive_read_ahead(a, 512, &bytes_read);
- if (bytes_read < 0)
- return (ARCHIVE_FATAL);
- if (bytes_read < 512) {
+ if (data == NULL) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"Truncated tar archive "
"detected while reading sparse file data");
@@ -2419,19 +3056,19 @@ gnu_sparse_old_parse(struct archive_read *a, struct tar *tar,
* importantly, the sparse data was lost when extracted by archivers
* that didn't recognize this extension.
*/
-
static int
-gnu_sparse_01_parse(struct archive_read *a, struct tar *tar, const char *p)
+gnu_sparse_01_parse(struct archive_read *a, struct tar *tar, const char *p, size_t length)
{
const char *e;
int64_t offset = -1, size = -1;
for (;;) {
e = p;
- while (*e != '\0' && *e != ',') {
+ while (length > 0 && *e != ',') {
if (*e < '0' || *e > '9')
return (ARCHIVE_WARN);
e++;
+ length--;
}
if (offset < 0) {
offset = tar_atol10(p, e - p);
@@ -2446,9 +3083,10 @@ gnu_sparse_01_parse(struct archive_read *a, struct tar *tar, const char *p)
return (ARCHIVE_FATAL);
offset = -1;
}
- if (*e == '\0')
+ if (length == 0)
return (ARCHIVE_OK);
p = e + 1;
+ length--;
}
}
@@ -2570,8 +3208,8 @@ gnu_sparse_10_read(struct archive_read *a, struct tar *tar, size_t *unconsumed)
* consist of both data and hole.
*/
static int
-solaris_sparse_parse(struct archive_read *a, struct tar *tar,
- struct archive_entry *entry, const char *p)
+pax_attribute_SUN_holesdata(struct archive_read *a, struct tar *tar,
+ struct archive_entry *entry, const char *p, size_t length)
{
const char *e;
int64_t start, end;
@@ -2580,16 +3218,21 @@ solaris_sparse_parse(struct archive_read *a, struct tar *tar,
(void)entry; /* UNUSED */
end = 0;
- if (*p == ' ')
+ if (length <= 0)
+ return (ARCHIVE_WARN);
+ if (*p == ' ') {
p++;
- else
+ length--;
+ } else {
return (ARCHIVE_WARN);
+ }
for (;;) {
e = p;
- while (*e != '\0' && *e != ' ') {
+ while (length > 0 && *e != ' ') {
if (*e < '0' || *e > '9')
return (ARCHIVE_WARN);
e++;
+ length--;
}
start = end;
end = tar_atol10(p, e - p);
@@ -2601,9 +3244,15 @@ solaris_sparse_parse(struct archive_read *a, struct tar *tar,
return (ARCHIVE_FATAL);
tar->sparse_last->hole = hole;
}
- if (*e == '\0')
- return (ARCHIVE_OK);
+ if (length == 0 || *e == '\n') {
+ if (length == 0 && *e == '\n') {
+ return (ARCHIVE_OK);
+ } else {
+ return (ARCHIVE_WARN);
+ }
+ }
p = e + 1;
+ length--;
hole = hole == 0;
}
}
@@ -2770,7 +3419,7 @@ readline(struct archive_read *a, struct tar *tar, const char **start,
tar_flush_unconsumed(a, unconsumed);
t = __archive_read_ahead(a, 1, &bytes_read);
- if (bytes_read <= 0)
+ if (bytes_read <= 0 || t == NULL)
return (ARCHIVE_FATAL);
s = t; /* Start of line? */
p = memchr(t, '\n', bytes_read);
@@ -2811,7 +3460,7 @@ readline(struct archive_read *a, struct tar *tar, const char **start,
}
/* Read some more. */
t = __archive_read_ahead(a, 1, &bytes_read);
- if (bytes_read <= 0)
+ if (bytes_read <= 0 || t == NULL)
return (ARCHIVE_FATAL);
s = t; /* Start of line? */
p = memchr(t, '\n', bytes_read);
@@ -2855,7 +3504,7 @@ base64_decode(const char *s, size_t len, size_t *out_len)
/* Allocate enough space to hold the entire output. */
/* Note that we may not use all of this... */
- out = (char *)malloc(len - len / 4 + 1);
+ out = malloc(len - len / 4 + 1);
if (out == NULL) {
*out_len = 0;
return (NULL);
@@ -2905,22 +3554,23 @@ base64_decode(const char *s, size_t len, size_t *out_len)
}
static char *
-url_decode(const char *in)
+url_decode(const char *in, size_t length)
{
char *out, *d;
const char *s;
- out = (char *)malloc(strlen(in) + 1);
+ out = malloc(length + 1);
if (out == NULL)
return (NULL);
- for (s = in, d = out; *s != '\0'; ) {
- if (s[0] == '%' && s[1] != '\0' && s[2] != '\0') {
+ for (s = in, d = out; length > 0 && *s != '\0'; ) {
+ if (s[0] == '%' && length > 2) {
/* Try to convert % escape */
int digit1 = tohex(s[1]);
int digit2 = tohex(s[2]);
if (digit1 >= 0 && digit2 >= 0) {
/* Looks good, consume three chars */
s += 3;
+ length -= 3;
/* Convert output */
*d++ = ((digit1 << 4) | digit2);
continue;
@@ -2928,6 +3578,7 @@ url_decode(const char *in)
/* Else fall through and treat '%' as normal char */
}
*d++ = *s++;
+ --length;
}
*d = '\0';
return (out);
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_xar.c b/contrib/libarchive/libarchive/archive_read_support_format_xar.c
index cefb36410e77..ffffab9638ad 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_xar.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_xar.c
@@ -416,7 +416,7 @@ static void unknowntag_end(struct xar *, const char *);
static int xml_start(struct archive_read *,
const char *, struct xmlattr_list *);
static void xml_end(void *, const char *);
-static void xml_data(void *, const char *, int);
+static void xml_data(void *, const char *, size_t);
static int xml_parse_file_flags(struct xar *, const char *);
static int xml_parse_file_ext2(struct xar *, const char *);
#if defined(HAVE_LIBXML_XMLREADER_H)
@@ -450,7 +450,7 @@ archive_read_support_format_xar(struct archive *_a)
archive_check_magic(_a, ARCHIVE_READ_MAGIC,
ARCHIVE_STATE_NEW, "archive_read_support_format_xar");
- xar = (struct xar *)calloc(1, sizeof(*xar));
+ xar = calloc(1, sizeof(*xar));
if (xar == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate xar data");
@@ -1242,7 +1242,7 @@ heap_add_entry(struct archive_read *a,
return (ARCHIVE_FATAL);
}
new_pending_files = (struct xar_file **)
- malloc(new_size * sizeof(new_pending_files[0]));
+ calloc(new_size, sizeof(new_pending_files[0]));
if (new_pending_files == NULL) {
archive_set_error(&a->archive,
ENOMEM, "Out of memory");
@@ -1616,9 +1616,9 @@ decompress(struct archive_read *a, const void **buff, size_t *outbytes,
switch (xar->rd_encoding) {
case GZIP:
xar->stream.next_in = (Bytef *)(uintptr_t)b;
- xar->stream.avail_in = avail_in;
+ xar->stream.avail_in = (uInt)avail_in;
xar->stream.next_out = (unsigned char *)outbuff;
- xar->stream.avail_out = avail_out;
+ xar->stream.avail_out = (uInt)avail_out;
r = inflate(&(xar->stream), 0);
switch (r) {
case Z_OK: /* Decompressor made some progress.*/
@@ -1635,9 +1635,9 @@ decompress(struct archive_read *a, const void **buff, size_t *outbytes,
#if defined(HAVE_BZLIB_H) && defined(BZ_CONFIG_ERROR)
case BZIP2:
xar->bzstream.next_in = (char *)(uintptr_t)b;
- xar->bzstream.avail_in = avail_in;
+ xar->bzstream.avail_in = (unsigned int)avail_in;
xar->bzstream.next_out = (char *)outbuff;
- xar->bzstream.avail_out = avail_out;
+ xar->bzstream.avail_out = (unsigned int)avail_out;
r = BZ2_bzDecompress(&(xar->bzstream));
switch (r) {
case BZ_STREAM_END: /* Found end of stream. */
@@ -2674,7 +2674,7 @@ is_string(const char *known, const char *data, size_t len)
}
static void
-xml_data(void *userData, const char *s, int len)
+xml_data(void *userData, const char *s, size_t len)
{
struct archive_read *a;
struct xar *xar;
@@ -2707,6 +2707,9 @@ xml_data(void *userData, const char *s, int len)
switch (xar->xmlsts) {
case FILE_NAME:
+ if (xar->file->has & HAS_PATHNAME)
+ break;
+
if (xar->file->parent != NULL) {
archive_string_concat(&(xar->file->pathname),
&(xar->file->parent->pathname));
@@ -3190,8 +3193,11 @@ xml2_read_toc(struct archive_read *a)
if (r == ARCHIVE_OK)
r = xml_start(a, name, &list);
xmlattr_cleanup(&list);
- if (r != ARCHIVE_OK)
+ if (r != ARCHIVE_OK) {
+ xmlFreeTextReader(reader);
+ xmlCleanupParser();
return (r);
+ }
if (empty)
xml_end(a, name);
break;
@@ -3280,7 +3286,7 @@ expat_data_cb(void *userData, const XML_Char *s, int len)
{
struct expat_userData *ud = (struct expat_userData *)userData;
- xml_data(ud->archive, s, len);
+ xml_data(ud->archive, s, (size_t)len);
}
static int
@@ -3316,14 +3322,16 @@ expat_read_toc(struct archive_read *a)
d = NULL;
r = rd_contents(a, &d, &outbytes, &used, xar->toc_remaining);
- if (r != ARCHIVE_OK)
+ if (r != ARCHIVE_OK) {
+ XML_ParserFree(parser);
return (r);
+ }
xar->toc_remaining -= used;
xar->offset += used;
xar->toc_total += outbytes;
PRINT_TOC(d, outbytes);
- xr = XML_Parse(parser, d, outbytes, xar->toc_remaining == 0);
+ xr = XML_Parse(parser, d, (int)outbytes, xar->toc_remaining == 0);
__archive_read_consume(a, used);
if (xr == XML_STATUS_ERROR) {
XML_ParserFree(parser);
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_zip.c b/contrib/libarchive/libarchive/archive_read_support_format_zip.c
index c9759eaf9a89..3e62533bf2d9 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_zip.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_zip.c
@@ -1751,8 +1751,7 @@ zipx_xz_init(struct archive_read *a, struct zip *zip)
free(zip->uncompressed_buffer);
zip->uncompressed_buffer_size = 256 * 1024;
- zip->uncompressed_buffer =
- (uint8_t*) malloc(zip->uncompressed_buffer_size);
+ zip->uncompressed_buffer = malloc(zip->uncompressed_buffer_size);
if (zip->uncompressed_buffer == NULL) {
archive_set_error(&a->archive, ENOMEM,
"No memory for xz decompression");
@@ -1862,8 +1861,7 @@ zipx_lzma_alone_init(struct archive_read *a, struct zip *zip)
if(!zip->uncompressed_buffer) {
zip->uncompressed_buffer_size = 256 * 1024;
- zip->uncompressed_buffer =
- (uint8_t*) malloc(zip->uncompressed_buffer_size);
+ zip->uncompressed_buffer = malloc(zip->uncompressed_buffer_size);
if (zip->uncompressed_buffer == NULL) {
archive_set_error(&a->archive, ENOMEM,
@@ -1924,7 +1922,7 @@ zip_read_data_zipx_xz(struct archive_read *a, const void **buff,
return (ARCHIVE_FATAL);
}
- in_bytes = zipmin(zip->entry_bytes_remaining, bytes_avail);
+ in_bytes = (ssize_t)zipmin(zip->entry_bytes_remaining, bytes_avail);
zip->zipx_lzma_stream.next_in = compressed_buf;
zip->zipx_lzma_stream.avail_in = in_bytes;
zip->zipx_lzma_stream.total_in = 0;
@@ -1966,14 +1964,14 @@ zip_read_data_zipx_xz(struct archive_read *a, const void **buff,
break;
}
- to_consume = zip->zipx_lzma_stream.total_in;
+ to_consume = (ssize_t)zip->zipx_lzma_stream.total_in;
__archive_read_consume(a, to_consume);
zip->entry_bytes_remaining -= to_consume;
zip->entry_compressed_bytes_read += to_consume;
zip->entry_uncompressed_bytes_read += zip->zipx_lzma_stream.total_out;
- *size = zip->zipx_lzma_stream.total_out;
+ *size = (size_t)zip->zipx_lzma_stream.total_out;
*buff = zip->uncompressed_buffer;
return (ARCHIVE_OK);
@@ -2014,7 +2012,7 @@ zip_read_data_zipx_lzma_alone(struct archive_read *a, const void **buff,
}
/* Set decompressor parameters. */
- in_bytes = zipmin(zip->entry_bytes_remaining, bytes_avail);
+ in_bytes = (ssize_t)zipmin(zip->entry_bytes_remaining, bytes_avail);
zip->zipx_lzma_stream.next_in = compressed_buf;
zip->zipx_lzma_stream.avail_in = in_bytes;
@@ -2024,7 +2022,7 @@ zip_read_data_zipx_lzma_alone(struct archive_read *a, const void **buff,
/* These lzma_alone streams lack end of stream marker, so let's
* make sure the unpacker won't try to unpack more than it's
* supposed to. */
- zipmin((int64_t) zip->uncompressed_buffer_size,
+ (size_t)zipmin((int64_t) zip->uncompressed_buffer_size,
zip->entry->uncompressed_size -
zip->entry_uncompressed_bytes_read);
zip->zipx_lzma_stream.total_out = 0;
@@ -2061,7 +2059,7 @@ zip_read_data_zipx_lzma_alone(struct archive_read *a, const void **buff,
return (ARCHIVE_FATAL);
}
- to_consume = zip->zipx_lzma_stream.total_in;
+ to_consume = (ssize_t)zip->zipx_lzma_stream.total_in;
/* Update pointers. */
__archive_read_consume(a, to_consume);
@@ -2082,7 +2080,7 @@ zip_read_data_zipx_lzma_alone(struct archive_read *a, const void **buff,
}
/* Return values. */
- *size = zip->zipx_lzma_stream.total_out;
+ *size = (size_t)zip->zipx_lzma_stream.total_out;
*buff = zip->uncompressed_buffer;
/* If we're here, then we're good! */
@@ -2167,8 +2165,7 @@ zipx_ppmd8_init(struct archive_read *a, struct zip *zip)
free(zip->uncompressed_buffer);
zip->uncompressed_buffer_size = 256 * 1024;
- zip->uncompressed_buffer =
- (uint8_t*) malloc(zip->uncompressed_buffer_size);
+ zip->uncompressed_buffer = malloc(zip->uncompressed_buffer_size);
if(zip->uncompressed_buffer == NULL) {
archive_set_error(&a->archive, ENOMEM,
@@ -2291,8 +2288,7 @@ zipx_bzip2_init(struct archive_read *a, struct zip *zip)
free(zip->uncompressed_buffer);
zip->uncompressed_buffer_size = 256 * 1024;
- zip->uncompressed_buffer =
- (uint8_t*) malloc(zip->uncompressed_buffer_size);
+ zip->uncompressed_buffer = malloc(zip->uncompressed_buffer_size);
if (zip->uncompressed_buffer == NULL) {
archive_set_error(&a->archive, ENOMEM,
"No memory for bzip2 decompression");
@@ -2331,7 +2327,7 @@ zip_read_data_zipx_bzip2(struct archive_read *a, const void **buff,
return (ARCHIVE_FATAL);
}
- in_bytes = zipmin(zip->entry_bytes_remaining, bytes_avail);
+ in_bytes = (ssize_t)zipmin(zip->entry_bytes_remaining, bytes_avail);
if(in_bytes < 1) {
/* libbz2 doesn't complain when caller feeds avail_in == 0.
* It will actually return success in this case, which is
@@ -2394,7 +2390,7 @@ zip_read_data_zipx_bzip2(struct archive_read *a, const void **buff,
zip->entry_uncompressed_bytes_read += total_out;
/* Give libarchive its due. */
- *size = total_out;
+ *size = (size_t)total_out;
*buff = zip->uncompressed_buffer;
return ARCHIVE_OK;
@@ -2434,8 +2430,7 @@ zipx_zstd_init(struct archive_read *a, struct zip *zip)
free(zip->uncompressed_buffer);
zip->uncompressed_buffer_size = ZSTD_DStreamOutSize();
- zip->uncompressed_buffer =
- (uint8_t*) malloc(zip->uncompressed_buffer_size);
+ zip->uncompressed_buffer = malloc(zip->uncompressed_buffer_size);
if (zip->uncompressed_buffer == NULL) {
archive_set_error(&a->archive, ENOMEM,
"No memory for Zstd decompression");
@@ -2478,7 +2473,7 @@ zip_read_data_zipx_zstd(struct archive_read *a, const void **buff,
return (ARCHIVE_FATAL);
}
- in_bytes = zipmin(zip->entry_bytes_remaining, bytes_avail);
+ in_bytes = (ssize_t)zipmin(zip->entry_bytes_remaining, bytes_avail);
if(in_bytes < 1) {
/* zstd doesn't complain when caller feeds avail_in == 0.
* It will actually return success in this case, which is
@@ -2524,7 +2519,7 @@ zip_read_data_zipx_zstd(struct archive_read *a, const void **buff,
zip->entry_uncompressed_bytes_read += total_out;
/* Give libarchive its due. */
- *size = total_out;
+ *size = (size_t)total_out;
*buff = zip->uncompressed_buffer;
return ARCHIVE_OK;
@@ -2574,7 +2569,7 @@ zip_read_data_deflate(struct archive_read *a, const void **buff,
if (zip->uncompressed_buffer == NULL) {
zip->uncompressed_buffer_size = 256 * 1024;
zip->uncompressed_buffer
- = (unsigned char *)malloc(zip->uncompressed_buffer_size);
+ = malloc(zip->uncompressed_buffer_size);
if (zip->uncompressed_buffer == NULL) {
archive_set_error(&a->archive, ENOMEM,
"No memory for ZIP decompression");
@@ -3600,7 +3595,7 @@ archive_read_support_format_zip_streamable(struct archive *_a)
archive_check_magic(_a, ARCHIVE_READ_MAGIC,
ARCHIVE_STATE_NEW, "archive_read_support_format_zip");
- zip = (struct zip *)calloc(1, sizeof(*zip));
+ zip = calloc(1, sizeof(*zip));
if (zip == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate zip data");
@@ -3680,7 +3675,7 @@ read_eocd(struct zip *zip, const char *p, int64_t current_offset)
if (archive_le16dec(p + 10) != archive_le16dec(p + 8))
return 0;
/* Central directory can't extend beyond start of EOCD record. */
- if (cd_offset + cd_size > current_offset)
+ if ((int64_t)cd_offset + cd_size > current_offset)
return 0;
/* Save the central directory location for later use. */
@@ -4392,7 +4387,7 @@ archive_read_support_format_zip_seekable(struct archive *_a)
archive_check_magic(_a, ARCHIVE_READ_MAGIC,
ARCHIVE_STATE_NEW, "archive_read_support_format_zip_seekable");
- zip = (struct zip *)calloc(1, sizeof(*zip));
+ zip = calloc(1, sizeof(*zip));
if (zip == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate zip data");
diff --git a/contrib/libarchive/libarchive/archive_string.c b/contrib/libarchive/libarchive/archive_string.c
index be6c39600d72..abf7ad669351 100644
--- a/contrib/libarchive/libarchive/archive_string.c
+++ b/contrib/libarchive/libarchive/archive_string.c
@@ -313,7 +313,7 @@ archive_string_ensure(struct archive_string *as, size_t s)
if (new_length < s)
new_length = s;
/* Now we can reallocate the buffer. */
- p = (char *)realloc(as->s, new_length);
+ p = realloc(as->s, new_length);
if (p == NULL) {
/* On failure, wipe the string and return NULL. */
archive_string_free(as);
@@ -3874,6 +3874,30 @@ archive_mstring_get_utf8(struct archive *a, struct archive_mstring *aes,
}
*p = NULL;
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ /*
+ * On Windows, first try converting from WCS because (1) there's no
+ * guarantee that the conversion to MBS will succeed, e.g. when using
+ * CP_ACP, and (2) that's more efficient than converting to MBS, just to
+ * convert back to WCS again before finally converting to UTF-8
+ */
+ if ((aes->aes_set & AES_SET_WCS) != 0) {
+ sc = archive_string_conversion_to_charset(a, "UTF-8", 1);
+ if (sc == NULL)
+ return (-1);/* Couldn't allocate memory for sc. */
+ archive_string_empty(&(aes->aes_utf8));
+ r = archive_string_append_from_wcs_in_codepage(&(aes->aes_utf8),
+ aes->aes_wcs.s, aes->aes_wcs.length, sc);
+ if (a == NULL)
+ free_sconv_object(sc);
+ if (r == 0) {
+ aes->aes_set |= AES_SET_UTF8;
+ *p = aes->aes_utf8.s;
+ return (0);/* success. */
+ } else
+ return (-1);/* failure. */
+ }
+#endif
/* Try converting WCS to MBS first if MBS does not exist yet. */
if ((aes->aes_set & AES_SET_MBS) == 0) {
const char *pm; /* unused */
@@ -3958,6 +3982,32 @@ archive_mstring_get_wcs(struct archive *a, struct archive_mstring *aes,
}
*wp = NULL;
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ /*
+ * On Windows, prefer converting from UTF-8 directly to WCS because:
+ * (1) there's no guarantee that the string can be represented in MBS (e.g.
+ * with CP_ACP), and (2) in order to convert from UTF-8 to MBS, we're going
+ * to need to convert from UTF-8 to WCS anyway and its wasteful to throw
+ * away that intermediate result
+ */
+ if (aes->aes_set & AES_SET_UTF8) {
+ struct archive_string_conv *sc;
+
+ sc = archive_string_conversion_from_charset(a, "UTF-8", 1);
+ if (sc != NULL) {
+ archive_wstring_empty((&aes->aes_wcs));
+ r = archive_wstring_append_from_mbs_in_codepage(&(aes->aes_wcs),
+ aes->aes_utf8.s, aes->aes_utf8.length, sc);
+ if (a == NULL)
+ free_sconv_object(sc);
+ if (r == 0) {
+ aes->aes_set |= AES_SET_WCS;
+ *wp = aes->aes_wcs.s;
+ return (0);
+ }
+ }
+ }
+#endif
/* Try converting UTF8 to MBS first if MBS does not exist yet. */
if ((aes->aes_set & AES_SET_MBS) == 0) {
const char *p; /* unused */
@@ -4211,21 +4261,31 @@ archive_mstring_update_utf8(struct archive *a, struct archive_mstring *aes,
aes->aes_set = AES_SET_UTF8; /* Only UTF8 is set now. */
- /* Try converting UTF-8 to MBS, return false on failure. */
sc = archive_string_conversion_from_charset(a, "UTF-8", 1);
if (sc == NULL)
return (-1);/* Couldn't allocate memory for sc. */
- r = archive_strcpy_l(&(aes->aes_mbs), utf8, sc);
#if defined(_WIN32) && !defined(__CYGWIN__)
- /* On failure, make an effort to convert UTF8 to WCS as the active code page
- * may not be able to represent all characters in the string */
- if (r != 0) {
- if (archive_wstring_append_from_mbs_in_codepage(&(aes->aes_wcs),
- aes->aes_utf8.s, aes->aes_utf8.length, sc) == 0)
- aes->aes_set = AES_SET_UTF8 | AES_SET_WCS;
- }
-#endif
+ /* On Windows, there's no good way to convert from UTF8 -> MBS directly, so
+ * prefer to first convert to WCS as (1) it's wasteful to throw away the
+ * intermediate result, and (2) WCS will still be set even if we fail to
+ * convert to MBS (e.g. with ACP that can't represent the characters) */
+ r = archive_wstring_append_from_mbs_in_codepage(&(aes->aes_wcs),
+ aes->aes_utf8.s, aes->aes_utf8.length, sc);
+
+ if (a == NULL)
+ free_sconv_object(sc);
+ if (r != 0)
+ return (-1); /* This will guarantee we can't convert to MBS */
+ aes->aes_set = AES_SET_UTF8 | AES_SET_WCS; /* Both UTF8 and WCS set. */
+
+ /* Try converting WCS to MBS, return false on failure. */
+ if (archive_string_append_from_wcs(&(aes->aes_mbs), aes->aes_wcs.s,
+ aes->aes_wcs.length))
+ return (-1);
+#else
+ /* Try converting UTF-8 to MBS, return false on failure. */
+ r = archive_strcpy_l(&(aes->aes_mbs), utf8, sc);
if (a == NULL)
free_sconv_object(sc);
@@ -4237,8 +4297,10 @@ archive_mstring_update_utf8(struct archive *a, struct archive_mstring *aes,
if (archive_wstring_append_from_mbs(&(aes->aes_wcs), aes->aes_mbs.s,
aes->aes_mbs.length))
return (-1);
- aes->aes_set = AES_SET_UTF8 | AES_SET_WCS | AES_SET_MBS;
+#endif
/* All conversions succeeded. */
+ aes->aes_set = AES_SET_UTF8 | AES_SET_WCS | AES_SET_MBS;
+
return (0);
}
diff --git a/contrib/libarchive/libarchive/archive_util.c b/contrib/libarchive/libarchive/archive_util.c
index 7b918fef04b8..3a8caad5262b 100644
--- a/contrib/libarchive/libarchive/archive_util.c
+++ b/contrib/libarchive/libarchive/archive_util.c
@@ -280,7 +280,8 @@ __archive_mktempx(const char *tmpdir, wchar_t *template)
if (archive_wstring_append_from_mbs(&temp_name, tmpdir,
strlen(tmpdir)) < 0)
goto exit_tmpfile;
- if (temp_name.s[temp_name.length-1] != L'/')
+ if (temp_name.length == 0 ||
+ temp_name.s[temp_name.length-1] != L'/')
archive_wstrappend_wchar(&temp_name, L'/');
}
@@ -454,7 +455,7 @@ get_tempdir(struct archive_string *temppath)
tmp = "/tmp";
#endif
archive_strcpy(temppath, tmp);
- if (temppath->s[temppath->length-1] != '/')
+ if (temppath->length == 0 || temppath->s[temppath->length-1] != '/')
archive_strappend_char(temppath, '/');
return (ARCHIVE_OK);
}
@@ -477,7 +478,8 @@ __archive_mktemp(const char *tmpdir)
goto exit_tmpfile;
} else {
archive_strcpy(&temp_name, tmpdir);
- if (temp_name.s[temp_name.length-1] != '/')
+ if (temp_name.length == 0 ||
+ temp_name.s[temp_name.length-1] != '/')
archive_strappend_char(&temp_name, '/');
}
#ifdef O_TMPFILE
@@ -538,7 +540,7 @@ __archive_mktempx(const char *tmpdir, char *template)
goto exit_tmpfile;
} else
archive_strcpy(&temp_name, tmpdir);
- if (temp_name.s[temp_name.length-1] == '/') {
+ if (temp_name.length > 0 && temp_name.s[temp_name.length-1] == '/') {
temp_name.s[temp_name.length-1] = '\0';
temp_name.length --;
}
@@ -649,8 +651,7 @@ archive_utility_string_sort_helper(char **strings, unsigned int n)
if (strcmp(strings[i], pivot) < 0)
{
lesser_count++;
- tmp = (char **)realloc(lesser,
- lesser_count * sizeof(char *));
+ tmp = realloc(lesser, lesser_count * sizeof(*tmp));
if (!tmp) {
free(greater);
free(lesser);
@@ -662,8 +663,7 @@ archive_utility_string_sort_helper(char **strings, unsigned int n)
else
{
greater_count++;
- tmp = (char **)realloc(greater,
- greater_count * sizeof(char *));
+ tmp = realloc(greater, greater_count * sizeof(*tmp));
if (!tmp) {
free(greater);
free(lesser);
diff --git a/contrib/libarchive/libarchive/archive_write.c b/contrib/libarchive/libarchive/archive_write.c
index b70bc785c738..303c686881a9 100644
--- a/contrib/libarchive/libarchive/archive_write.c
+++ b/contrib/libarchive/libarchive/archive_write.c
@@ -98,7 +98,7 @@ archive_write_new(void)
struct archive_write *a;
unsigned char *nulls;
- a = (struct archive_write *)calloc(1, sizeof(*a));
+ a = calloc(1, sizeof(*a));
if (a == NULL)
return (NULL);
a->archive.magic = ARCHIVE_WRITE_MAGIC;
@@ -114,7 +114,7 @@ archive_write_new(void)
/* Initialize a block of nulls for padding purposes. */
a->null_length = 1024;
- nulls = (unsigned char *)calloc(a->null_length, sizeof(unsigned char));
+ nulls = calloc(a->null_length, sizeof(unsigned char));
if (nulls == NULL) {
free(a);
return (NULL);
@@ -132,12 +132,17 @@ archive_write_set_bytes_per_block(struct archive *_a, int bytes_per_block)
struct archive_write *a = (struct archive_write *)_a;
archive_check_magic(&a->archive, ARCHIVE_WRITE_MAGIC,
ARCHIVE_STATE_NEW, "archive_write_set_bytes_per_block");
+
+ if (bytes_per_block < 0) {
+ // Do nothing if the bytes_per_block is negative
+ return 0;
+ }
a->bytes_per_block = bytes_per_block;
return (ARCHIVE_OK);
}
/*
- * Get the current block size. -1 if it has never been set.
+ * Get the current block size.
*/
int
archive_write_get_bytes_per_block(struct archive *_a)
@@ -145,6 +150,10 @@ archive_write_get_bytes_per_block(struct archive *_a)
struct archive_write *a = (struct archive_write *)_a;
archive_check_magic(&a->archive, ARCHIVE_WRITE_MAGIC,
ARCHIVE_STATE_ANY, "archive_write_get_bytes_per_block");
+ if (a->bytes_per_block < 0) {
+ // Don't return a negative value
+ return 1;
+ }
return (a->bytes_per_block);
}
@@ -358,8 +367,8 @@ archive_write_client_open(struct archive_write_filter *f)
archive_write_get_bytes_in_last_block(f->archive);
buffer_size = f->bytes_per_block;
- state = (struct archive_none *)calloc(1, sizeof(*state));
- buffer = (char *)malloc(buffer_size);
+ state = calloc(1, sizeof(*state));
+ buffer = malloc(buffer_size);
if (state == NULL || buffer == NULL) {
free(state);
free(buffer);
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c b/contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c
index 084d195402bc..2c361bfb974e 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c
@@ -83,9 +83,9 @@ archive_write_add_filter_b64encode(struct archive *_a)
struct private_b64encode *state;
archive_check_magic(&a->archive, ARCHIVE_WRITE_MAGIC,
- ARCHIVE_STATE_NEW, "archive_write_add_filter_uu");
+ ARCHIVE_STATE_NEW, "archive_write_add_filter_b64encode");
- state = (struct private_b64encode *)calloc(1, sizeof(*state));
+ state = calloc(1, sizeof(*state));
if (state == NULL) {
archive_set_error(f->archive, ENOMEM,
"Can't allocate data for b64encode filter");
@@ -149,7 +149,7 @@ archive_filter_b64encode_open(struct archive_write_filter *f)
size_t bs = 65536, bpb;
if (f->archive->magic == ARCHIVE_WRITE_MAGIC) {
- /* Buffer size should be a multiple number of the of bytes
+ /* Buffer size should be a multiple number of the bytes
* per block for performance. */
bpb = archive_write_get_bytes_per_block(f->archive);
if (bpb > bs)
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c b/contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c
index 561e11b5d70a..0726f08936ec 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c
@@ -168,7 +168,7 @@ archive_compressor_bzip2_open(struct archive_write_filter *f)
if (data->compressed == NULL) {
size_t bs = 65536, bpb;
if (f->archive->magic == ARCHIVE_WRITE_MAGIC) {
- /* Buffer size should be a multiple number of the of bytes
+ /* Buffer size should be a multiple number of the bytes
* per block for performance. */
bpb = archive_write_get_bytes_per_block(f->archive);
if (bpb > bs)
@@ -177,8 +177,7 @@ archive_compressor_bzip2_open(struct archive_write_filter *f)
bs -= bs % bpb;
}
data->compressed_buffer_size = bs;
- data->compressed
- = (char *)malloc(data->compressed_buffer_size);
+ data->compressed = malloc(data->compressed_buffer_size);
if (data->compressed == NULL) {
archive_set_error(f->archive, ENOMEM,
"Can't allocate data for compression buffer");
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_compress.c b/contrib/libarchive/libarchive/archive_write_add_filter_compress.c
index 78afebda3e35..a54a85754293 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_compress.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_compress.c
@@ -150,7 +150,7 @@ archive_compressor_compress_open(struct archive_write_filter *f)
f->code = ARCHIVE_FILTER_COMPRESS;
f->name = "compress";
- state = (struct private_data *)calloc(1, sizeof(*state));
+ state = calloc(1, sizeof(*state));
if (state == NULL) {
archive_set_error(f->archive, ENOMEM,
"Can't allocate data for compression");
@@ -158,7 +158,7 @@ archive_compressor_compress_open(struct archive_write_filter *f)
}
if (f->archive->magic == ARCHIVE_WRITE_MAGIC) {
- /* Buffer size should be a multiple number of the of bytes
+ /* Buffer size should be a multiple number of the bytes
* per block for performance. */
bpb = archive_write_get_bytes_per_block(f->archive);
if (bpb > bs)
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_gzip.c b/contrib/libarchive/libarchive/archive_write_add_filter_gzip.c
index a7fabbfa6bd5..71d7891261a5 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_gzip.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_gzip.c
@@ -194,8 +194,7 @@ archive_compressor_gzip_open(struct archive_write_filter *f)
bs -= bs % bpb;
}
data->compressed_buffer_size = bs;
- data->compressed
- = (unsigned char *)malloc(data->compressed_buffer_size);
+ data->compressed = malloc(data->compressed_buffer_size);
if (data->compressed == NULL) {
archive_set_error(f->archive, ENOMEM,
"Can't allocate data for compression buffer");
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_uuencode.c b/contrib/libarchive/libarchive/archive_write_add_filter_uuencode.c
index 42dec8def1f1..50bfeb6eaa60 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_uuencode.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_uuencode.c
@@ -74,7 +74,7 @@ archive_write_add_filter_uuencode(struct archive *_a)
archive_check_magic(&a->archive, ARCHIVE_WRITE_MAGIC,
ARCHIVE_STATE_NEW, "archive_write_add_filter_uu");
- state = (struct private_uuencode *)calloc(1, sizeof(*state));
+ state = calloc(1, sizeof(*state));
if (state == NULL) {
archive_set_error(f->archive, ENOMEM,
"Can't allocate data for uuencode filter");
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_xz.c b/contrib/libarchive/libarchive/archive_write_add_filter_xz.c
index 18da08274d92..098f0c95570b 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_xz.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_xz.c
@@ -310,7 +310,7 @@ archive_compressor_xz_open(struct archive_write_filter *f)
if (data->compressed == NULL) {
size_t bs = 65536, bpb;
if (f->archive->magic == ARCHIVE_WRITE_MAGIC) {
- /* Buffer size should be a multiple number of the of bytes
+ /* Buffer size should be a multiple number of the bytes
* per block for performance. */
bpb = archive_write_get_bytes_per_block(f->archive);
if (bpb > bs)
@@ -319,8 +319,7 @@ archive_compressor_xz_open(struct archive_write_filter *f)
bs -= bs % bpb;
}
data->compressed_buffer_size = bs;
- data->compressed
- = (unsigned char *)malloc(data->compressed_buffer_size);
+ data->compressed = malloc(data->compressed_buffer_size);
if (data->compressed == NULL) {
archive_set_error(f->archive, ENOMEM,
"Can't allocate data for compression buffer");
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_zstd.c b/contrib/libarchive/libarchive/archive_write_add_filter_zstd.c
index 7ea3d18c9b76..c0a6e5a37a66 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_zstd.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_zstd.c
@@ -372,8 +372,7 @@ archive_compressor_zstd_open(struct archive_write_filter *f)
}
data->out.size = bs;
data->out.pos = 0;
- data->out.dst
- = (unsigned char *)malloc(data->out.size);
+ data->out.dst = malloc(data->out.size);
if (data->out.dst == NULL) {
archive_set_error(f->archive, ENOMEM,
"Can't allocate data for compression buffer");
diff --git a/contrib/libarchive/libarchive/archive_write_disk_posix.c b/contrib/libarchive/libarchive/archive_write_disk_posix.c
index d69c77ea0517..f69b802ffa62 100644
--- a/contrib/libarchive/libarchive/archive_write_disk_posix.c
+++ b/contrib/libarchive/libarchive/archive_write_disk_posix.c
@@ -1991,7 +1991,7 @@ archive_write_disk_new(void)
{
struct archive_write_disk *a;
- a = (struct archive_write_disk *)calloc(1, sizeof(*a));
+ a = calloc(1, sizeof(*a));
if (a == NULL)
return (NULL);
a->archive.magic = ARCHIVE_WRITE_DISK_MAGIC;
@@ -2758,7 +2758,7 @@ new_fixup(struct archive_write_disk *a, const char *pathname)
{
struct fixup_entry *fe;
- fe = (struct fixup_entry *)calloc(1, sizeof(struct fixup_entry));
+ fe = calloc(1, sizeof(struct fixup_entry));
if (fe == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate memory for a fixup");
@@ -4196,7 +4196,7 @@ copy_xattrs(struct archive_write_disk *a, int tmpfd, int dffd)
}
for (xattr_i = 0; xattr_i < xattr_size;
xattr_i += strlen(xattr_names + xattr_i) + 1) {
- char *xattr_val_saved;
+ char *p;
ssize_t s;
int f;
@@ -4207,15 +4207,14 @@ copy_xattrs(struct archive_write_disk *a, int tmpfd, int dffd)
ret = ARCHIVE_WARN;
goto exit_xattr;
}
- xattr_val_saved = xattr_val;
- xattr_val = realloc(xattr_val, s);
- if (xattr_val == NULL) {
+ p = realloc(xattr_val, s);
+ if (p == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Failed to get metadata(xattr)");
ret = ARCHIVE_WARN;
- free(xattr_val_saved);
goto exit_xattr;
}
+ xattr_val = p;
s = fgetxattr(tmpfd, xattr_names + xattr_i, xattr_val, s, 0, 0);
if (s == -1) {
archive_set_error(&a->archive, errno,
@@ -4361,8 +4360,7 @@ set_mac_metadata(struct archive_write_disk *a, const char *pathname,
* silly dance of writing the data to disk just so that
* copyfile() can read it back in again. */
archive_string_init(&tmp);
- archive_strcpy(&tmp, pathname);
- archive_strcat(&tmp, ".XXXXXX");
+ archive_strcpy(&tmp, "tar.mmd.XXXXXX");
fd = mkstemp(tmp.s);
if (fd < 0) {
diff --git a/contrib/libarchive/libarchive/archive_write_open_fd.c b/contrib/libarchive/libarchive/archive_write_open_fd.c
index a58ae047967b..8a3f68d0699d 100644
--- a/contrib/libarchive/libarchive/archive_write_open_fd.c
+++ b/contrib/libarchive/libarchive/archive_write_open_fd.c
@@ -62,7 +62,7 @@ archive_write_open_fd(struct archive *a, int fd)
{
struct write_fd_data *mine;
- mine = (struct write_fd_data *)malloc(sizeof(*mine));
+ mine = malloc(sizeof(*mine));
if (mine == NULL) {
archive_set_error(a, ENOMEM, "No memory");
return (ARCHIVE_FATAL);
diff --git a/contrib/libarchive/libarchive/archive_write_open_file.c b/contrib/libarchive/libarchive/archive_write_open_file.c
index d787da3af388..4c6ebfb2269d 100644
--- a/contrib/libarchive/libarchive/archive_write_open_file.c
+++ b/contrib/libarchive/libarchive/archive_write_open_file.c
@@ -59,7 +59,7 @@ archive_write_open_FILE(struct archive *a, FILE *f)
{
struct write_FILE_data *mine;
- mine = (struct write_FILE_data *)malloc(sizeof(*mine));
+ mine = malloc(sizeof(*mine));
if (mine == NULL) {
archive_set_error(a, ENOMEM, "No memory");
return (ARCHIVE_FATAL);
diff --git a/contrib/libarchive/libarchive/archive_write_open_filename.c b/contrib/libarchive/libarchive/archive_write_open_filename.c
index 7dc73d55f43e..6842b98d2f07 100644
--- a/contrib/libarchive/libarchive/archive_write_open_filename.c
+++ b/contrib/libarchive/libarchive/archive_write_open_filename.c
@@ -98,7 +98,7 @@ open_filename(struct archive *a, int mbs_fn, const void *filename)
struct write_file_data *mine;
int r;
- mine = (struct write_file_data *)calloc(1, sizeof(*mine));
+ mine = calloc(1, sizeof(*mine));
if (mine == NULL) {
archive_set_error(a, ENOMEM, "No memory");
return (ARCHIVE_FATAL);
diff --git a/contrib/libarchive/libarchive/archive_write_open_memory.c b/contrib/libarchive/libarchive/archive_write_open_memory.c
index 609cc47d964a..e31650447279 100644
--- a/contrib/libarchive/libarchive/archive_write_open_memory.c
+++ b/contrib/libarchive/libarchive/archive_write_open_memory.c
@@ -52,7 +52,7 @@ archive_write_open_memory(struct archive *a, void *buff, size_t buffSize, size_t
{
struct write_memory_data *mine;
- mine = (struct write_memory_data *)calloc(1, sizeof(*mine));
+ mine = calloc(1, sizeof(*mine));
if (mine == NULL) {
archive_set_error(a, ENOMEM, "No memory");
return (ARCHIVE_FATAL);
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_7zip.c b/contrib/libarchive/libarchive/archive_write_set_format_7zip.c
index f7d8890ba3bf..8b6f6215ec30 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_7zip.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_7zip.c
@@ -521,7 +521,7 @@ _7z_write_header(struct archive_write *a, struct archive_entry *entry)
*/
if (archive_entry_filetype(entry) == AE_IFLNK) {
ssize_t bytes;
- const void *p = (const void *)archive_entry_symlink(entry);
+ const void *p = (const void *)archive_entry_symlink_utf8(entry);
bytes = compress_out(a, p, (size_t)file->size, ARCHIVE_Z_RUN);
if (bytes < 0)
return ((int)bytes);
@@ -1563,8 +1563,18 @@ file_new(struct archive_write *a, struct archive_entry *entry,
archive_entry_set_size(entry, 0);
if (archive_entry_filetype(entry) == AE_IFDIR)
file->dir = 1;
- else if (archive_entry_filetype(entry) == AE_IFLNK)
- file->size = strlen(archive_entry_symlink(entry));
+ else if (archive_entry_filetype(entry) == AE_IFLNK) {
+ const char* linkpath;
+ linkpath = archive_entry_symlink_utf8(entry);
+ if (linkpath == NULL) {
+ free(file);
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "symlink path could not be converted to UTF-8");
+ return (ARCHIVE_FAILED);
+ }
+ else
+ file->size = strlen(linkpath);
+ }
if (archive_entry_mtime_is_set(entry)) {
file->flg |= MTIME_IS_SET;
file->times[MTIME].time = archive_entry_mtime(entry);
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_ar.c b/contrib/libarchive/libarchive/archive_write_set_format_ar.c
index 38689d89be0e..e5e9c806b639 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_ar.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_ar.c
@@ -126,7 +126,7 @@ archive_write_set_format_ar(struct archive_write *a)
if (a->format_free != NULL)
(a->format_free)(a);
- ar = (struct ar_w *)calloc(1, sizeof(*ar));
+ ar = calloc(1, sizeof(*ar));
if (ar == NULL) {
archive_set_error(&a->archive, ENOMEM, "Can't allocate ar data");
return (ARCHIVE_FATAL);
@@ -246,7 +246,7 @@ archive_write_ar_header(struct archive_write *a, struct archive_entry *entry)
return (ARCHIVE_WARN);
}
- se = (char *)malloc(strlen(filename) + 3);
+ se = malloc(strlen(filename) + 3);
if (se == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate filename buffer");
@@ -379,7 +379,7 @@ archive_write_ar_data(struct archive_write *a, const void *buff, size_t s)
return (ARCHIVE_WARN);
}
- ar->strtab = (char *)malloc(s + 1);
+ ar->strtab = malloc(s + 1);
if (ar->strtab == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate strtab buffer");
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_cpio_binary.c b/contrib/libarchive/libarchive/archive_write_set_format_cpio_binary.c
index 7a010ee00f22..aefb2ca6f514 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_cpio_binary.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_cpio_binary.c
@@ -185,7 +185,7 @@ archive_write_set_format_cpio_binary(struct archive *_a, int format)
if (a->format_free != NULL)
(a->format_free)(a);
- cpio = (struct cpio *)calloc(1, sizeof(*cpio));
+ cpio = calloc(1, sizeof(*cpio));
if (cpio == NULL) {
archive_set_error(&a->archive, ENOMEM, "Can't allocate cpio data");
return (ARCHIVE_FATAL);
@@ -577,6 +577,9 @@ archive_write_binary_close(struct archive_write *a)
struct archive_entry *trailer;
trailer = archive_entry_new2(NULL);
+ if (trailer == NULL) {
+ return ARCHIVE_FATAL;
+ }
/* nlink = 1 here for GNU cpio compat. */
archive_entry_set_nlink(trailer, 1);
archive_entry_set_size(trailer, 0);
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_cpio_newc.c b/contrib/libarchive/libarchive/archive_write_set_format_cpio_newc.c
index 006736a1fa22..254d5a9901c3 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_cpio_newc.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_cpio_newc.c
@@ -116,7 +116,7 @@ archive_write_set_format_cpio_newc(struct archive *_a)
if (a->format_free != NULL)
(a->format_free)(a);
- cpio = (struct cpio *)calloc(1, sizeof(*cpio));
+ cpio = calloc(1, sizeof(*cpio));
if (cpio == NULL) {
archive_set_error(&a->archive, ENOMEM, "Can't allocate cpio data");
return (ARCHIVE_FATAL);
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_cpio_odc.c b/contrib/libarchive/libarchive/archive_write_set_format_cpio_odc.c
index 426f779a2b0b..c72c6b2796bf 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_cpio_odc.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_cpio_odc.c
@@ -110,7 +110,7 @@ archive_write_set_format_cpio_odc(struct archive *_a)
if (a->format_free != NULL)
(a->format_free)(a);
- cpio = (struct cpio *)calloc(1, sizeof(*cpio));
+ cpio = calloc(1, sizeof(*cpio));
if (cpio == NULL) {
archive_set_error(&a->archive, ENOMEM, "Can't allocate cpio data");
return (ARCHIVE_FATAL);
@@ -467,6 +467,9 @@ archive_write_odc_close(struct archive_write *a)
struct archive_entry *trailer;
trailer = archive_entry_new2(NULL);
+ if (trailer == NULL) {
+ return ARCHIVE_FATAL;
+ }
/* nlink = 1 here for GNU cpio compat. */
archive_entry_set_nlink(trailer, 1);
archive_entry_set_size(trailer, 0);
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c b/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c
index a88350b87411..04b190de4402 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c
@@ -174,7 +174,7 @@ archive_write_set_format_gnutar(struct archive *_a)
struct archive_write *a = (struct archive_write *)_a;
struct gnutar *gnutar;
- gnutar = (struct gnutar *)calloc(1, sizeof(*gnutar));
+ gnutar = calloc(1, sizeof(*gnutar));
if (gnutar == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate gnutar data");
@@ -296,7 +296,7 @@ archive_write_gnutar_header(struct archive_write *a,
/* Only regular files (not hardlinks) have data. */
if (archive_entry_hardlink(entry) != NULL ||
archive_entry_symlink(entry) != NULL ||
- !(archive_entry_filetype(entry) == AE_IFREG))
+ archive_entry_filetype(entry) != AE_IFREG)
archive_entry_set_size(entry, 0);
if (AE_IFDIR == archive_entry_filetype(entry)) {
@@ -523,7 +523,7 @@ archive_write_gnutar_header(struct archive_write *a,
goto exit_write_header;
}
- if (archive_entry_hardlink(entry) != NULL) {
+ if (archive_entry_hardlink_is_set(entry)) {
tartype = '1';
} else
switch (archive_entry_filetype(entry)) {
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c b/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c
index 2a3ae07fa2b2..a77ea7708b4b 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c
@@ -2237,7 +2237,7 @@ set_str_utf16be(struct archive_write *a, unsigned char *p, const char *s,
int onepad;
if (s == NULL)
- s = "";
+ s = "\0\0";
if (l & 0x01) {
onepad = 1;
l &= ~1;
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_pax.c b/contrib/libarchive/libarchive/archive_write_set_format_pax.c
index e93333074a6a..6e35f705e136 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_pax.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_pax.c
@@ -138,7 +138,7 @@ archive_write_set_format_pax(struct archive *_a)
if (a->format_free != NULL)
(a->format_free)(a);
- pax = (struct pax *)calloc(1, sizeof(*pax));
+ pax = calloc(1, sizeof(*pax));
if (pax == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate pax data");
@@ -608,7 +608,15 @@ archive_write_pax_header(struct archive_write *a,
const time_t ustar_max_mtime = get_ustar_max_mtime();
/* Sanity check. */
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ /* NOTE: If the caller supplied a pathname that fails WCS conversion (e.g.
+ * if it is invalid UTF-8), we are expected to return ARCHIVE_WARN later on
+ * in execution, hence the check for both pointers */
+ if ((archive_entry_pathname_w(entry_original) == NULL) &&
+ (archive_entry_pathname(entry_original) == NULL)) {
+#else
if (archive_entry_pathname(entry_original) == NULL) {
+#endif
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Can't record entry in tar file without pathname");
return (ARCHIVE_FAILED);
@@ -1032,6 +1040,14 @@ archive_write_pax_header(struct archive_write *a,
archive_entry_set_symlink(entry_main,
"././@LongSymLink");
}
+ else {
+ /* Otherwise, has non-ASCII characters; update the paths to
+ * however they got decoded above */
+ if (hardlink != NULL)
+ archive_entry_set_hardlink(entry_main, linkpath);
+ else
+ archive_entry_set_symlink(entry_main, linkpath);
+ }
need_extension = 1;
}
}
@@ -1928,7 +1944,7 @@ url_encode(const char *in)
}
}
- out = (char *)malloc(out_len + 1);
+ out = malloc(out_len + 1);
if (out == NULL)
return (NULL);
@@ -1966,7 +1982,7 @@ base64_encode(const char *s, size_t len)
char *d, *out;
/* 3 bytes becomes 4 chars, but round up and allow for trailing NUL */
- out = (char *)malloc((len * 4 + 2) / 3 + 1);
+ out = malloc((len * 4 + 2) / 3 + 1);
if (out == NULL)
return (NULL);
d = out;
@@ -2021,7 +2037,7 @@ _sparse_list_add_block(struct pax *pax, int64_t offset, int64_t length,
{
struct sparse_block *sb;
- sb = (struct sparse_block *)malloc(sizeof(*sb));
+ sb = malloc(sizeof(*sb));
if (sb == NULL)
return (ARCHIVE_FATAL);
sb->next = NULL;
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_raw.c b/contrib/libarchive/libarchive/archive_write_set_format_raw.c
index feff93697736..ff3e9ae0ebdb 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_raw.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_raw.c
@@ -58,7 +58,7 @@ archive_write_set_format_raw(struct archive *_a)
if (a->format_free != NULL)
(a->format_free)(a);
- raw = (struct raw *)calloc(1, sizeof(*raw));
+ raw = calloc(1, sizeof(*raw));
if (raw == NULL) {
archive_set_error(&a->archive, ENOMEM, "Can't allocate raw data");
return (ARCHIVE_FATAL);
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_shar.c b/contrib/libarchive/libarchive/archive_write_set_format_shar.c
index 52ea6adc2264..be9f78ce96cd 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_shar.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_shar.c
@@ -113,7 +113,7 @@ archive_write_set_format_shar(struct archive *_a)
if (a->format_free != NULL)
(a->format_free)(a);
- shar = (struct shar *)calloc(1, sizeof(*shar));
+ shar = calloc(1, sizeof(*shar));
if (shar == NULL) {
archive_set_error(&a->archive, ENOMEM, "Can't allocate shar data");
return (ARCHIVE_FATAL);
@@ -209,6 +209,10 @@ archive_write_shar_header(struct archive_write *a, struct archive_entry *entry)
if (archive_entry_filetype(entry) != AE_IFDIR) {
/* Try to create the dir. */
p = strdup(name);
+ if (p == NULL) {
+ archive_set_error(&a->archive, ENOMEM, "Out of memory");
+ return (ARCHIVE_FATAL);
+ }
pp = strrchr(p, '/');
/* If there is a / character, try to create the dir. */
if (pp != NULL) {
@@ -291,6 +295,10 @@ archive_write_shar_header(struct archive_write *a, struct archive_entry *entry)
free(shar->last_dir);
shar->last_dir = strdup(name);
+ if (shar->last_dir == NULL) {
+ archive_set_error(&a->archive, ENOMEM, "Out of memory");
+ return (ARCHIVE_FATAL);
+ }
/* Trim a trailing '/'. */
pp = strrchr(shar->last_dir, '/');
if (pp != NULL && pp[1] == '\0')
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_ustar.c b/contrib/libarchive/libarchive/archive_write_set_format_ustar.c
index 673487b27fe3..09b71fe6672a 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_ustar.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_ustar.c
@@ -183,7 +183,7 @@ archive_write_set_format_ustar(struct archive *_a)
return (ARCHIVE_FATAL);
}
- ustar = (struct ustar *)calloc(1, sizeof(*ustar));
+ ustar = calloc(1, sizeof(*ustar));
if (ustar == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate ustar data");
@@ -254,7 +254,11 @@ archive_write_ustar_header(struct archive_write *a, struct archive_entry *entry)
sconv = ustar->opt_sconv;
/* Sanity check. */
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ if (archive_entry_pathname_w(entry) == NULL) {
+#else
if (archive_entry_pathname(entry) == NULL) {
+#endif
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Can't record entry in tar file without pathname");
return (ARCHIVE_FAILED);
@@ -263,7 +267,7 @@ archive_write_ustar_header(struct archive_write *a, struct archive_entry *entry)
/* Only regular files (not hardlinks) have data. */
if (archive_entry_hardlink(entry) != NULL ||
archive_entry_symlink(entry) != NULL ||
- !(archive_entry_filetype(entry) == AE_IFREG))
+ archive_entry_filetype(entry) != AE_IFREG)
archive_entry_set_size(entry, 0);
if (AE_IFDIR == archive_entry_filetype(entry)) {
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_v7tar.c b/contrib/libarchive/libarchive/archive_write_set_format_v7tar.c
index e3724a096da7..2598fc076c0c 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_v7tar.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_v7tar.c
@@ -160,7 +160,7 @@ archive_write_set_format_v7tar(struct archive *_a)
return (ARCHIVE_FATAL);
}
- v7tar = (struct v7tar *)calloc(1, sizeof(*v7tar));
+ v7tar = calloc(1, sizeof(*v7tar));
if (v7tar == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate v7tar data");
@@ -241,7 +241,7 @@ archive_write_v7tar_header(struct archive_write *a, struct archive_entry *entry)
/* Only regular files (not hardlinks) have data. */
if (archive_entry_hardlink(entry) != NULL ||
archive_entry_symlink(entry) != NULL ||
- !(archive_entry_filetype(entry) == AE_IFREG))
+ archive_entry_filetype(entry) != AE_IFREG)
archive_entry_set_size(entry, 0);
if (AE_IFDIR == archive_entry_filetype(entry)) {
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_xar.c b/contrib/libarchive/libarchive/archive_write_set_format_xar.c
index 2cf655da186a..96ef85c69487 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_xar.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_xar.c
@@ -796,7 +796,7 @@ xar_finish_entry(struct archive_write *a)
if (w > 0)
xar->bytes_remaining -= w;
else
- return (w);
+ return ((int)w);
}
file = xar->cur_file;
checksum_final(&(xar->e_sumwrk), &(file->data.e_sum));
@@ -1163,7 +1163,7 @@ make_file_entry(struct archive_write *a, xmlTextWriterPtr writer,
/*
* Make a file name entry, "<name>".
*/
- l = ll = archive_strlen(&(file->basename));
+ l = ll = (int)archive_strlen(&(file->basename));
tmp = malloc(l);
if (tmp == NULL) {
archive_set_error(&a->archive, ENOMEM,
@@ -1189,7 +1189,7 @@ make_file_entry(struct archive_write *a, xmlTextWriterPtr writer,
return (ARCHIVE_FATAL);
}
r = xmlTextWriterWriteBase64(writer, file->basename.s,
- 0, archive_strlen(&(file->basename)));
+ 0, (int)archive_strlen(&(file->basename)));
if (r < 0) {
archive_set_error(&a->archive,
ARCHIVE_ERRNO_MISC,
@@ -2231,10 +2231,10 @@ get_path_component(char *name, int n, const char *fn)
p = strchr(fn, '/');
if (p == NULL) {
- if ((l = strlen(fn)) == 0)
+ if ((l = (int)strlen(fn)) == 0)
return (0);
} else
- l = p - fn;
+ l = (int)(p - fn);
if (l > n -1)
return (-1);
memcpy(name, fn, l);
@@ -2651,10 +2651,10 @@ compression_init_encoder_gzip(struct archive *a,
* of ugly hackery to convert a const * pointer to
* a non-const pointer. */
strm->next_in = (Bytef *)(uintptr_t)(const void *)lastrm->next_in;
- strm->avail_in = lastrm->avail_in;
+ strm->avail_in = (uInt)lastrm->avail_in;
strm->total_in = (uLong)lastrm->total_in;
strm->next_out = lastrm->next_out;
- strm->avail_out = lastrm->avail_out;
+ strm->avail_out = (uInt)lastrm->avail_out;
strm->total_out = (uLong)lastrm->total_out;
if (deflateInit2(strm, level, Z_DEFLATED,
(withheader)?15:-15,
@@ -2684,10 +2684,10 @@ compression_code_gzip(struct archive *a,
* of ugly hackery to convert a const * pointer to
* a non-const pointer. */
strm->next_in = (Bytef *)(uintptr_t)(const void *)lastrm->next_in;
- strm->avail_in = lastrm->avail_in;
+ strm->avail_in = (uInt)lastrm->avail_in;
strm->total_in = (uLong)lastrm->total_in;
strm->next_out = lastrm->next_out;
- strm->avail_out = lastrm->avail_out;
+ strm->avail_out = (uInt)lastrm->avail_out;
strm->total_out = (uLong)lastrm->total_out;
r = deflate(strm,
(action == ARCHIVE_Z_FINISH)? Z_FINISH: Z_NO_FLUSH);
@@ -2748,11 +2748,11 @@ compression_init_encoder_bzip2(struct archive *a,
* of ugly hackery to convert a const * pointer to
* a non-const pointer. */
strm->next_in = (char *)(uintptr_t)(const void *)lastrm->next_in;
- strm->avail_in = lastrm->avail_in;
+ strm->avail_in = (unsigned int)lastrm->avail_in;
strm->total_in_lo32 = (uint32_t)(lastrm->total_in & 0xffffffff);
strm->total_in_hi32 = (uint32_t)(lastrm->total_in >> 32);
strm->next_out = (char *)lastrm->next_out;
- strm->avail_out = lastrm->avail_out;
+ strm->avail_out = (unsigned int)lastrm->avail_out;
strm->total_out_lo32 = (uint32_t)(lastrm->total_out & 0xffffffff);
strm->total_out_hi32 = (uint32_t)(lastrm->total_out >> 32);
if (BZ2_bzCompressInit(strm, level, 0, 30) != BZ_OK) {
@@ -2781,11 +2781,11 @@ compression_code_bzip2(struct archive *a,
* of ugly hackery to convert a const * pointer to
* a non-const pointer. */
strm->next_in = (char *)(uintptr_t)(const void *)lastrm->next_in;
- strm->avail_in = lastrm->avail_in;
+ strm->avail_in = (unsigned int)lastrm->avail_in;
strm->total_in_lo32 = (uint32_t)(lastrm->total_in & 0xffffffff);
strm->total_in_hi32 = (uint32_t)(lastrm->total_in >> 32);
strm->next_out = (char *)lastrm->next_out;
- strm->avail_out = lastrm->avail_out;
+ strm->avail_out = (unsigned int)lastrm->avail_out;
strm->total_out_lo32 = (uint32_t)(lastrm->total_out & 0xffffffff);
strm->total_out_hi32 = (uint32_t)(lastrm->total_out >> 32);
r = BZ2_bzCompress(strm,
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_zip.c b/contrib/libarchive/libarchive/archive_write_set_format_zip.c
index e37e7b5edda1..a9f2877305e8 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_zip.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_zip.c
@@ -456,7 +456,7 @@ archive_write_set_format_zip(struct archive *_a)
if (a->format_free != NULL)
(a->format_free)(a);
- zip = (struct zip *) calloc(1, sizeof(*zip));
+ zip = calloc(1, sizeof(*zip));
if (zip == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate zip data");
@@ -609,7 +609,7 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
const char *p;
size_t len;
- if (archive_entry_pathname_l(entry, &p, &len, sconv) != 0) {
+ if (archive_entry_pathname_l(zip->entry, &p, &len, sconv) != 0) {
if (errno == ENOMEM) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate memory for Pathname");
@@ -618,7 +618,7 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
archive_set_error(&a->archive,
ARCHIVE_ERRNO_FILE_FORMAT,
"Can't translate Pathname '%s' to %s",
- archive_entry_pathname(entry),
+ archive_entry_pathname(zip->entry),
archive_string_conversion_charset_name(sconv));
ret2 = ARCHIVE_WARN;
}
@@ -631,7 +631,7 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
* for filename.
*/
if (type == AE_IFLNK) {
- if (archive_entry_symlink_l(entry, &p, &len, sconv)) {
+ if (archive_entry_symlink_l(zip->entry, &p, &len, sconv)) {
if (errno == ENOMEM) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate memory "
@@ -906,7 +906,7 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
archive_le32enc(e, (uint32_t)archive_entry_ctime(entry));
e += 4;
}
- archive_le16enc(ut + 2, e - ut - 4);
+ archive_le16enc(ut + 2, (uint16_t)(e - ut - 4));
}
/*
diff --git a/contrib/libarchive/libarchive/test/test_7zip_filename_encoding.c b/contrib/libarchive/libarchive/test/test_7zip_filename_encoding.c
new file mode 100644
index 000000000000..cf562d39fda7
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_7zip_filename_encoding.c
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2003-2018
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer
+ * in this position and unchanged.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "test.h"
+
+DEFINE_TEST(test_7zip_filename_encoding_UTF16_win)
+{
+#if !defined(_WIN32) || defined(__CYGWIN__)
+ skipping("This test is meant to verify unicode string handling"
+ " on Windows with UTF-16 names");
+ return;
+#else
+ struct archive *a;
+ struct archive_entry *entry;
+ char buff[4096];
+ size_t used;
+
+ /*
+ * Don't call setlocale because we're verifying that the '_w' functions
+ * work as expected
+ */
+
+ a = archive_write_new();
+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_7zip(a));
+ assertEqualInt(ARCHIVE_OK,
+ archive_write_open_memory(a, buff, sizeof(buff), &used));
+
+ /* Part 1: file */
+ entry = archive_entry_new2(a);
+ archive_entry_copy_pathname_w(entry, L"\u8868.txt");
+ archive_entry_set_filetype(entry, AE_IFREG);
+ archive_entry_set_size(entry, 0);
+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry));
+
+ /* Part 2: directory */
+ archive_entry_clear(entry);
+ archive_entry_copy_pathname_w(entry, L"\u8868");
+ archive_entry_set_filetype(entry, AE_IFDIR);
+ archive_entry_set_size(entry, 0);
+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry));
+
+ /* Part 3: symlink */
+ archive_entry_clear(entry);
+ archive_entry_set_pathname(entry, "link.txt");
+ archive_entry_copy_symlink_w(entry, L"\u8868.txt");
+ archive_entry_set_filetype(entry, AE_IFLNK);
+ archive_entry_set_symlink_type(entry, AE_SYMLINK_TYPE_FILE);
+ archive_entry_set_size(entry, 0);
+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry));
+
+ /* NOTE: 7zip does not support hardlinks */
+
+ archive_entry_free(entry);
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /* Ensure that the archive contents can be read properly */
+ /* NOTE: 7zip file contents are not in the order we wrote them! */
+ a = archive_read_new();
+ archive_read_support_format_all(a);
+ archive_read_support_filter_all(a);
+ assertEqualIntA(a, ARCHIVE_OK, read_open_memory_seek(a, buff, used, 7));
+
+ /* Read part 3: symlink */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &entry));
+ assertEqualWString(L"\u8868.txt", archive_entry_symlink_w(entry));
+
+ /* Read part 1: file */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &entry));
+ assertEqualWString(L"\u8868.txt", archive_entry_pathname_w(entry));
+
+ /* Read part 2: directory */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &entry));
+ /* NOTE: Trailing slash added automatically for us */
+ assertEqualWString(L"\u8868/", archive_entry_pathname_w(entry));
+
+ archive_read_free(a);
+#endif
+} \ No newline at end of file
diff --git a/contrib/libarchive/libarchive/test/test_ar_mode.c b/contrib/libarchive/libarchive/test/test_ar_mode.c
new file mode 100644
index 000000000000..4f9feb1210d2
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_ar_mode.c
@@ -0,0 +1,40 @@
+/*-SPDX-License-Identifier: BSD-2-Clause
+ * Copyright (C) 2024 by наб <nabijaczleweli@nabijaczleweli.xyz>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "test.h"
+
+static const char data[] = "!<arch>\narchivemount.1/ 0 0 0 644 0 `\n";
+
+
+DEFINE_TEST(test_ar_mode)
+{
+ struct archive * ar = archive_read_new();
+ assertEqualInt(archive_read_support_format_all(ar), ARCHIVE_OK);
+ assertEqualInt(archive_read_open_memory(ar, data, sizeof(data) - 1), ARCHIVE_OK);
+
+ struct archive_entry * entry;
+ assertEqualIntA(ar, archive_read_next_header(ar, &entry), ARCHIVE_OK);
+ assertEqualIntA(ar, archive_entry_mode(entry), S_IFREG | 0644);
+
+ archive_read_free(ar);
+}
diff --git a/contrib/libarchive/libarchive/test/test_archive_match_time.c b/contrib/libarchive/libarchive/test/test_archive_match_time.c
index 25a0623a7e5a..27ad1da2f139 100644
--- a/contrib/libarchive/libarchive/test/test_archive_match_time.c
+++ b/contrib/libarchive/libarchive/test/test_archive_match_time.c
@@ -316,15 +316,14 @@ test_newer_mtime_than_file_mbs(void)
static void
test_newer_ctime_than_file_mbs(void)
{
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ skipping("Can't set ctime on Windows");
+ return;
+#else
struct archive *a;
struct archive_entry *ae;
struct archive *m;
-#if defined(_WIN32) && !defined(__CYGWIN__)
- skipping("Can't set ctime on Windows");
- return;
-#endif
-
if (!assert((m = archive_match_new()) != NULL))
return;
if (!assert((ae = archive_entry_new()) != NULL)) {
@@ -373,6 +372,7 @@ test_newer_ctime_than_file_mbs(void)
archive_read_free(a);
archive_entry_free(ae);
archive_match_free(m);
+#endif
}
static void
@@ -435,15 +435,14 @@ test_newer_mtime_than_file_wcs(void)
static void
test_newer_ctime_than_file_wcs(void)
{
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ skipping("Can't set ctime on Windows");
+ return;
+#else
struct archive *a;
struct archive_entry *ae;
struct archive *m;
-#if defined(_WIN32) && !defined(__CYGWIN__)
- skipping("Can't set ctime on Windows");
- return;
-#endif
-
if (!assert((m = archive_match_new()) != NULL))
return;
if (!assert((ae = archive_entry_new()) != NULL)) {
@@ -493,6 +492,7 @@ test_newer_ctime_than_file_wcs(void)
archive_read_free(a);
archive_entry_free(ae);
archive_match_free(m);
+#endif
}
static void
@@ -787,15 +787,14 @@ test_older_mtime_than_file_mbs(void)
static void
test_older_ctime_than_file_mbs(void)
{
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ skipping("Can't set ctime on Windows");
+ return;
+#else
struct archive *a;
struct archive_entry *ae;
struct archive *m;
-#if defined(_WIN32) && !defined(__CYGWIN__)
- skipping("Can't set ctime on Windows");
- return;
-#endif
-
if (!assert((m = archive_match_new()) != NULL))
return;
if (!assert((ae = archive_entry_new()) != NULL)) {
@@ -845,6 +844,7 @@ test_older_ctime_than_file_mbs(void)
archive_read_free(a);
archive_entry_free(ae);
archive_match_free(m);
+#endif
}
static void
@@ -907,15 +907,14 @@ test_older_mtime_than_file_wcs(void)
static void
test_older_ctime_than_file_wcs(void)
{
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ skipping("Can't set ctime on Windows");
+ return;
+#else
struct archive *a;
struct archive_entry *ae;
struct archive *m;
-#if defined(_WIN32) && !defined(__CYGWIN__)
- skipping("Can't set ctime on Windows");
- return;
-#endif
-
if (!assert((m = archive_match_new()) != NULL))
return;
if (!assert((ae = archive_entry_new()) != NULL)) {
@@ -965,6 +964,7 @@ test_older_ctime_than_file_wcs(void)
archive_read_free(a);
archive_entry_free(ae);
archive_match_free(m);
+#endif
}
static void
@@ -1088,15 +1088,14 @@ test_mtime_between_files_wcs(void)
static void
test_ctime_between_files_mbs(void)
{
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ skipping("Can't set ctime on Windows");
+ return;
+#else
struct archive *a;
struct archive_entry *ae;
struct archive *m;
-#if defined(_WIN32) && !defined(__CYGWIN__)
- skipping("Can't set ctime on Windows");
- return;
-#endif
-
if (!assert((m = archive_match_new()) != NULL))
return;
if (!assert((ae = archive_entry_new()) != NULL)) {
@@ -1147,20 +1146,20 @@ test_ctime_between_files_mbs(void)
archive_read_free(a);
archive_entry_free(ae);
archive_match_free(m);
+#endif
}
static void
test_ctime_between_files_wcs(void)
{
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ skipping("Can't set ctime on Windows");
+ return;
+#else
struct archive *a;
struct archive_entry *ae;
struct archive *m;
-#if defined(_WIN32) && !defined(__CYGWIN__)
- skipping("Can't set ctime on Windows");
- return;
-#endif
-
if (!assert((m = archive_match_new()) != NULL))
return;
if (!assert((ae = archive_entry_new()) != NULL)) {
@@ -1211,6 +1210,7 @@ test_ctime_between_files_wcs(void)
archive_read_free(a);
archive_entry_free(ae);
archive_match_free(m);
+#endif
}
static void
diff --git a/contrib/libarchive/libarchive/test/test_archive_read.c b/contrib/libarchive/libarchive/test/test_archive_read.c
new file mode 100644
index 000000000000..583e5166a0be
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_archive_read.c
@@ -0,0 +1,63 @@
+/*-
+ * Copyright (c) 2024 Tobias Stoeckmann
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "test.h"
+
+#define __LIBARCHIVE_TEST
+#include "archive_read_private.h"
+
+static char buf[1024];
+
+DEFINE_TEST(test_archive_read_ahead_eof)
+{
+ struct archive *a;
+ struct archive_read *ar;
+ ssize_t avail;
+
+ /* prepare a reader of raw in-memory data */
+ assert((a = archive_read_new()) != NULL);
+ ar = (struct archive_read *)a;
+
+ assertA(0 == archive_read_support_format_raw(a));
+ assertA(0 == archive_read_open_memory(a, buf, sizeof(buf)));
+
+ /* perform a read which can be fulfilled */
+ assert(NULL != __archive_read_ahead(ar, sizeof(buf) - 1, &avail));
+ assertEqualInt(sizeof(buf), avail);
+
+ /* perform a read which cannot be fulfilled due to EOF */
+ assert(NULL == __archive_read_ahead(ar, sizeof(buf) + 1, &avail));
+ assertEqualInt(sizeof(buf), avail);
+
+ /* perform the same read again */
+ assert(NULL == __archive_read_ahead(ar, sizeof(buf) + 1, &avail));
+ assertEqualInt(sizeof(buf), avail);
+
+ /* perform another read which can be fulfilled */
+ assert(NULL != __archive_read_ahead(ar, sizeof(buf), &avail));
+ assertEqualInt(sizeof(buf), avail);
+
+ assert(0 == archive_read_free(a));
+}
diff --git a/contrib/libarchive/libarchive/test/test_archive_read_multiple_data_objects.c b/contrib/libarchive/libarchive/test/test_archive_read_multiple_data_objects.c
index f5adb5b7b567..f9f75d96fa6b 100644
--- a/contrib/libarchive/libarchive/test/test_archive_read_multiple_data_objects.c
+++ b/contrib/libarchive/libarchive/test/test_archive_read_multiple_data_objects.c
@@ -184,7 +184,7 @@ file_open(struct archive *a, void *data)
mydata->fd = open(mydata->filename, O_RDONLY | O_BINARY);
if (mydata->fd >= 0)
{
- if ((mydata->buffer = (void*)calloc(BLOCK_SIZE, 1)) == NULL)
+ if ((mydata->buffer = calloc(BLOCK_SIZE, 1)) == NULL)
return (ARCHIVE_FAILED);
}
}
@@ -280,28 +280,21 @@ test_customized_multiple_data_objects(void)
for (i = 0; filename != NULL;)
{
- assert((mydata = (struct mydata *)calloc(1, sizeof(*mydata))) != NULL);
+ assert((mydata = calloc(1, sizeof(*mydata))) != NULL);
if (mydata == NULL) {
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
return;
}
- assert((mydata->filename =
- (char *)calloc(strlen(filename) + 1, sizeof(char))) != NULL);
- if (mydata->filename == NULL) {
- free(mydata);
- assertEqualInt(ARCHIVE_OK, archive_read_free(a));
- return;
- }
- strcpy(mydata->filename, filename);
+ assert((mydata->filename = strdup(filename)) != NULL);
mydata->fd = -1;
filename = reffiles[++i];
assertA(0 == archive_read_append_callback_data(a, mydata));
}
- assertA(0 == archive_read_set_open_callback(a, file_open));
- assertA(0 == archive_read_set_read_callback(a, file_read));
- assertA(0 == archive_read_set_skip_callback(a, file_skip));
- assertA(0 == archive_read_set_close_callback(a, file_close));
- assertA(0 == archive_read_set_switch_callback(a, file_switch));
+ assertA(0 == archive_read_set_open_callback(a, file_open));
+ assertA(0 == archive_read_set_read_callback(a, file_read));
+ assertA(0 == archive_read_set_skip_callback(a, file_skip));
+ assertA(0 == archive_read_set_close_callback(a, file_close));
+ assertA(0 == archive_read_set_switch_callback(a, file_switch));
assertA(0 == archive_read_set_seek_callback(a, file_seek));
assertA(0 == archive_read_open1(a));
diff --git a/contrib/libarchive/libarchive/test/test_archive_string.c b/contrib/libarchive/libarchive/test/test_archive_string.c
index f8f1e337bf73..30f7a800eae8 100644
--- a/contrib/libarchive/libarchive/test/test_archive_string.c
+++ b/contrib/libarchive/libarchive/test/test_archive_string.c
@@ -405,7 +405,7 @@ DEFINE_TEST(test_archive_string_sort)
srand((unsigned int)time(NULL));
size = sizeof(strings) / sizeof(char *);
- assert((test_strings = (char **)calloc(size, sizeof(char *))) != NULL);
+ assert((test_strings = calloc(size, sizeof(char *))) != NULL);
for (i = 0; i < (size - 1); i++)
assert((test_strings[i] = strdup(strings[i])) != NULL);
diff --git a/contrib/libarchive/libarchive/test/test_archive_string_conversion.c b/contrib/libarchive/libarchive/test/test_archive_string_conversion.c
index d8c75888a4b3..67e9b762aa58 100644
--- a/contrib/libarchive/libarchive/test/test_archive_string_conversion.c
+++ b/contrib/libarchive/libarchive/test/test_archive_string_conversion.c
@@ -882,3 +882,138 @@ DEFINE_TEST(test_archive_string_conversion)
test_archive_string_canonicalization();
test_archive_string_set_get();
}
+
+DEFINE_TEST(test_archive_string_conversion_utf16_utf8)
+{
+#if !defined(_WIN32) || defined(__CYGWIN__)
+ skipping("This test is meant to verify unicode string handling on Windows");
+#else
+ struct archive_mstring mstr;
+ const char* utf8_string;
+
+ memset(&mstr, 0, sizeof(mstr));
+
+ assertEqualInt(ARCHIVE_OK,
+ archive_mstring_copy_wcs(&mstr, L"\U0000043f\U00000440\U00000438"));
+
+ /* Conversion from WCS to UTF-8 should always succeed */
+ assertEqualInt(ARCHIVE_OK,
+ archive_mstring_get_utf8(NULL, &mstr, &utf8_string));
+ assertEqualString("\xD0\xBF\xD1\x80\xD0\xB8", utf8_string);
+
+ archive_mstring_clean(&mstr);
+#endif
+}
+
+DEFINE_TEST(test_archive_string_conversion_utf8_utf16)
+{
+#if !defined(_WIN32) || defined(__CYGWIN__)
+ skipping("This test is meant to verify unicode string handling on Windows");
+#else
+ struct archive_mstring mstr;
+ const wchar_t* wcs_string;
+
+ memset(&mstr, 0, sizeof(mstr));
+
+ assertEqualInt(6,
+ archive_mstring_copy_utf8(&mstr, "\xD0\xBF\xD1\x80\xD0\xB8"));
+
+ /* Conversion from UTF-8 to WCS should always succeed */
+ assertEqualInt(ARCHIVE_OK,
+ archive_mstring_get_wcs(NULL, &mstr, &wcs_string));
+ assertEqualWString(L"\U0000043f\U00000440\U00000438", wcs_string);
+
+ archive_mstring_clean(&mstr);
+#endif
+}
+
+DEFINE_TEST(test_archive_string_update_utf8_win)
+{
+#if !defined(_WIN32) || defined(__CYGWIN__)
+ skipping("This test is meant to verify unicode string handling on Windows"
+ " with the C locale");
+#else
+ static const char utf8_string[] = "\xD0\xBF\xD1\x80\xD0\xB8";
+ static const wchar_t wcs_string[] = L"\U0000043f\U00000440\U00000438";
+ struct archive_mstring mstr;
+ int r;
+
+ memset(&mstr, 0, sizeof(mstr));
+
+ r = archive_mstring_update_utf8(NULL, &mstr, utf8_string);
+
+ /* On Windows, this should reliably fail with the C locale */
+ assertEqualInt(-1, r);
+ assertEqualInt(0, mstr.aes_set & AES_SET_MBS);
+
+ /* NOTE: We access the internals to validate that they were set by the
+ * 'archive_mstring_update_utf8' function */
+ /* UTF-8 should always be set */
+ assertEqualInt(AES_SET_UTF8, mstr.aes_set & AES_SET_UTF8);
+ assertEqualString(utf8_string, mstr.aes_utf8.s);
+ /* WCS should always be set as well */
+ assertEqualInt(AES_SET_WCS, mstr.aes_set & AES_SET_WCS);
+ assertEqualWString(wcs_string, mstr.aes_wcs.s);
+
+ archive_mstring_clean(&mstr);
+#endif
+}
+
+DEFINE_TEST(test_archive_string_update_utf8_utf8)
+{
+ static const char utf8_string[] = "\xD0\xBF\xD1\x80\xD0\xB8";
+ static const wchar_t wcs_string[] = L"\U0000043f\U00000440\U00000438";
+ struct archive_mstring mstr;
+ int r;
+
+ memset(&mstr, 0, sizeof(mstr));
+
+ if (setlocale(LC_ALL, "en_US.UTF-8") == NULL) {
+ skipping("UTF-8 not supported on this system.");
+ return;
+ }
+
+ r = archive_mstring_update_utf8(NULL, &mstr, utf8_string);
+
+ /* All conversions should have succeeded */
+ assertEqualInt(0, r);
+ assertEqualInt(AES_SET_MBS | AES_SET_WCS | AES_SET_UTF8, mstr.aes_set);
+ assertEqualString(utf8_string, mstr.aes_utf8.s);
+ assertEqualString(utf8_string, mstr.aes_mbs.s);
+ assertEqualWString(wcs_string, mstr.aes_wcs.s);
+
+ archive_mstring_clean(&mstr);
+}
+
+DEFINE_TEST(test_archive_string_update_utf8_koi8)
+{
+ static const char utf8_string[] = "\xD0\xBF\xD1\x80\xD0\xB8";
+ static const char koi8_string[] = "\xD0\xD2\xC9";
+ static const wchar_t wcs_string[] = L"\U0000043f\U00000440\U00000438";
+ struct archive_mstring mstr;
+ int r;
+
+ memset(&mstr, 0, sizeof(mstr));
+
+ if (setlocale(LC_ALL, "ru_RU.KOI8-R") == NULL) {
+ skipping("KOI8-R locale not available on this system.");
+ return;
+ }
+
+ r = archive_mstring_update_utf8(NULL, &mstr, utf8_string);
+
+ /* All conversions should have succeeded */
+ assertEqualInt(0, r);
+ assertEqualInt(AES_SET_MBS | AES_SET_WCS | AES_SET_UTF8, mstr.aes_set);
+ assertEqualString(utf8_string, mstr.aes_utf8.s);
+ assertEqualString(koi8_string, mstr.aes_mbs.s);
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ assertEqualWString(wcs_string, mstr.aes_wcs.s);
+#else
+ /* No guarantee of how WCS strings behave, however this test test is
+ * primarily meant for Windows */
+ (void)wcs_string;
+#endif
+
+ archive_mstring_clean(&mstr);
+}
diff --git a/contrib/libarchive/libarchive/test/test_archive_write_add_filter_by_name.c b/contrib/libarchive/libarchive/test/test_archive_write_add_filter_by_name.c
index c80e161c3b58..9d7e58d6f635 100644
--- a/contrib/libarchive/libarchive/test/test_archive_write_add_filter_by_name.c
+++ b/contrib/libarchive/libarchive/test/test_archive_write_add_filter_by_name.c
@@ -36,7 +36,7 @@ test_filter_by_name(const char *filter_name, int filter_code,
char *buff;
int r;
- assert((buff = calloc(buffsize, sizeof(char))) != NULL);
+ assert((buff = calloc(buffsize, sizeof(*buff))) != NULL);
if (buff == NULL)
return;
diff --git a/contrib/libarchive/libarchive/test/test_compat_lzip.c b/contrib/libarchive/libarchive/test/test_compat_lzip.c
index 1420e5bb9ac0..50920eefb1cf 100644
--- a/contrib/libarchive/libarchive/test/test_compat_lzip.c
+++ b/contrib/libarchive/libarchive/test/test_compat_lzip.c
@@ -47,7 +47,7 @@ echo "f3" > $dir/d1/f3
rm -r $dir
}
#
-# Make a lzip file from splitted tar file.
+# Make a lzip file from split tar file.
#
name=test_compat_lzip_1
dir="$name`date +%Y%m%d%H%M%S`.$USER"
diff --git a/contrib/libarchive/libarchive/test/test_compat_solaris_pax_sparse.c b/contrib/libarchive/libarchive/test/test_compat_solaris_pax_sparse.c
index c25c4eb8f51e..94e3e9189bc2 100644
--- a/contrib/libarchive/libarchive/test/test_compat_solaris_pax_sparse.c
+++ b/contrib/libarchive/libarchive/test/test_compat_solaris_pax_sparse.c
@@ -60,7 +60,7 @@ test_compat_solaris_pax_sparse_1(void)
assertEqualInt(0100644, archive_entry_mode(ae));
/* Verify the sparse information. */
- failure("This sparse file should have tree data blocks");
+ failure("This sparse file should have three data blocks");
assertEqualInt(3, archive_entry_sparse_reset(ae));
assertEqualInt(ARCHIVE_OK,
archive_entry_sparse_next(ae, &offset, &length));
diff --git a/contrib/libarchive/libarchive/test/test_entry.c b/contrib/libarchive/libarchive/test/test_entry.c
index 228fdd8bcc56..38c406e35b5a 100644
--- a/contrib/libarchive/libarchive/test/test_entry.c
+++ b/contrib/libarchive/libarchive/test/test_entry.c
@@ -269,7 +269,7 @@ DEFINE_TEST(test_entry)
archive_entry_set_hardlink(e, "hardlink");
archive_entry_set_symlink(e, "symlink");
archive_entry_set_link(e, "link");
- assertEqualString(archive_entry_hardlink(e), "hardlink");
+ assertEqualString(archive_entry_hardlink(e), NULL);
assertEqualString(archive_entry_symlink(e), "link");
/* mode */
@@ -513,7 +513,6 @@ DEFINE_TEST(test_entry)
archive_entry_set_rdev(e, 532);
archive_entry_set_size(e, 987654321);
archive_entry_copy_sourcepath(e, "source");
- archive_entry_set_symlink(e, "symlinkname");
archive_entry_set_uid(e, 83);
archive_entry_set_uname(e, "user");
/* Add an ACL entry. */
@@ -548,7 +547,7 @@ DEFINE_TEST(test_entry)
assertEqualInt(archive_entry_rdev(e2), 532);
assertEqualInt(archive_entry_size(e2), 987654321);
assertEqualString(archive_entry_sourcepath(e2), "source");
- assertEqualString(archive_entry_symlink(e2), "symlinkname");
+ assertEqualString(archive_entry_symlink(e2), NULL);
assertEqualInt(archive_entry_uid(e2), 83);
assertEqualString(archive_entry_uname(e2), "user");
@@ -649,7 +648,7 @@ DEFINE_TEST(test_entry)
assertEqualInt(archive_entry_rdev(e2), 532);
assertEqualInt(archive_entry_size(e2), 987654321);
assertEqualString(archive_entry_sourcepath(e2), "source");
- assertEqualString(archive_entry_symlink(e2), "symlinkname");
+ assertEqualString(archive_entry_symlink(e2), NULL);
assertEqualInt(archive_entry_uid(e2), 83);
assertEqualString(archive_entry_uname(e2), "user");
@@ -705,6 +704,13 @@ DEFINE_TEST(test_entry)
/* Release clone. */
archive_entry_free(e2);
+ /* Verify that symlink is copied over by `clone` */
+ archive_entry_set_symlink(e, "symlinkpath");
+ e2 = archive_entry_clone(e);
+ assertEqualString(archive_entry_hardlink(e2), NULL);
+ assertEqualString(archive_entry_symlink(e2), "symlinkpath");
+ archive_entry_free(e2);
+
/*
* Test clear() implementation.
*/
diff --git a/contrib/libarchive/libarchive/test/test_gnutar_filename_encoding.c b/contrib/libarchive/libarchive/test/test_gnutar_filename_encoding.c
index f473ddfb4fe9..476ec2149fdf 100644
--- a/contrib/libarchive/libarchive/test/test_gnutar_filename_encoding.c
+++ b/contrib/libarchive/libarchive/test/test_gnutar_filename_encoding.c
@@ -389,3 +389,105 @@ DEFINE_TEST(test_gnutar_filename_encoding_CP932_UTF8)
assertEqualMem(buff, "\xE8\xA1\xA8.txt", 7);
}
+DEFINE_TEST(test_gnutar_filename_encoding_UTF16_win)
+{
+#if !defined(_WIN32) || defined(__CYGWIN__)
+ skipping("This test is meant to verify unicode string handling"
+ " on Windows with UTF-16 names");
+ return;
+#else
+ struct archive *a;
+ struct archive_entry *entry;
+ char buff[4096];
+ size_t used;
+
+ /*
+ * Don't call setlocale because we're verifying that the '_w' functions
+ * work as expected when 'hdrcharset' is UTF-8
+ */
+
+ /* Part 1: file */
+ a = archive_write_new();
+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_gnutar(a));
+ if (archive_write_set_options(a, "hdrcharset=UTF-8") != ARCHIVE_OK) {
+ skipping("This system cannot convert character-set"
+ " from UTF-16 to UTF-8.");
+ archive_write_free(a);
+ return;
+ }
+ assertEqualInt(ARCHIVE_OK,
+ archive_write_open_memory(a, buff, sizeof(buff), &used));
+
+ entry = archive_entry_new2(a);
+ /* Set the filename using a UTF-16 string */
+ archive_entry_copy_pathname_w(entry, L"\u8868.txt");
+ archive_entry_set_filetype(entry, AE_IFREG);
+ archive_entry_set_size(entry, 0);
+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry));
+ archive_entry_free(entry);
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /* Check UTF-8 version. */
+ assertEqualMem(buff, "\xE8\xA1\xA8.txt", 7);
+
+ /* Part 2: directory */
+ a = archive_write_new();
+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_gnutar(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_set_options(a, "hdrcharset=UTF-8"));
+ assertEqualInt(ARCHIVE_OK,
+ archive_write_open_memory(a, buff, sizeof(buff), &used));
+
+ entry = archive_entry_new2(a);
+ /* Set the directory name using a UTF-16 string */
+ /* NOTE: Explicitly not adding trailing slash to test that code path */
+ archive_entry_copy_pathname_w(entry, L"\u8868");
+ archive_entry_set_filetype(entry, AE_IFDIR);
+ archive_entry_set_size(entry, 0);
+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry));
+ archive_entry_free(entry);
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /* Check UTF-8 version. */
+ assertEqualMem(buff, "\xE8\xA1\xA8/", 4);
+
+ /* Part 3: symlink */
+ a = archive_write_new();
+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_gnutar(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_set_options(a, "hdrcharset=UTF-8"));
+ assertEqualInt(ARCHIVE_OK,
+ archive_write_open_memory(a, buff, sizeof(buff), &used));
+
+ entry = archive_entry_new2(a);
+ /* Set the symlink target using a UTF-16 string */
+ archive_entry_set_pathname(entry, "link.txt");
+ archive_entry_copy_symlink_w(entry, L"\u8868.txt");
+ archive_entry_set_filetype(entry, AE_IFLNK);
+ archive_entry_set_symlink_type(entry, AE_SYMLINK_TYPE_FILE);
+ archive_entry_set_size(entry, 0);
+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry));
+ archive_entry_free(entry);
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /* Check UTF-8 version. */
+ assertEqualMem(buff + 157, "\xE8\xA1\xA8.txt", 7);
+
+ /* Part 4: hardlink */
+ a = archive_write_new();
+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_gnutar(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_set_options(a, "hdrcharset=UTF-8"));
+ assertEqualInt(ARCHIVE_OK,
+ archive_write_open_memory(a, buff, sizeof(buff), &used));
+
+ entry = archive_entry_new2(a);
+ /* Set the symlink target using a UTF-16 string */
+ archive_entry_set_pathname(entry, "link.txt");
+ archive_entry_copy_hardlink_w(entry, L"\u8868.txt");
+ archive_entry_set_size(entry, 0);
+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry));
+ archive_entry_free(entry);
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /* Check UTF-8 version. */
+ assertEqualMem(buff + 157, "\xE8\xA1\xA8.txt", 7);
+#endif
+}
diff --git a/contrib/libarchive/libarchive/test/test_link_resolver.c b/contrib/libarchive/libarchive/test/test_link_resolver.c
index 5bea9a463b30..6c6230c4d07c 100644
--- a/contrib/libarchive/libarchive/test/test_link_resolver.c
+++ b/contrib/libarchive/libarchive/test/test_link_resolver.c
@@ -202,3 +202,48 @@ DEFINE_TEST(test_link_resolver)
test_linkify_old_cpio();
test_linkify_new_cpio();
}
+
+DEFINE_TEST(test_link_resolver_unicode_win)
+{
+#if !defined(_WIN32) || defined(__CYGWIN__)
+ skipping("This test is meant to verify unicode string handling"
+ " on Windows with UTF-16 names");
+ return;
+#else
+ struct archive_entry *entry, *e2;
+ struct archive_entry_linkresolver *resolver;
+
+ /* Initialize the resolver. */
+ assert(NULL != (resolver = archive_entry_linkresolver_new()));
+ archive_entry_linkresolver_set_strategy(resolver,
+ ARCHIVE_FORMAT_TAR_USTAR);
+
+ /* Create an entry with a unicode filename and 2 links. */
+ assert(NULL != (entry = archive_entry_new()));
+ archive_entry_copy_pathname_w(entry, L"\u4f60\u597d.txt");
+ archive_entry_set_ino(entry, 1);
+ archive_entry_set_dev(entry, 2);
+ archive_entry_set_nlink(entry, 2);
+ archive_entry_set_size(entry, 10);
+ archive_entry_linkify(resolver, &entry, &e2);
+
+ /* Shouldn't be altered, since it wasn't seen before. */
+ assert(e2 == NULL);
+ assertEqualWString(L"\u4f60\u597d.txt", archive_entry_pathname_w(entry));
+ assertEqualWString(NULL, archive_entry_hardlink_w(entry));
+ assertEqualInt(10, archive_entry_size(entry));
+
+ /* Link to the same file contents, but a new unicode name. */
+ archive_entry_copy_pathname_w(entry, L"\u518d\u89c1.txt");
+ archive_entry_linkify(resolver, &entry, &e2);
+
+ /* Size & link path should have changed. */
+ assert(e2 == NULL);
+ assertEqualWString(L"\u518d\u89c1.txt", archive_entry_pathname_w(entry));
+ assertEqualWString(L"\u4f60\u597d.txt", archive_entry_hardlink_w(entry));
+ assertEqualInt(0, archive_entry_size(entry));
+
+ archive_entry_free(entry);
+ archive_entry_linkresolver_free(resolver);
+#endif
+}
diff --git a/contrib/libarchive/libarchive/test/test_pax_filename_encoding.c b/contrib/libarchive/libarchive/test/test_pax_filename_encoding.c
index 737641c5abca..27e10eaffc6c 100644
--- a/contrib/libarchive/libarchive/test/test_pax_filename_encoding.c
+++ b/contrib/libarchive/libarchive/test/test_pax_filename_encoding.c
@@ -579,6 +579,158 @@ DEFINE_TEST(test_pax_filename_encoding_KOI8R_CP1251)
assertEqualInt(ARCHIVE_OK, archive_write_free(a));
}
+/*
+ * Verify that unicode filenames are correctly preserved on Windows
+ */
+DEFINE_TEST(test_pax_filename_encoding_UTF16_win)
+{
+#if !defined(_WIN32) || defined(__CYGWIN__)
+ skipping("This test is meant to verify unicode string handling"
+ " on Windows with UTF-16 names");
+ return;
+#else
+ struct archive *a;
+ struct archive_entry *entry;
+ char buff[0x2000];
+ char *p;
+ size_t used;
+
+ /*
+ * Don't call setlocale because we're verifying that the '_w' functions
+ * work as expected when 'hdrcharset' is UTF-8
+ */
+
+ /* Check if the platform completely supports the string conversion. */
+ a = archive_write_new();
+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_pax(a));
+ if (archive_write_set_options(a, "hdrcharset=UTF-8") != ARCHIVE_OK) {
+ skipping("This system cannot convert character-set"
+ " from UTF-16 to UTF-8.");
+ archive_write_free(a);
+ return;
+ }
+ archive_write_free(a);
+
+ /*
+ * Create a new archive handle with default charset handling
+ */
+ a = archive_write_new();
+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_pax(a));
+ assertEqualInt(ARCHIVE_OK,
+ archive_write_open_memory(a, buff, sizeof(buff), &used));
+
+ /* Part 1: file */
+ entry = archive_entry_new2(a);
+ archive_entry_copy_pathname_w(entry, L"\u4f60\u597d.txt");
+ archive_entry_set_filetype(entry, AE_IFREG);
+ archive_entry_set_size(entry, 0);
+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry));
+
+ /* Part 2: directory */
+ /* NOTE: Explicitly not adding trailing slash to test that code path */
+ archive_entry_copy_pathname_w(entry, L"\u043f\u0440\u0438");
+ archive_entry_set_filetype(entry, AE_IFDIR);
+ archive_entry_set_size(entry, 0);
+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry));
+
+ /* Part 3: symlink */
+ archive_entry_copy_pathname_w(entry, L"\u518d\u89c1.txt");
+ archive_entry_copy_symlink_w(entry, L"\u4f60\u597d.txt");
+ archive_entry_set_filetype(entry, AE_IFLNK);
+ archive_entry_set_symlink_type(entry, AE_SYMLINK_TYPE_FILE);
+ archive_entry_set_size(entry, 0);
+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry));
+
+ /* Part 4: hardlink */
+ archive_entry_copy_pathname_w(entry, L"\u665a\u5b89.txt");
+ archive_entry_copy_hardlink_w(entry, L"\u4f60\u597d.txt");
+ archive_entry_set_filetype(entry, AE_IFREG);
+ archive_entry_set_size(entry, 0);
+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry));
+
+ archive_entry_free(entry);
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /*
+ * Examine the bytes to ensure the filenames ended up UTF-8
+ * encoded as we expect.
+ */
+
+ /* Part 1: file */
+ p = buff + 0;
+ assertEqualString(p + 0, "PaxHeader/\xE4\xBD\xA0\xE5\xA5\xBD.txt"); /* File name */
+ assertEqualInt(p[156], 'x'); /* Pax extension header */
+ p += 512; /* Pax extension body */
+ assertEqualString(p + 0, "19 path=\xE4\xBD\xA0\xE5\xA5\xBD.txt\n");
+ p += 512; /* Ustar header */
+ assertEqualString(p + 0, "\xE4\xBD\xA0\xE5\xA5\xBD.txt"); /* File name */
+ assertEqualInt(p[156], '0');
+
+ /* Part 2: directory */
+ p += 512; /* Pax extension header */
+ assertEqualString(p + 0, "PaxHeader/\xD0\xBF\xD1\x80\xD0\xB8"); /* File name */
+ assertEqualInt(p[156], 'x');
+ p += 512; /* Pax extension body */
+ assertEqualString(p + 0, "16 path=\xD0\xBF\xD1\x80\xD0\xB8/\n");
+ p += 512; /* Ustar header */
+ assertEqualString(p + 0, "\xD0\xBF\xD1\x80\xD0\xB8/"); /* File name */
+ assertEqualInt(p[156], '5'); /* directory */
+
+ /* Part 3: symlink */
+ p += 512; /* Pax Extension Header */
+ assertEqualString(p + 0, "PaxHeader/\xE5\x86\x8D\xE8\xA7\x81.txt"); /* File name */
+ p += 512; /* Pax extension body */
+ assertEqualString(p + 0,
+ "19 path=\xE5\x86\x8D\xE8\xA7\x81.txt\n"
+ "23 linkpath=\xE4\xBD\xA0\xE5\xA5\xBD.txt\n"
+ "31 LIBARCHIVE.symlinktype=file\n");
+ p += 512; /* Ustar header */
+ assertEqualString(p + 0, "\xE5\x86\x8D\xE8\xA7\x81.txt"); /* File name */
+ assertEqualInt(p[156], '2'); /* symlink */
+ assertEqualString(p + 157, "\xE4\xBD\xA0\xE5\xA5\xBD.txt"); /* link name */
+
+ /* Part 4: hardlink */
+ p += 512; /* Pax extension header */
+ assertEqualString(p + 0, "PaxHeader/\xE6\x99\x9A\xE5\xAE\x89.txt"); /* File name */
+ p += 512; /* Pax extension body */
+ assertEqualString(p + 0,
+ "19 path=\xE6\x99\x9A\xE5\xAE\x89.txt\n"
+ "23 linkpath=\xE4\xBD\xA0\xE5\xA5\xBD.txt\n"
+ "31 LIBARCHIVE.symlinktype=file\n");
+ p += 512; /* Ustar header */
+ assertEqualString(p + 0, "\xE6\x99\x9A\xE5\xAE\x89.txt"); /* File name */
+ assertEqualInt(p[156], '1'); /* hard link */
+ assertEqualString(p + 157, "\xE4\xBD\xA0\xE5\xA5\xBD.txt"); /* link name */
+
+ /*
+ * Read back the archive to see if we get the original names
+ */
+ a = archive_read_new();
+ archive_read_support_format_all(a);
+ archive_read_support_filter_all(a);
+ assertEqualInt(0, archive_read_open_memory(a, buff, used));
+
+ /* Read part 1: file */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &entry));
+ assertEqualWString(L"\u4f60\u597d.txt", archive_entry_pathname_w(entry));
+
+ /* Read part 2: directory */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &entry));
+ assertEqualWString(L"\u043f\u0440\u0438/", archive_entry_pathname_w(entry));
+
+ /* Read part 3: symlink */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &entry));
+ assertEqualWString(L"\u518d\u89c1.txt", archive_entry_pathname_w(entry));
+ assertEqualWString(L"\u4f60\u597d.txt", archive_entry_symlink_w(entry));
+
+ /* Read part 4: hardlink */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &entry));
+ assertEqualWString(L"\u665a\u5b89.txt", archive_entry_pathname_w(entry));
+ assertEqualWString(L"\u4f60\u597d.txt", archive_entry_hardlink_w(entry));
+
+ archive_free(a);
+#endif
+}
DEFINE_TEST(test_pax_filename_encoding)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_filter_gzip_recursive.c b/contrib/libarchive/libarchive/test/test_read_filter_gzip_recursive.c
new file mode 100644
index 000000000000..0042a0511d5a
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_filter_gzip_recursive.c
@@ -0,0 +1,50 @@
+/*-
+ * Copyright (c) 2003-2024 Tim Kientzle
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "test.h"
+
+DEFINE_TEST(test_read_filter_gzip_recursive)
+{
+ const char *name = "test_read_filter_gzip_recursive.gz";
+ struct archive *a;
+
+ if (!canGzip()) {
+ skipping("gzip not available");
+ return;
+ }
+
+ assert((a = archive_read_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+ extract_reference_file(name);
+ assertEqualIntA(a, ARCHIVE_FATAL,
+ archive_read_open_filename(a, name, 200));
+
+ /* Verify that the filter detection worked. */
+ assertEqualInt(archive_filter_code(a, 0), ARCHIVE_FILTER_GZIP);
+ assertEqualString(archive_filter_name(a, 0), "gzip");
+
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
diff --git a/contrib/libarchive/libarchive/test/test_read_filter_gzip_recursive.gz.uu b/contrib/libarchive/libarchive/test/test_read_filter_gzip_recursive.gz.uu
new file mode 100644
index 000000000000..14b0476bed40
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_filter_gzip_recursive.gz.uu
@@ -0,0 +1,19 @@
+From oss-fuzz:
+
+clusterfuzz-testcase-minimized-libarchive_fuzzer-5138261947580416
+
+This is a gzip input that expands to a gzip, etc, in such a way that
+the "filename" field in the nested gzip header ends up being extremely
+large (> 500 MiB). This caused headaches for the gzip filter before I
+implemented a sanity limit on filename and comment sizes.
+
+begin 644 test_read_filter_gzip_recursive.gz
+M'XL(`5`M[_<\`'#_``#_'XL("0!D0`GK_W,)&P!P_P``_Q^+"`@(`%$`"0D<
+M`'#_``#_'XL($?\'_^_W/`!P_P``_Q^+"`D`9$`)Z_]S[AL`</\``/\?BP@(
+M"`!1``D)'`!P_P``_Q^+"!'_!___ZP$)=Q'_!___<PD;`'#_``#_'XL("`@`
+M40`)"1P`</\``/\?BP@1_P?_[_<\`'#_``#_'XL("0!D0`GK_SP`</\``/\?
+MBP@)`&1`">O_<^YC:&$!"7<1_P?__W,)&P!P_P``_Q^+"`@(`%$`"0D<`'#_
+M``#_'XL($?\'_^_W/`!P_P``_Q^+"`D`9$`)Z_\\@</"P\/#P\/#P\/!P\/#
+7P\/#P\/#P\/EP\/#B`$`PT.?"`M=P\,`
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip.c b/contrib/libarchive/libarchive/test/test_read_format_7zip.c
index 9f76705deaf2..bb47be668286 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_7zip.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip.c
@@ -1050,6 +1050,7 @@ test_arm_filter(const char *refname)
extract_reference_file(refname);
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
assert((a = archive_read_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
@@ -1123,6 +1124,7 @@ test_arm64_filter(const char *refname)
extract_reference_file(refname);
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
assert((a = archive_read_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
@@ -1257,3 +1259,45 @@ DEFINE_TEST(test_read_format_7zip_win_attrib)
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
+
+DEFINE_TEST(test_read_format_7zip_extract_second)
+{
+ struct archive *a;
+ char buffer[256];
+
+ assert((a = archive_read_new()) != NULL);
+
+ if (ARCHIVE_OK != archive_read_support_filter_lzma(a)) {
+ skipping(
+ "7zip:lzma decoding is not supported on this platform");
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ return;
+ }
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+
+ /*
+ * The test archive has two files: first.txt which is a 65,536 file (the
+ * size of the uncompressed buffer), and second.txt which has contents
+ * we will validate. This test ensures we can skip first.txt and still
+ * be able to read the contents of second.txt
+ */
+ const char *refname = "test_read_format_7zip_extract_second.7z";
+ extract_reference_file(refname);
+
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_open_filename(a, refname, 10240));
+
+ struct archive_entry *ae;
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("first.txt", archive_entry_pathname(ae));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("second.txt", archive_entry_pathname(ae));
+
+ assertEqualInt(23, archive_read_data(a, buffer, sizeof(buffer)));
+ assertEqualMem("This is from second.txt", buffer, 23);
+
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip_extract_second.7z.uu b/contrib/libarchive/libarchive/test/test_read_format_7zip_extract_second.7z.uu
new file mode 100644
index 000000000000..aa3d6e235784
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip_extract_second.7z.uu
@@ -0,0 +1,11 @@
+begin 644 test_read_format_7zip_extract_second.7z
+M-WJ\KR<<``-N%=VX!@$````````B`````````*R\U.<`&`Q"DFIGO`[1,RO\
+MN,RA7-QU1L&_]O_/$0MMLIEBUR3'BDX@M2C-5'VG./-4,5@W3Q@*__^7_,[H
+MEO`DB'[ZI>@H2_E>/W.2G$$.P01-X!YN5";SS[3#7Z4Q1G/EF.0'^D*[S8&8
+M[FV9DYX7,SA%^.Q\'?__P!@`````@3,'K@_4WV/Q0A7VLXG$X?GH4=5W^`UM
+M$N_EX$)LE*?K$W5?WLP:X0T[Q%V^?A!0E\VZRBB,)(MO`C`LO[O!3(1YL)<:
+MJ."`';WU;>GP5',%Z=6?*/H9*Z)&\*!2^<F\P&>,RV`R30UOBH8+5.;;2IKF
+M0W://&'?"L?0L2!)`*]F30B0&/_'<4``%P9Z`0F`C``'"P$``2,#`0$%70``
+-@``,@*@*`6]FB2D`````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_afio.c b/contrib/libarchive/libarchive/test/test_read_format_cpio_afio.c
index 0eff8cfee856..5d2b4b4c8134 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_afio.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_afio.c
@@ -65,15 +65,6 @@ static unsigned char archive[] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
};
-/*
- * XXX This must be removed when we use int64_t for uid.
- */
-static int
-uid_size(void)
-{
- return (sizeof(uid_t));
-}
-
DEFINE_TEST(test_read_format_cpio_afio)
{
unsigned char *p;
@@ -106,8 +97,7 @@ DEFINE_TEST(test_read_format_cpio_afio)
*/
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
assertEqualInt(17, archive_entry_size(ae));
- if (uid_size() > 4)
- assertEqualInt(65536, archive_entry_uid(ae));
+ assertEqualInt(65536, archive_entry_uid(ae));
assertEqualInt(archive_entry_is_encrypted(ae), 0);
assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
assertA(archive_filter_code(a, 0) == ARCHIVE_FILTER_NONE);
@@ -117,3 +107,21 @@ DEFINE_TEST(test_read_format_cpio_afio)
free(p);
}
+
+// From OSS Fuzz Issue 70019:
+static unsigned char archive2[] = "070727bbbBbbbBabbbbbbcbcbbbbbbm726f777f777ffffffff518402ffffbbbabDDDDDDDDD7c7Ddd7DDDDnDDDdDDDB7777s77777777777C7727:";
+
+DEFINE_TEST(test_read_format_cpio_afio_broken)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+
+ assert((a = archive_read_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, archive2, sizeof(archive2)));
+ assertEqualIntA(a, ARCHIVE_FATAL, archive_read_next_header(a, &ae));
+ assertEqualInt(archive_filter_code(a, 0), ARCHIVE_FILTER_NONE);
+ assertEqualInt(archive_format(a), ARCHIVE_FORMAT_CPIO_AFIO_LARGE);
+ archive_read_free(a);
+}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_huge_rpm.c b/contrib/libarchive/libarchive/test/test_read_format_huge_rpm.c
new file mode 100644
index 000000000000..729c1e188d28
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_huge_rpm.c
@@ -0,0 +1,50 @@
+/*-
+ * Copyright (c) 2003-2024 Tim Kientzle
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "test.h"
+
+DEFINE_TEST(test_read_format_huge_rpm)
+{
+ struct archive_entry *ae;
+ struct archive *a;
+ const char *name = "test_read_format_huge_rpm.rpm";
+
+ assert((a = archive_read_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+ extract_reference_file(name);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name, 2));
+
+ /* This archive should have no entries -- if it has entries, the bid has screwed up */
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+ /* Verify that the format detection worked. */
+ assertEqualInt(ARCHIVE_FILTER_RPM, archive_filter_code(a, 0));
+ assertEqualString("rpm", archive_filter_name(a, 0));
+ assertEqualInt(ARCHIVE_FORMAT_EMPTY, archive_format(a));
+
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
diff --git a/contrib/libarchive/libarchive/test/test_read_format_huge_rpm.rpm.uu b/contrib/libarchive/libarchive/test/test_read_format_huge_rpm.rpm.uu
new file mode 100644
index 000000000000..db2111859662
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_huge_rpm.rpm.uu
@@ -0,0 +1,244 @@
+(
+ # set up ST_LEAD
+ python -c 'import sys; sys.stdout.buffer.write(b"\xED\xAB\xEE\xDB\x03\x00\x00\x01" + (96 - 8) * b"\x00")'
+ # set up ST_HEADER with 0x800000 sections
+ python -c 'import sys; sys.stdout.buffer.write(b"\x8E\xAD\xE8\x01" + 4 * b"\x00" + b"\x80" + 7 * b"\x00")'
+ # create archive
+ touch input.txt
+ bsdtar -cf - input.txt
+) > test_read_format_huge_rpm.rpm
+
+begin 644 test_read_format_huge_rpm.rpm
+M[:ONVP,```$`````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````CJWH`0````"``````````&EN<'5T+G1X=```````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````````````````````````````P,#`V-#0@`#`P,#<V
+M-2``,#`P,#(T(``P,#`P,#`P,#`P,"`Q-#8Q-3(U-C0W-"`P,3(W,38`(#``
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````=7-T87(`,#!T:6T`````````````````````````````````
+M`````'-T869F````````````````````````````````````,#`P,#`P(``P
+M,#`P,#`@````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+"````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_iso_3.iso.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_iso_3.iso.Z.uu
new file mode 100644
index 000000000000..e7734ab33bf3
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_iso_3.iso.Z.uu
@@ -0,0 +1,40 @@
+Same as test_read_format_iso_2.iso.Z except that the root directory record
+size in the PVD has been changed to 68 bytes (instead of the 34 required
+by the standard). This non-standard value was seen in the wild.
+
+begin 644 test_read_format_iso_3.iso.Z
+M'YV0``(*'$BPH,&#"!,J7,BPH<.'$"-*G$BQHL6+&#-JW,BQH\>/($.*'$FR
+MI,F3*%.J7,FRI<N7,&/*G$FSILV;.'/JW,FSI\^?0(,*'4JTJ-&C2),J7<JT
+MJ=.G4*-*G4JUJM6K6+-JW<JUJ]>O8,.*'4NVK-FS:-.J7<NVK=NW<./*G4NW
+MKMV[>//JW<NWK]^_@`,+'DRXL.'#B!,K7LRXL>/'D"-+GDRYLN7+F#-KWLRY
+ML^?/H$.+'DVZM.G3J%.K7LVZM>O7L&/+GDV[MNW;N'/KWLV[M^_?P(,+'TZ\
+MN/'CR),K7\Z\N?/GT*-+GTZ]NO7KV+-KW\Z]N_?OX,.+'T^^O/GSZ-.K7\^^
+MO?OW\./+GT^_OOW[^//KW\^_O_^_`0Q!!`PPQ!```$Z408<04Q`!PH,01BCA
+MA!16:.&%$!Z404$;>G0@``%\>"`""`#@04$>2)#0!`,1`0`%!<%8HD`EEF+C
+MC:4($)"(!V+HXX]`!BGDD$06:>212":IY)),-NGDDU!&*>645%9II8\R%!@#
+M##C$0(,,,6Q)PPP$DI-EF%QZ"::89,)`#H%PQBDGG&=NV>67:(Y9YH?_]>GG
+MGX7](R"!!@)JZ*&()JKHHL<="...`AU80:0`!`$B`!=0.@2CG';JZ:>@A@H8
+MGR]>:FI`DP9@*:F9!BCJJ[#&*NNLM#XE0JD$R3A0C3C:J*.I(0)PZZ,#Z4HC
+M`+WZ"BF((=XZ*4&3SAA0B6\@X$`%"AA`SJ\\!G%KI@1E*BT`U%J+[0+;+AOB
+MIK6VZ^Z[\,8;G;,%1;LK`-5>FVVZP!XX;(SDWIMLCNJ&:`(`%A1D@0$%&9`O
+MMMI2"B(!0KBP0PSR9JSQQAQWW!P:9;#!QAL*>&SRR2BGK'*GWQ8D[KT/*X`N
+MMSOZBVNQ`1\[,,W,!G`P!@5AP#!!#ILK,SD2!T``$19CO/+34$<M]=2$@2PR
+MR51GK?767'?M]==@ARWVV&27;?;9:*>M]MILM^WVVW#'+??<=-=M]]UXYZWW
+MWGSW[???@`<N^."$%V[XX8@GKOCBC#?N^..01R[YY)17;OGEF&>N^>:<=^[Y
+MYZ"'+OKHI)=N^NFHIZ[ZZJRW[OKKL,<N^^RTUV[[[;CGKOONO/?N^^_`!R_\
+M\,07;_SQR">O_/+,-^_\\]!'+_WTU%=O_?789Z_]]MQW[_WWX(<O_OCDEV_^
+M^>BGK_[Z[+?O_OOPQR___/37;__]^.>O__[\]^___P`,H``'2,`"&O"`"$R@
+M`A?(P`8Z\($0C*`$)TC!"EKP@AC,H`8WR,$.>O"#(`RA"$=(PA*:\(0H3*$*
+M5\C"%KKPA3",H0QG2,,:VO"&.,RA#G?(PQ[Z\(=`#*(0ATC$(AKQB$A,HA*7
+MR,0F.O&)4(RB%*=(Q2I:\8I8S*(6M\C%+GKQBV`,HQC'2,8RFO&,:$RC&M?(
+MQC:Z\8UPC*,<YTC'.MKQCGC,HQ[WR,<^^O&/@`RD(`=)R$(:\I"(3*0B%\G(
+M1CKRD9",I"0G2<E*6O*2F,RD)C?)R4YZ\I.@#*4H1TG*4IKRE*A,I2I7R<I6
+MNO*5L(RE+&=)RUK:\I:XS*4N=\G+7OKRE\`,IC"'2<QB&O.8R$RF,I?)S&8Z
+M\YG0C*8TITG-:EKSFMC,IC:WR<UN>O.;X`RG.,=)SG*:\YSH3*<ZU\G.=KKS
+MG?",ISSG2<]ZVO.>^,RG/O?)SW[Z\Y\`#:A`!TK0@AKTH`A-J$(7RM"&.O2A
+M$(VH1"=*T8I:]*(8S:A&-\K1CGKTHR`-J4A'2M*2FO2D*$VI2E?*TI:Z]*4P
+MC:E,9TK3FMKTICC-J4YWRM.>^O2G0`VJ4(=*U*(:]:A(3:I2E\K4ICKUJ5"-
+MJE2G2M6J6O6J6,VJ5K?*U:YZ]:M@#:M8QTK6LIKUK&A-JUK7RM:VNO6M<(VK
+".`$`
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_iso_Z.c b/contrib/libarchive/libarchive/test/test_read_format_iso_Z.c
index 09b0acb804ea..716552fa36e9 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_iso_Z.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_iso_Z.c
@@ -40,8 +40,29 @@ test1(void)
archive_read_support_format_all(a));
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_filename(a, name, 512));
+
+ /* Root directory */
assertEqualIntA(a, ARCHIVE_OK,
archive_read_next_header(a, &ae));
+ assertEqualIntA(a, 1131434684, archive_entry_atime(ae));
+ assertEqualIntA(a, 0, archive_entry_birthtime(ae));
+ assertEqualIntA(a, 1131434684, archive_entry_ctime(ae));
+ assertEqualIntA(a, 0, archive_entry_dev(ae));
+ assertEqualIntA(a, AE_IFDIR, archive_entry_filetype(ae));
+ assertEqualIntA(a, 0, archive_entry_gid(ae));
+ assertEqualStringA(a, NULL, archive_entry_gname(ae));
+ assertEqualIntA(a, 0, archive_entry_ino(ae));
+ assertEqualIntA(a, AE_IFDIR | 0700, archive_entry_mode(ae));
+ assertEqualIntA(a, 1131434684, archive_entry_mtime(ae));
+ assertEqualIntA(a, 2, archive_entry_nlink(ae));
+ assertEqualStringA(a, ".", archive_entry_pathname(ae));
+ assertEqualIntA(a, 0700, archive_entry_perm(ae));
+ assertEqualIntA(a, 2048, archive_entry_size(ae));
+ assertEqualIntA(a, 0, archive_entry_uid(ae));
+ assertEqualStringA(a, NULL, archive_entry_uname(ae));
+
+ assertEqualIntA(a, ARCHIVE_EOF,
+ archive_read_next_header(a, &ae));
assertEqualInt(1, archive_file_count(a));
assertEqualInt(archive_filter_code(a, 0),
ARCHIVE_FILTER_COMPRESS);
@@ -53,11 +74,10 @@ test1(void)
}
static void
-test2(void)
+test_small(const char *name)
{
struct archive_entry *ae;
struct archive *a;
- const char *name = "test_read_format_iso_2.iso.Z";
extract_reference_file(name);
@@ -68,21 +88,114 @@ test2(void)
archive_read_support_format_all(a));
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_filename(a, name, 512));
+
+ /* Root directory */
assertEqualIntA(a, ARCHIVE_OK,
archive_read_next_header(a, &ae));
assertEqualString(".", archive_entry_pathname(ae));
+ assertEqualInt(0, archive_entry_atime_is_set(ae));
+ assertEqualInt(0, archive_entry_atime(ae));
+ assertEqualInt(0, archive_entry_birthtime_is_set(ae));
+ assertEqualInt(0, archive_entry_birthtime(ae));
+ assertEqualInt(0, archive_entry_ctime_is_set(ae));
+ assertEqualInt(0, archive_entry_ctime(ae));
+ assertEqualIntA(a, 0, archive_entry_dev(ae));
+ assertEqualIntA(a, AE_IFDIR, archive_entry_filetype(ae));
+ assertEqualIntA(a, 0, archive_entry_gid(ae));
+ assertEqualStringA(a, NULL, archive_entry_gname(ae));
+ assertEqualIntA(a, 0, archive_entry_ino(ae));
+ assertEqualIntA(a, AE_IFDIR | 0700, archive_entry_mode(ae));
+ assertEqualInt(0, archive_entry_mtime_is_set(ae));
+ assertEqualInt(0, archive_entry_mtime(ae));
+ assertEqualIntA(a, 4, archive_entry_nlink(ae));
+ assertEqualIntA(a, 0700, archive_entry_perm(ae));
+ assertEqualIntA(a, 2048, archive_entry_size(ae));
+ assertEqualIntA(a, 0, archive_entry_uid(ae));
+ assertEqualStringA(a, NULL, archive_entry_uname(ae));
+
+ /* Directory "A" */
assertEqualIntA(a, ARCHIVE_OK,
archive_read_next_header(a, &ae));
assertEqualString("A", archive_entry_pathname(ae));
+ assertEqualIntA(a, 1313381406, archive_entry_atime(ae));
+ assertEqualIntA(a, 0, archive_entry_birthtime(ae));
+ assertEqualIntA(a, 1313381406, archive_entry_ctime(ae));
+ assertEqualIntA(a, 0, archive_entry_dev(ae));
+ assertEqualIntA(a, AE_IFDIR, archive_entry_filetype(ae));
+ assertEqualIntA(a, 0, archive_entry_gid(ae));
+ assertEqualStringA(a, NULL, archive_entry_gname(ae));
+ assertEqualIntA(a, 0, archive_entry_ino(ae));
+ assertEqualIntA(a, AE_IFDIR | 0700, archive_entry_mode(ae));
+ assertEqualIntA(a, 1313381406, archive_entry_mtime(ae));
+ assertEqualIntA(a, 2, archive_entry_nlink(ae));
+ assertEqualIntA(a, 0700, archive_entry_perm(ae));
+ assertEqualIntA(a, 2048, archive_entry_size(ae));
+ assertEqualIntA(a, 0, archive_entry_uid(ae));
+ assertEqualStringA(a, NULL, archive_entry_uname(ae));
+
+ /* File "A/B" */
assertEqualIntA(a, ARCHIVE_OK,
archive_read_next_header(a, &ae));
assertEqualString("A/B", archive_entry_pathname(ae));
+ assertEqualIntA(a, 1313381406, archive_entry_atime(ae));
+ assertEqualIntA(a, 0, archive_entry_birthtime(ae));
+ assertEqualIntA(a, 1313381406, archive_entry_ctime(ae));
+ assertEqualIntA(a, 0, archive_entry_dev(ae));
+ assertEqualIntA(a, AE_IFREG, archive_entry_filetype(ae));
+ assertEqualIntA(a, 0, archive_entry_gid(ae));
+ assertEqualStringA(a, NULL, archive_entry_gname(ae));
+ assertEqualIntA(a, 0, archive_entry_ino(ae));
+ assertEqualIntA(a, AE_IFREG | 0400, archive_entry_mode(ae));
+ assertEqualIntA(a, 1313381406, archive_entry_mtime(ae));
+ assertEqualIntA(a, 1, archive_entry_nlink(ae));
+ assertEqualIntA(a, 0400, archive_entry_perm(ae));
+ assertEqualIntA(a, 6, archive_entry_size(ae));
+ assertEqualIntA(a, 0, archive_entry_uid(ae));
+ assertEqualStringA(a, NULL, archive_entry_uname(ae));
+ /* TODO: Verify that file contents are "hello\n" */
+
+ /* Directory "C" */
assertEqualIntA(a, ARCHIVE_OK,
archive_read_next_header(a, &ae));
assertEqualString("C", archive_entry_pathname(ae));
+ assertEqualIntA(a, 1313381411, archive_entry_atime(ae));
+ assertEqualIntA(a, 0, archive_entry_birthtime(ae));
+ assertEqualIntA(a, 1313381411, archive_entry_ctime(ae));
+ assertEqualIntA(a, 0, archive_entry_dev(ae));
+ assertEqualIntA(a, AE_IFDIR, archive_entry_filetype(ae));
+ assertEqualIntA(a, 0, archive_entry_gid(ae));
+ assertEqualStringA(a, NULL, archive_entry_gname(ae));
+ assertEqualIntA(a, 0, archive_entry_ino(ae));
+ assertEqualIntA(a, AE_IFDIR | 0700, archive_entry_mode(ae));
+ assertEqualIntA(a, 1313381411, archive_entry_mtime(ae));
+ assertEqualIntA(a, 2, archive_entry_nlink(ae));
+ assertEqualIntA(a, 0700, archive_entry_perm(ae));
+ assertEqualIntA(a, 2048, archive_entry_size(ae));
+ assertEqualIntA(a, 0, archive_entry_uid(ae));
+ assertEqualStringA(a, NULL, archive_entry_uname(ae));
+
+ /* File "C/D" */
assertEqualIntA(a, ARCHIVE_OK,
archive_read_next_header(a, &ae));
assertEqualString("C/D", archive_entry_pathname(ae));
+ assertEqualIntA(a, 1313381411, archive_entry_atime(ae));
+ assertEqualIntA(a, 0, archive_entry_birthtime(ae));
+ assertEqualIntA(a, 1313381411, archive_entry_ctime(ae));
+ assertEqualIntA(a, 0, archive_entry_dev(ae));
+ assertEqualIntA(a, AE_IFREG, archive_entry_filetype(ae));
+ assertEqualIntA(a, 0, archive_entry_gid(ae));
+ assertEqualStringA(a, NULL, archive_entry_gname(ae));
+ assertEqualIntA(a, 0, archive_entry_ino(ae));
+ assertEqualIntA(a, AE_IFREG | 0400, archive_entry_mode(ae));
+ assertEqualIntA(a, 1313381411, archive_entry_mtime(ae));
+ assertEqualIntA(a, 1, archive_entry_nlink(ae));
+ assertEqualIntA(a, 0400, archive_entry_perm(ae));
+ assertEqualIntA(a, 6, archive_entry_size(ae));
+ assertEqualIntA(a, 0, archive_entry_uid(ae));
+ assertEqualStringA(a, NULL, archive_entry_uname(ae));
+ /* TODO: Verify that file contents are "hello\n" */
+
+ /* Final statistics */
assertEqualIntA(a, ARCHIVE_EOF,
archive_read_next_header(a, &ae));
assertEqualInt(5, archive_file_count(a));
@@ -98,5 +211,8 @@ test2(void)
DEFINE_TEST(test_read_format_iso_Z)
{
test1();
- test2();
+ /* A very small ISO image with a variety of contents. */
+ test_small("test_read_format_iso_2.iso.Z");
+ /* As above, but with a non-standard 68-byte root directory in the PVD */
+ test_small("test_read_format_iso_3.iso.Z");
}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_mtree.c b/contrib/libarchive/libarchive/test/test_read_format_mtree.c
index 70730839386d..b4463298dde2 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_mtree.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_mtree.c
@@ -158,7 +158,7 @@ test_read_format_mtree1(void)
/* TODO: Mtree reader should probably return ARCHIVE_WARN for this. */
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
assertEqualString(archive_entry_pathname(ae), "dir2/toosmallfile");
- assertEqualInt(archive_entry_size(ae), -1);
+ assertEqualInt(archive_entry_size(ae), 0);
assertEqualInt(archive_entry_is_encrypted(ae), 0);
assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar4_encrypted.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar4_encrypted.rar.uu
new file mode 100644
index 000000000000..584183b4a46f
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar4_encrypted.rar.uu
@@ -0,0 +1,10 @@
+begin 0744 test_read_format_rar4_encrypted.rar
+M4F%R(1H'`,^0<P``#0`````````J8W0@D"H`$@```!(````"56Y:[F17=E@=
+M,`4`(````&$N='AT`/#\3!M4:&ES(&ES(&9R;VT@82YT>'1?CG0DE#(`(```
+M`!(````"A13ZJ6=7=E@=,P4`(````&(N='ATO@(;FGDJBE4`L'*@-,GY]@T0
+M?ZC1UGSKU*2VR-1K@HH>GZZP#?C:ML=$"NKDN\=T()`J`!(````2`````C4]
+MFI1N5W98'3`%`"````!C+G1X=`"P/D@M5&AI<R!I<R!F<F]M(&,N='AT[<IT
+M))0R`"`````2`````B7ANB9-9'98'3,%`"````!D+G1X=*_B?1/SI5-2`/#[
+I88]V^#_)1V@;4"TVC,!XR=.I1:KVB0/<OAC@C&97VP3UZ<0]>P!`!P``
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar4_encrypted_filenames.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar4_encrypted_filenames.rar.uu
new file mode 100644
index 000000000000..3d7aa806a86d
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar4_encrypted_filenames.rar.uu
@@ -0,0 +1,14 @@
+begin 0744 test_read_format_rar4_encrypted_filenames.rar
+M4F%R(1H'`,Z9<X``#0```````````````````'0+AC,H,+6'0#)>8VT<XO:*
+M5M'"E1[V+ZKT=VW!$Y2=W$,@Y24Z^"L_;GVG\*4]&"6BQ#?@6TX38EQ\8\4-
+M<S5U7JMAF.'L3LOOCM6]\Q60C51S.)^'6MOG_R<DW8EG(```````````(B,(
+M]O5[61NCM'\Q9[&<E5D6F6`?WI`#-.(]J?W^C9!U-5O^2='P+5K(ED[:I4T=
+M0/ZHVQ[F8HPBZ<+WA.*T5<R$K+8&/OR_\BN8V5VVM]"5F:$4Y:\JR,),%],1
+MR;Z>``````````#*B0$)1EIB[[O98],X0DT>H`N+&*.NNPK!]1XJ#(AF_TF6
+M0FE3!L0.1T+=I<'X[Z0:F23U_[6S.I:ZNQ.\@HZ\]&0L/P:SA$:,Y<^4.A!\
+MSBD7NK5[VE/9$9K/N2`[7]T``````````.\$Z3?>_Z.3*>6<12%741?6_./A
+M!:XA!P"B0PS55>+%J)-H$0T!//>$']'-U?_"O=N?_:SNE<^54Z3/[8,M^F?6
+M36)XOUNLS4@\\N@1J#Z/V?J<_XS>CNA21,<Q;<;C[@``````````\)]%=^L\
+*)-I(DJO^>177HP``
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar4_solid_encrypted.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar4_solid_encrypted.rar.uu
new file mode 100644
index 000000000000..7d73ee86d9ef
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar4_solid_encrypted.rar.uu
@@ -0,0 +1,11 @@
+begin 0744 test_read_format_rar4_solid_encrypted.dat
+M4F%R(1H'`#O0<P@`#0`````````A873$E#(`,````!(````"56Y:[F17=E@=
+M,P4`(````&$N='AT````````````\/Q,&]Q,RV`3V)H10_&#G@'FZ'@$+I%W
+MXP?A#XMQ>A-D/\9QH!R+,]AV(8F*MQD3.<V`SC96=-24,@`0````$@````*%
+M%/JI9U=V6!TS!0`@````8BYT>'2/%M7(05"L]0"P<J`TBK7M!JH)_:_8K\\K
+M,U_X>\,C=-24,@`0````$@````(U/9J4;E=V6!TS!0`@````8RYT>'1ILB:<
+M@2)@M@"P/D@MD'UA]R2N^_G@1!L-H?V>K-TV=-24,@`0````$@````(EX;HF
+M361V6!TS!0`@````9"YT>'2C+AKDKML%S0#P^V&/?J,L#@>!52=M.=PPCAJF
+(IL0]>P!`!P``
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar4_solid_encrypted_filenames.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar4_solid_encrypted_filenames.rar.uu
new file mode 100644
index 000000000000..6c28e955d0e1
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar4_solid_encrypted_filenames.rar.uu
@@ -0,0 +1,13 @@
+begin 0744 test_read_format_rar4_solid_encrypted_filenames.rar
+M4F%R(1H'`#K9<X@`#0```````````````````,L":IWIGA+/YV2@]#O3Z\&O
+MM'G1)=DT/G2[DW184@7Z`)NZR=<IA_-5+=&`P_B)U/,]<+8]C:YI<X@;OT`3
+M]?.U#K0BV:I"0AYHE-->?V[74Q\@?])NR\68105J4BRL3O.E$I*!91X?$@/<
+M5C[G2D$``````````!NS=YISD[7`_=#)$A.9/&9<3`&D$(L]$^-&%;!SH,%>
+M!NZ:W\)5XCJI<"H7+BND(033Q/J9/18(=/`A%WI]@(`:H>AE`M3T)R8']S%P
+MHYCV```````````&TB\_##3K6#@Q+J)RDEJ0$CI"]*R1)8!Q.3B[,7O5NM,]
+ME::7;E__N2:-%4-;/D+DA:J@P.L0*I/__*OX77=\L4-&F^""&L'VP9/DK-;$
+MLP``````````1D.3Y0+"D$@9F(IYV&*B<`A2J2$)(C=_X_QEMWE*VK9ITH*U
+MAJ@<<Z%4#?(I"H:5J08&7^WM`<#3=A9D#':;X2IVK.%[ZZ#58(4W0Q[RT-X`
+7`````````/"?17?K/"3:2)*K_GD5UZ,`
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5.c b/contrib/libarchive/libarchive/test/test_read_format_rar5.c
index 705913b04cc2..594f032fc07e 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar5.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5.c
@@ -843,7 +843,7 @@ DEFINE_TEST(test_read_format_rar5_block_by_block)
struct archive_entry *ae;
struct archive *a;
uint8_t buf[173];
- int bytes_read;
+ ssize_t bytes_read;
uint32_t computed_crc = 0;
extract_reference_file("test_read_format_rar5_compressed.rar");
@@ -932,19 +932,22 @@ DEFINE_TEST(test_read_format_rar5_symlink)
assertEqualInt(AE_IFLNK, archive_entry_filetype(ae));
assertEqualString("file.txt", archive_entry_symlink(ae));
assertEqualInt(AE_SYMLINK_TYPE_FILE, archive_entry_symlink_type(ae));
- assertA(0 == archive_read_data(a, NULL, archive_entry_size(ae)));
+ assertEqualInt(0, archive_entry_size(ae));
+ assertA(0 == archive_read_data(a, NULL, (size_t)archive_entry_size(ae)));
assertA(0 == archive_read_next_header(a, &ae));
assertEqualString("dirlink", archive_entry_pathname(ae));
assertEqualInt(AE_IFLNK, archive_entry_filetype(ae));
assertEqualString("dir", archive_entry_symlink(ae));
assertEqualInt(AE_SYMLINK_TYPE_DIRECTORY, archive_entry_symlink_type(ae));
- assertA(0 == archive_read_data(a, NULL, archive_entry_size(ae)));
+ assertEqualInt(0, archive_entry_size(ae));
+ assertA(0 == archive_read_data(a, NULL, (size_t)archive_entry_size(ae)));
assertA(0 == archive_read_next_header(a, &ae));
assertEqualString("dir", archive_entry_pathname(ae));
assertEqualInt(AE_IFDIR, archive_entry_filetype(ae));
- assertA(0 == archive_read_data(a, NULL, archive_entry_size(ae)));
+ assertEqualInt(0, archive_entry_size(ae));
+ assertA(0 == archive_read_data(a, NULL, (size_t)archive_entry_size(ae)));
assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
@@ -969,7 +972,8 @@ DEFINE_TEST(test_read_format_rar5_hardlink)
assertEqualString("hardlink.txt", archive_entry_pathname(ae));
assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
assertEqualString("file.txt", archive_entry_hardlink(ae));
- assertA(0 == archive_read_data(a, NULL, archive_entry_size(ae)));
+ assertEqualInt(0, archive_entry_size(ae));
+ assertA(0 == archive_read_data(a, NULL, (size_t)archive_entry_size(ae)));
assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
@@ -1340,7 +1344,7 @@ DEFINE_TEST(test_read_format_rar5_sfx)
assertA(size == archive_read_data(a, buff, size));
assertEqualMem(buff, test_txt, size);
-
+
EPILOGUE();
}
@@ -1402,3 +1406,26 @@ DEFINE_TEST(test_read_format_rar5_read_data_block_uninitialized_offset)
EPILOGUE();
}
+
+DEFINE_TEST(test_read_format_rar5_data_ready_pointer_leak)
+{
+ /* oss fuzz 70024 */
+
+ char buf[4096];
+ PROLOGUE("test_read_format_rar5_data_ready_pointer_leak.rar");
+
+ /* Return codes of those calls are ignored, because this sample file
+ * is invalid. However, the unpacker shouldn't produce any SIGSEGV
+ * errors during processing. */
+
+ (void) archive_read_next_header(a, &ae);
+ (void) archive_read_data(a, buf, sizeof(buf));
+ (void) archive_read_next_header(a, &ae);
+ (void) archive_read_data(a, buf, sizeof(buf));
+ (void) archive_read_data(a, buf, sizeof(buf));
+ (void) archive_read_next_header(a, &ae);
+ /* This call shouldn't produce SIGSEGV. */
+ (void) archive_read_data(a, buf, sizeof(buf));
+
+ EPILOGUE();
+}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_data_ready_pointer_leak.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_data_ready_pointer_leak.rar.uu
new file mode 100644
index 000000000000..8c8c90778b9d
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_data_ready_pointer_leak.rar.uu
@@ -0,0 +1,28 @@
+begin 644 test_read_format_rar5_data_ready_pointer_leak.rar.uu
+M4F%R(1H'`0`]/-[E`@$`_R`@1#[Z5P("`P,`(/__(""`((``"2`@("`@_R`@
+M("`@(%.`*O0#`N<B`A"`("#_((`+`00@("`@(""!)/\@("`@("`@(/\@("`@
+M^I@R<00"WN<-\@$@_R`@(``C("`@("`@("`@("`@("`@("`@("`@("`@("#_
+M____("`@(/___R#_("`@("`@("#___\@_____R`@("`@("`@(/__________
+M____(/__(/\@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@________
+M_________R`@____(/____\@("`@("`@("#______________R#___\@("`@
+M("`@("`@("`@("`@("`@("`@(/\@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@_________R`@("`@_R`@("`@("`@
+M("`@("`@(/__("`@("`@("`@("`@("`@(%.`*O0#`N<B`A"`_R`@_R#_"P$$
+M("`@("`@@23_("`@_R`@("#_("`@(/J8,G$$`M[G#?(!(/\@("``(R`@("`@
+M("`@("`@("`@("`@("`@("`@("#_("`@("`@("#_("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("#_
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@____("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@_R`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("!3@"KT`P+G(B`0@/\@(/\@_PL!_R"!)/\@("`@("`@(/\@("`@^I@R<00"
+MWN<-\@$@_R`@(``C("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("#______________R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@(/\@(/_______R`@("`@("`@("`@("`@
+M("`@("`@("`@_________R`@("`@("`@("`@("`@("`@(/________\@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(/\@
+M("`@("`@(/\@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@(/\@($0^^E<"`@,#("`@(/\@@``)("`@("`@("`@
+)("`@("`@("`@
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_encrypted.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_encrypted.rar.uu
new file mode 100644
index 000000000000..0a52fa26bb3c
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_encrypted.rar.uu
@@ -0,0 +1,12 @@
+begin 0744 test_read_format_rar5_encrypted.rar
+M4F%R(1H'`0`SDK7E"@$%!@`%`0&`@``U_S(>'P(#"Q($$B!5;EKN@```!6$N
+M='AT"@,"?"&$HX)\V@%4:&ES(&ES(&9R;VT@82YT>'1Z07&S4`(#/#`$$B`8
+M1:,"@`,`!6(N='AT,`$``P_'1%[A@/BUG]8K0S<(O%?-^C3?!JM=!=23!W</
+M'8Z`4^HU9QUP\2U+:YP:G`H#`G)EF*:"?-H!8[I4LM`0I4E?M+K3P&FH.QN\
+MNS@GUX>3>',O?)/BTBC$`-[^IL`[?FQGU`50`-SXC7SQ9A\"`PL2!!(@-3V:
+ME(````5C+G1X=`H#`CY(Z:Z"?-H!5&AI<R!I<R!F<F]M(&,N='AT[/WP75("
+M`SR@``22`"##WV,2@`,`!60N='AT,`$``P_'1%[A@/BUG]8K0S<(O%?-\\W6
+MLQRT6Z=\K#98CK,.:8-,U$CI%>O6K'>WHPH#`GO%*?2/?-H!VVER]/96CJ;]
+?&67IE;,VA30W]2J@TR>'LO7!`C+8JEX==U91`P4$````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_encrypted_filenames.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_encrypted_filenames.rar.uu
new file mode 100644
index 000000000000..931240a16d49
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_encrypted_filenames.rar.uu
@@ -0,0 +1,19 @@
+begin 0744 test_read_format_rar5_encrypted_filenames.rar
+M4F%R(1H'`0"N(]*0(00```$/:`NPT*?(O:'>=*=Q,C2;&;<*@A@[)[D`X\II
+M)1#LA,>A'D8M?0XU3L36UDKMZ3EWQ[HCXZ3<%!O*=.Y,W/S<QCA?O/:*,^Z5
+M=M6S3*Y6;+35C`9`*4W]<':72F3'&:K>,FBUJV)T^1MW,X0)C4P7W(`"$#-N
+MQ\V%/Z&YJ=4A7#WA+9.5'__1CF)4F:?SV[[N1U^16P.+TQ5X.'"@NQ"=6K3Z
+M>:;.1CVE<%%M1-OQ3L0FZ[KI2TSW`.2SF20<ZT/,=/(WK4+9"\+J&$')_3V,
+MFW%?=^[MI.6[JA/>0V5WTB3-QIV<3Q'?++X$0]?XV(?ER,71CAXBNL1KT5A*
+M8*&+T@6]A_)*KA]%V3S,0B;S(LW1V.AH.U6U0N\-%!@J9Q-FJ%^'O)(JR5+2
+MS$5JO/XA3W4MSJ[R27%P_4$GAWSW!SS(4IA_-)Z:[:?V5D!F@TGG9L0!1TF[
+M:AH<9G0.['%7-\:>"&(8Y#Z#62;U.:,3+=<$E6S8C02I[/<OZ>G>-3P1Y<'J
+MW_FJ/]VJ-Q7IA64<?`;GTW<H]@=YS0)S*\?SKXQ$H.Y!<ZK`[1[?Z(\(_\]>
+MU:_TK/EHMM;PWJ?3`Y9S6&%6L@T0-U<&4E[+_F>Z%+KFW'&W>`,.=]#SI;A[
+MYA);NM6`5K01J]@IT6O8W#!].A$%_5M\E]S0&<D`"T,:H7>.TOPBCL9$C"GU
+M2<W)Q\9ABJLH57<$#;&%<^N#-N[5KE?`56,WSHG<GU4!!.+@ZU+5N\;J[7J-
+M**R#V\19<I;O[I%?-002U,8R$.^M/P8W]?26N+VB5-\B#7;SV;_L#%4PQ36P
+MBTTF>G&8E))@.H01Q:@1Q^.YVYIG(?#2:S604D\'CWU.!:-E`=;4VFS+KULL
+KJ<2G@G$-MF5V72TYY!]U(UB473O?`U'=W'#D\4A%S-_F?/@]S)MU>.[V1```
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_solid_encrypted.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_solid_encrypted.rar.uu
new file mode 100644
index 000000000000..d3113a305917
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_solid_encrypted.rar.uu
@@ -0,0 +1,14 @@
+begin 0744 test_read_format_rar5_solid_encrypted.rar
+M4F%R(1H'`0`@MOH1"@$%!@0%`0&`@`!A#\6>4@(#/+``!)(`(%5N6NZ`0P`%
+M82YT>'0P`0`!#X`.^EM!19`,=C!0B-G+#?0([51UI],+OH^T\:=V\5`OX@\X
+M+B?>=W@0'[TD"@,"?"&$HX)\V@$UI92M^>J?V-L?2@`2L023@_#?H\C>K?GG
+MDT*27O`>\]$\(4^12SZAD2GI6I(?@NS\ETUG4@(#/)``!)(`(#W[M6/`0P`%
+M8BYT>'0P`0`##X`.^EM!19`,=C!0B-G+#?09'G;UMT5!4+;8`6WM=*[?X@\X
+M+B?>=W@0'[TD"@,"<F68IH)\V@$C,XZR45`RX*-59&X3Y'+)'7P<"E("`SR0
+M``22`"#_)YR&P$,`!6,N='AT,`$``P^`#OI;0460#'8P4(C9RPWT6V3<1-F,
+M1I0"0-:R/5=BUN(/."XGWG=X$!^])`H#`CY(Z:Z"?-H!BBA?J'.;?7%L12A&
+M0%6=`D>/[#]2`@,\D``$D@`@>Q=TP\!#``5D+G1X=#`!``,/@`[Z6T%%D`QV
+M,%"(V<L-]&ES:(+U/SMVI#;?U9:@A&OB#S@N)]YW>!`?O20*`P)[Q2GTCWS:
+9`3G@<$3$LKSYCC7DX.K9`[`==U91`P4$````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_solid_encrypted_filenames.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_solid_encrypted_filenames.rar.uu
new file mode 100644
index 000000000000..4f3dbfb33127
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_solid_encrypted_filenames.rar.uu
@@ -0,0 +1,18 @@
+begin 0744 test_read_format_rar5_solid_encrypted_filenames.rar
+M4F%R(1H'`0";0=T:(00```$/AC5`PSS2$L"IUF$&I":C])K[3<7Y3A09X<`H
+M`7''7U?%(MHPZ3W;#Z7PZEC<2`T4N9L0A@JE?=;1"4#J%N#6H+4KYITU<*=Q
+MG$W?R7^W[#&LN^@M8(VSG.,@!1JFX359D^5#S[,ZW]V]CJ'J?-Z!KX^]Y1FB
+M8I%5/(^2-8V^KY:K1^?K`DVW*MUL>Q9_6`W#,2ST:17"'W'YF2?)NH%5V"_F
+M7;[0VI^.\JJ-T,_(\\5#ZX1HVQJ7KU0UCF#FGD-?NRMKA;X<,[/[*94^27X,
+M#)I<:BO^_-I%B&A1U>S)9__""\/M>Q5AIY'*]EPTNJW+.J57[$X\U:;W">Z;
+M8P\Z0[ZQOI*B*?BJ?B5+(/Z4.4AJ@;()1YUV4+XY#!76WZV]LZ+;GZ_Q#LLP
+MP`7??+NV**I(A-9N^7HX\V!+YJ3%;R<PA5#T<.1"/TKRXC6SM=>%MD?Q5&H@
+M>$VAME3"U$312+@SF+8F2RR0)T"DG^4N,^P46&+TZKQ7KS`4@-:J%_["UP"(
+MK=]N^!UJUO2#6Q*`-`-)^?\/`;^4(@FVLVJ?!D,:O)A6@!TNA%.U^"0-?9H<
+M:0&(UWV=+&[82L>'L4XYO20"@)^<WC4/BKMBFP0G&/3,!*[Y+,F),*X7V7]H
+M3&`4SIL,>I']_<2C]D;_,]/)_1?N1+M@PTDL;'[J1L=5\,-?J5Q`$3>_9<2<
+MS^)#MZ*AE=5@5[O(<]*(EIA62$U`5B18?#W;BB.*0A3O%<OI.7X`?QB-FRV]
+M89*8RNH'P\"9I,0X&F;$<0Z70E(,^KF&PZ5WR-O%K;G`"/=E<\4-*H%FZ]O3
+8G%A)/>[(IVC3ME2PY5F>9$/U'$VW1-BZ
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_encryption.c b/contrib/libarchive/libarchive/test/test_read_format_rar_encryption.c
new file mode 100644
index 000000000000..a184b86b5ffe
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_encryption.c
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) 2003-2018
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer
+ * in this position and unchanged.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "test.h"
+
+/*
+ * All of the archives for this teset contain four files: a.txt, b.txt, c.txt, and d.txt
+ * For solid archives or archvies or archives where filenames are encrypted, all four files are encrypted with the
+ * password "password". For non-solid archives without filename encryption, a.txt and c.txt are not encrypted, b.txt is
+ * encrypted with the password "password", and d.txt is encrypted with the password "password2".
+ *
+ * For all files the file contents is "This is from <filename>" (i.e. "This is from a.txt" etc.)
+ */
+static void test_encrypted_rar_archive(const char *filename, int filenamesEncrypted, int solid)
+{
+ struct archive_entry *ae;
+ struct archive *a;
+ char buff[128];
+ int expected_read_header_result, expected_read_data_result;
+ const int expected_file_size = 18; /* This is from X.txt */
+
+ /* We should only ever fail to read the header when filenames are encrypted. Otherwise we're failing for other
+ * unsupported reasons, in which case we have no hope of detecting encryption */
+ expected_read_header_result = filenamesEncrypted ? ARCHIVE_FATAL : ARCHIVE_OK;
+
+ /* We should only ever fail to read the data for "a.txt" and "c.txt" if they are encrypted */
+ /* NOTE: We'll never attempt this when filenames are encrypted, so we only check for solid here */
+ expected_read_data_result = solid ? ARCHIVE_FATAL : expected_file_size;
+
+ extract_reference_file(filename);
+ assert((a = archive_read_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, filename, 10240));
+
+ /* No data read yet; encryption unknown */
+ assertEqualInt(ARCHIVE_READ_FORMAT_ENCRYPTION_DONT_KNOW, archive_read_has_encrypted_entries(a));
+
+ /* Read the header for "a.txt" */
+ assertEqualIntA(a, expected_read_header_result, archive_read_next_header(a, &ae));
+ if (!filenamesEncrypted) {
+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
+ assertEqualString("a.txt", archive_entry_pathname(ae));
+ assertEqualInt(expected_file_size, archive_entry_size(ae));
+ assertEqualInt(solid, archive_entry_is_data_encrypted(ae));
+ assertEqualInt(0, archive_entry_is_metadata_encrypted(ae));
+ /* NOTE: The reader will set this value to zero on the first header that it reads, even if later entries
+ * are encrypted */
+ assertEqualInt(solid, archive_read_has_encrypted_entries(a));
+ assertEqualIntA(a, expected_read_data_result, archive_read_data(a, buff, sizeof(buff)));
+ if (!solid) {
+ assertEqualMem("This is from a.txt", buff, expected_file_size);
+ }
+ }
+ else {
+ assertEqualInt(1, archive_entry_is_data_encrypted(ae));
+ assertEqualInt(1, archive_entry_is_metadata_encrypted(ae));
+ assertEqualInt(1, archive_read_has_encrypted_entries(a));
+ assertEqualInt(ARCHIVE_FATAL, archive_read_data(a, buff, sizeof(buff)));
+
+ /* Additional attempts to read headers are futile */
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ return;
+ }
+
+ /* From here on out, we can assume that !filenamesEncrypted */
+
+ /* Read the header for "b.txt" */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
+ assertEqualString("b.txt", archive_entry_pathname(ae));
+ assertEqualInt(expected_file_size, archive_entry_size(ae));
+ assertEqualInt(1, archive_entry_is_data_encrypted(ae));
+ assertEqualInt(0, archive_entry_is_metadata_encrypted(ae));
+ assertEqualInt(1, archive_read_has_encrypted_entries(a));
+ assertEqualIntA(a, ARCHIVE_FATAL, archive_read_data(a, buff, sizeof(buff)));
+
+ /* Read the header for "c.txt" */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
+ assertEqualString("c.txt", archive_entry_pathname(ae));
+ assertEqualInt(expected_file_size, archive_entry_size(ae));
+ assertEqualInt(solid, archive_entry_is_data_encrypted(ae));
+ assertEqualInt(0, archive_entry_is_metadata_encrypted(ae));
+ /* After setting to true above, this should forever be true */
+ assertEqualInt(1, archive_read_has_encrypted_entries(a));
+ assertEqualIntA(a, expected_read_data_result, archive_read_data(a, buff, sizeof(buff)));
+ if (!solid) {
+ assertEqualMem("This is from c.txt", buff, expected_file_size);
+ }
+
+ /* Read the header for "d.txt" */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
+ assertEqualString("d.txt", archive_entry_pathname(ae));
+ assertEqualInt(expected_file_size, archive_entry_size(ae));
+ assertEqualInt(1, archive_entry_is_data_encrypted(ae));
+ assertEqualInt(0, archive_entry_is_metadata_encrypted(ae));
+ assertEqualInt(1, archive_read_has_encrypted_entries(a));
+ assertEqualIntA(a, ARCHIVE_FATAL, archive_read_data(a, buff, sizeof(buff)));
+
+ /* End of archive. */
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+ /* Close the archive. */
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_rar4_encrypted)
+{
+ test_encrypted_rar_archive("test_read_format_rar4_encrypted.rar", 0, 0);
+}
+
+DEFINE_TEST(test_read_format_rar4_encrypted_filenames)
+{
+ test_encrypted_rar_archive("test_read_format_rar4_encrypted_filenames.rar", 1, 0);
+}
+
+DEFINE_TEST(test_read_format_rar4_solid_encrypted)
+{
+ /* TODO: If solid RAR4 support is ever added, the following should pass */
+#if 0
+ test_encrypted_rar_archive("test_read_format_rar4_solid_encrypted.rar", 0, 1);
+#else
+ skipping("RAR4 solid archive support not currently available");
+#endif
+}
+
+DEFINE_TEST(test_read_format_rar4_solid_encrypted_filenames)
+{
+ test_encrypted_rar_archive("test_read_format_rar4_solid_encrypted_filenames.rar", 1, 1);
+}
+
+DEFINE_TEST(test_read_format_rar5_encrypted)
+{
+ test_encrypted_rar_archive("test_read_format_rar5_encrypted.rar", 0, 0);
+}
+
+DEFINE_TEST(test_read_format_rar5_encrypted_filenames)
+{
+ test_encrypted_rar_archive("test_read_format_rar5_encrypted_filenames.rar", 1, 0);
+}
+
+DEFINE_TEST(test_read_format_rar5_solid_encrypted)
+{
+ test_encrypted_rar_archive("test_read_format_rar5_solid_encrypted.rar", 0, 1);
+}
+
+DEFINE_TEST(test_read_format_rar5_solid_encrypted_filenames)
+{
+ test_encrypted_rar_archive("test_read_format_rar5_solid_encrypted_filenames.rar", 1, 1);
+}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_tar.c b/contrib/libarchive/libarchive/test/test_read_format_tar.c
index 2b7cd8dedcca..1a2b326d0d43 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_tar.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_tar.c
@@ -437,7 +437,7 @@ static void verify(unsigned char *d, size_t s,
assertA(0 == archive_read_support_filter_all(a));
assertA(0 == archive_read_support_format_all(a));
assertA(0 == archive_read_open_memory(a, buff, s + 1024));
- assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
assertEqualInt(archive_filter_code(a, 0), compression);
assertEqualInt(archive_format(a), format);
assertEqualInt(archive_entry_is_encrypted(ae), 0);
diff --git a/contrib/libarchive/libarchive/test/test_read_format_tar_pax_large_attr.c b/contrib/libarchive/libarchive/test/test_read_format_tar_pax_large_attr.c
new file mode 100644
index 000000000000..1c2b55f9c6fb
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_tar_pax_large_attr.c
@@ -0,0 +1,65 @@
+/*-
+ * Copyright (c) 2003-2023 Tim Kientzle
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "test.h"
+
+/*
+ * Read a pax formatted tar archive that has an extremely large
+ * (8,000,000 bytes) attribute of unknown type. The pax reader should simply
+ * skip the attribute.
+ */
+DEFINE_TEST(test_read_format_tar_pax_large_attr)
+{
+ char name[] = "test_read_format_tar_pax_large_attr.tar.Z";
+ struct archive_entry *ae;
+ struct archive *a;
+
+ assert((a = archive_read_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+ extract_reference_file(name);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name, 10240));
+
+ /* Read first entry. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("foo", archive_entry_pathname(ae));
+ assertEqualInt(1, archive_entry_mtime(ae));
+ assertEqualInt(1000, archive_entry_uid(ae));
+ assertEqualString("tim", archive_entry_uname(ae));
+ assertEqualInt(0, archive_entry_gid(ae));
+ assertEqualString("wheel", archive_entry_gname(ae));
+ assertEqualInt(0100644, archive_entry_mode(ae));
+ assertEqualInt(archive_entry_is_encrypted(ae), 0);
+ assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
+
+ /* Verify the end-of-archive. */
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+ /* Verify that the format detection worked. */
+ assertEqualInt(archive_filter_code(a, 0), ARCHIVE_FILTER_COMPRESS);
+ assertEqualInt(archive_format(a), ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE);
+
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_tar_pax_large_attr.tar.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_tar_pax_large_attr.tar.Z.uu
new file mode 100644
index 000000000000..01eb55588ea7
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_tar_pax_large_attr.tar.Z.uu
@@ -0,0 +1,149 @@
+Decode this file with:
+cat test_read_format_tar_pax_large_attr.tar.Z.uu | uudecode -p | uncompress | hexdump -C
+
+It contains a single tar entry with a pax header that has a single
+attribute of 8000000 bytes
+00000200 38 30 30 30 30 30 30 20 75 6e 6b 6e 6f 77 6e 3d |8000000 unknown=|
+00000210 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b |++++++++++++++++|
+*
+007a13f0 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 0a |+++++++++++++++.|
+
+begin 644 test_read_format_tar_pax_large_attr.tar.Z
+M'YV04,+@05(F#)DR<EZ8>?,&@,.'$"-*G$BQHL6+&"O"V&B#!@T0`#;"N&&C
+M!DB1,&1\#+EQ1L<8,42"B$&CA@P;-UQZM`$"1HP9-6+<```"3\:C2),J73JQ
+MSAPZ8>2PI).F#5.+3\.8,7-U(LJ-)[^"[$JVK-FS:-'B^`H#1!TW:]R\N>.F
+MQXJ[>//JW<NWK]^_@`,+'DRXL.'#B!,K7LRXL>/'D"-+GDRYLN7+F#-KWLRY
+ML^?/H$.+'DVZM.G3J%.K7LVZM>O7L&/+GDV[MNW;N'/KWLV[M^_?P(,+'TZ\
+MN/'CR),K7\Z\N?/GT*-+GTZ]NO7KV+-KW\Z]N_?OX,.+'T^^O/GSZ-.K7\^^
+MO?OW\./+GT^_OOW[^//KW\^_O___``8HX(`$%FC@@0@FJ.""##;HX(,01BCA
+MA!16:.&%&&:HX88<=NCAAR"&*.*())9HXHDHIJCBBBRVZ.*+,,8HXXPTUFCC
+MC3CFJ...//;HXX]`!BGDD$06:>212":IY)),-NGDDU!&*>645%9IY9589JGE
+MEEQVZ>678(8IYIADEFGFF6BFJ>::;+;IYIMPQBGGG'36:>>=>.:IYYY\]NGG
+MGX`&*NB@A!9JZ*&()JKHHHPVZNBCD$8JZ:245FKII9AFJNFFG';JZ:>@ABKJ
+MJ*26:NJIJ*:JZJJLMNKJJ[#&*NNLM-9JZZVXYJKKKKSVZNNOP`8K[+#$%FOL
+ML<@FJ^RRS#;K[+/01BOMM-16:^VUV&:K[;;<=NOMM^"&*^ZXY)9K[KGHIJON
+MNNRVZ^Z[\,8K[[STUFOOO?CFJ^^^_/;K[[\`!RSPP`07;/#!"">L\,(,-^SP
+MPQ!'+/'$%%=L\<489ZSQQAQW[/''((<L\L@DEVSRR2BGK/+*++?L\LLPQRSS
+MS#37;//-..>L\\X\]^SSST`'+?301!=M]-%()ZWTTDPW[?334$<M]=145VWU
+MU5AGK?767'?M]==@ARWVV&27;?;9:*>M]MILM^WVVW#'+??<=-=M]]UXYZWW
+MWGSW[???@`<N^."$%V[XX8@GKOCBC#?N^..01R[YY)17;OGEF&>N^>:<=^[Y
+MYZ"'+OKHI)=N^NFHIZ[ZZJRW[OKKL,<N^^RTUV[[[;CGKOONO/?N^^_`!R_\
+M\,07;_SQR">O_/+,-^_\\]!'+_WTU%=O_?789Z_]]MQW[_WWX(<O_OCDEV_^
+M^>BGK_[Z[+?O_OOPQR___/37;__]^.>O__[\]^___P`,H``'2,`"&O"`"$R@
+M`A?(P`8Z\($0C*`$)TC!"EKP@AC,H`8WR,$.>O"#(`RA"$=(PA*:\(0H3*$*
+M5\C"%KKPA3",H0QG2,,:VO"&.,RA#G?(PQ[Z\(=`#*(0ATC$(AKQB$A,HA*7
+MR,0F.O&)4(RB%*=(Q2I:\8I8S*(6M\C%+GKQBV`,HQC'2,8RFO&,:$RC&M?(
+MQC:Z\8UPC*,<YTC'.MKQCGC,HQ[WR,<^^O&/@`RD(`=)R$(:\I"(3*0B%\G(
+M1CKRD9",I"0G2<E*6O*2F,RD)C?)R4YZ\I.@#*4H1TG*4IKRE*A,I2I7R<I6
+MNO*5L(RE+&=)RUK:\I:XS*4N=\G+7OKRE\`,IC"'2<QB&O.8R$RF,I?)S&8Z
+M\YG0C*8TITG-:EKSFMC,IC:WR<UN>O.;X`RG.,=)SG*:\YSH3*<ZU\G.=KKS
+MG?",ISSG2<]ZVO.>^,RG/O?)SW[Z\Y\`#:A`!TK0@AKTH`A-J$(7RM"&.O2A
+M$(VH1"=*T8I:]*(8S:A&-\K1CGKTHR`-J4A'2M*2FO2D*$VI2E?*TI:Z]*4P
+MC:E,9TK3FMKTICC-J4YWRM.>^O2G0`VJ4(=*U*(:]:A(3:I2E\K4ICKUJ5"-
+MJE2G2M6J6O6J6,VJ5K?*U:YZ]:M@#:M8QTK6LIKUK&A-JUK7RM:VNO6M<(VK
+M7.=*U[K:]:YXS:M>]\K7OOKUKX`-K&`'2]C"&O:PB$VL8A?+V,8Z]K&0C:QD
+M)TO9REKVLIC-K&8WR]G.>O:SH`VM:$=+VM*:]K2H3:UJ5\O:UKKVM;"-K6QG
+M2]O:VO:VN,VM;G?+V][Z]K?`#:YPATO<XAKWN,A-KG*7R]SF.O>YT(VN=*=+
+MW>I:][K8S:YVM\O=[GKWN^`-KWC'2][RFO>\Z$VO>M?+WO:Z][WPC:]\YTO?
+M^MKWOOC-KW[WR]_^^O>_``ZP@`=,X`(;^,`(3K""%\S@!COXP1".L(0G3.$*
+M6_C"&,ZPAC?,X0Y[^,,@#K&(1TSB$IOXQ"A.L8I7S.(6N_C%,(ZQC&=,XQK;
+M^,8XSK&.=\SC'OOXQT`.LI"'3.0B&_G(2$ZRDI?,Y"8[^<E0CK*4ITSE*EOY
+MREC.LI:WS.4N>_G+8`ZSF,=,YC*;^<QH3K.:U\SF-KOYS7".LYSG3.<ZV_G.
+M>,ZSGO?,YS[[^<^`#K2@!TWH0AOZT(A.M*(7S>A&._K1D(ZTI"=-Z4I;^M*8
+MSK2F-\WI3GOZTZ`.M:A'3>I2F_K4J$ZUJE?-ZE:[^M6PCK6L9TWK6MOZUKC.
+MM:YWS>M>^_K7P`ZVL(=-[&(;^]C(3K:RE\WL9CO[V=".MK2G3>UJ6_O:V,ZV
+MMK?-[6Y[^]O@#K>XQTWN<IO[W.A.M[K7S>YVN_O=\(ZWO.=-[WK;^][XSK>^
+M]\WO?OO[WP`/N,`'3O""&_S@"$^XPA?.\(8[_.$0C[C$)T[QBEO\XAC/N,8W
+MSO&.>_SC(`^YR$=.\I*;_.0H3[G*5\[REKO\Y3"/N<QG3O.:V_SF.,^YSG?.
+M\Y[[_.=`#[K0AT[THAO]Z$A/NM*7SO2F._WI4(^ZU*=.]:I;_>I8S[K6M\[U
+MKGO]ZV`/N]C'3O:RF_WL:$^[VM?.]K:[_>UPC[O<YT[WNMO][GC/N][WSO>^
+M^_WO@`^\X`=/^,(;_O"(3[SB%\_XQCO^\9"/O.0G3_G*6_[RF,^\YC?/^<Y[
+M_O.@#[WH1T_ZTIO^]*A/O>I7S_K6N_[UL(^][&=/^]K;_O:XS[WN=\_[WOO^
+M]\`/OO"'3_SB&__XR$^^\I?/_.8[__G0C[[TIT_]ZEO_^MC/OO:WS_WN>__[
+MX`^_^,=/_O*;__SH3[_ZU\_^]KO__?"/O_SG3__ZV__^^,^__O?/__[[__\`
+M&(`".(`$6(`&>(`(F(`*N(`,V(`.^(`0&($2.($46($6>($8F($:N($<V($>
+M^($@&((B.((D6((F>((HF((JN((LV((N^((P&(,R.(,T6(,V>(,XF(,ZN(,\
+MV(,^^(-`&(1".(1$6(1&>(1(F(1*N(1,V(1.^(10&(52.(546(56>(58F(5:
+MN(5<V(5>^(5@&(9B.(9D6(9F>(9HF(9JN(9LV(9N^(9P&(=R.(=T6(=V>(=X
+MF(=ZN(=\V(=^^(>`&(B".(B$6(B&>(B(F(B*N(B,V(B.^(B0&(F2.(F46(F6
+M>(F8F(F:N(F<V(F>^(F@&(JB.(JD6(JF>(JHF(JJN(JLV(JN^(JP&(NR.(NT
+M6(NV>(NXF(NZN(N\V(N^^(O`&(S".(S$6(S&>(S(F(S*N(S,V(S.^(S0&(W2
+M.(W46(W6>(W8F(W:N(W<V(W>^(W@&([B.([D6([F>([HF([JN([LV([N^([P
+M&(_R.(_T6(_V>(_XF(_ZN(_\V(_^^(\`&9`".9`$69`&>9`(F9`*N9`,V9`.
+M^9`0&9$2.9$469$6>9$8F9$:N9$<V9$>^9$@&9(B.9(D69(F>9(HF9(JN9(L
+MV9(N^9(P&9,R.9,T69,V>9,XF9,ZN9,\V9,^^9-`&91".91$691&>91(F91*
+MN91,V91.^910&952.9546956>958F95:N95<V95>^95@&99B.99D699F>99H
+MF99JN99LV99N^99P&9=R.9=T69=V>9=XF9=ZN9=\V9=^^9>`&9B".9B$69B&
+M>9B(F9B*N9B,V9B.^9B0&9F2.9F469F6>9F8F9F:N9F<V9F>^9F@&9JB.9JD
+M69JF>9JHF9JJN9JLV9JN^9JP&9NR.9NT69NV>9NXF9NZN9N\V9N^^9O`&9S"
+M.9S$69S&>9S(F9S*N9S,V9S.^9S0&9W2.9W469W6>9W8F9W:N9W<V9W>^9W@
+M&9[B.9[D69[F>9[HF9[JN9[LV9[N^9[P&9_R.9_T69_V>9_XF9_ZN9_\V9_^
+M^9\`&J`".J`$6J`&>J`(FJ`*NJ`,VJ`.^J`0&J$2.J$46J$6>J$8FJ$:NJ$<
+MVJ$>^J$@&J(B.J(D6J(F>J(HFJ(JNJ(LVJ(N^J(P&J,R.J,T6J,V>J,XFJ,Z
+MNJ,\VJ,^^J-`&J1".J1$6J1&>J1(FJ1*NJ1,VJ1.^J10&J52.J546J56>J58
+MFJ5:NJ5<VJ5>^J5@&J9B.J9D6J9F>J9HFJ9JNJ9LVJ9N^J9P&J=R.J=T6J=V
+M>J=XFJ=ZNJ=\VJ=^^J>`&JB".JB$6JB&>JB(FJB*NJB,VJB.^JB0&JF2.JF4
+M6JF6>JF8FJF:NJF<VJF>^JF@&JJB.JJD6JJF>JJHFJJJNJJLVJJN^JJP&JNR
+M.JNT6JNV>JNXFJNZNJN\VJN^^JO`&JS".JS$6JS&>JS(FJS*NJS,VJS.^JS0
+M&JW2.JW46JW6>JW8FJW:NJW<VJW>^JW@&J[B.J[D6J[F>J[HFJ[JNJ[LVJ[N
+M^J[P&J_R.J_T6J_V>J_XFJ_ZNJ_\VJ_^^J\`&[`".[`$6[`&>[`(F[`*N[`,
+MV[`.^[`0&[$2.[$46[$6>[$8F[$:N[$<V[$>^[$@&[(B.[(D6[(F>[(HF[(J
+MN[(LV[(N^[(P&[,R.[,T6[,V>[,XF[,ZN[,\V[,^^[-`&[1".[1$6[1&>[1(
+MF[1*N[1,V[1.^[10&[52.[546[56>[58F[5:N[5<V[5>^[5@&[9B.[9D6[9F
+M>[9HF[9JN[9LV[9N^[9P&[=R.[=T6[=V>[=XF[=ZN[=\V[=^^[>`&[B".[B$
+M6[B&>[B(F[B*N[B,V[B.^[B0&[F2.[F46[F6>[F8F[F:N[F<V[F>^[F@&[JB
+M.[JD6[JF>[JHF[JJN[JLV[JN^[JP&[NR.[NT6[NV>[NXF[NZN[N\V[N^^[O`
+M&[S".[S$6[S&>[S(F[S*N[S,V[S.^[S0&[W2.[W46[W6>[W8F[W:N[W<V[W>
+M^[W@&[[B.[[D6[[F>[[HF[[JN[[LV[[N^[[P&[_R.[_T6[_V>[_XF[_ZN[_\
+MV[_^^[\`',`"/,`$7,`&?,`(G,`*O,`,W,`._,`0',$2/,$47,$6?,$8G,$:
+MO,$<W,$>_,$@',(B/,(D7,(F?,(HG,(JO,(LW,(N_,(P',,R/,,T7,,V?,,X
+MG,,ZO,,\W,,^_,-`',1"/,1$7,1&?,1(G,1*O,1,W,1._,10',52/,547,56
+M?,58G,5:O,5<W,5>_,5@',9B/,9D7,9F?,9HG,9JO,9LW,9N_,9P',=R/,=T
+M7,=V?,=XG,=ZO,=\W,=^_,>`',B"/,B$7,B&?,B(G,B*O,B,W,B._,B0',F2
+M/,F47,F6?,F8G,F:O,F<W,F>_,F@',JB/,JD7,JF?,JHG,JJO,JLW,JN_,JP
+M',NR/,NT7,NV?,NXG,NZO,N\W,N^_,O`',S"/,S$7,S&?,S(G,S*O,S,W,S.
+M_,S0',W2/,W47,W6?,W8G,W:O,W<W,W>_,W@',[B/,[D7,[F?,[HG,[JO,[L
+MW,[N_,[P',_R/,_T7,_V?,_XG,_ZO,_\W,_^_,\`'=`"/=`$7=`&?=`(G=`*
+MO=`,W=`._=`0'=$2/=$47=$6?=$8G=$:O=$<W=$>_=$@'=(B/=(D7=(F?=(H
+MG=(JO=(LW=(N_=(P'=,R/=,T7=,V?=,XG=,ZO=,\W=,^_=-`'=1"/=1$7=1&
+M?=1(G=1*O=1,W=1._=10'=52/=547=56?=58G=5:O=5<W=5>_=5@'=9B/=9D
+M7=9F?=9HG=9JO=9LW=9N_=9P'==R/==T7==V?==XG==ZO==\W==^_=>`'=B"
+M/=B$7=B&?=B(G=B*O=B,W=B._=B0'=F2/=F47=F6?=F8G=F:O=F<W=F>_=F@
+M'=JB/=JD7=JF?=JHG=JJO=JLW=JN_=JP'=NR/=NT7=NV?=NXG=NZO=N\W=N^
+M_=O`'=S"/=S$7=S&?=S(G=S*O=S,W=S._=S0'=W2/=W47=W6?=W8G=W:O=W<
+MW=W>_=W@'=[B/=[D7=[F?=[HG=[JO=[LW=[N_=[P'=_R/=_T7=_V?=_XG=_Z
+MO=_\W=_^_=\`'N`"/N`$7N`&?N`(GN`*ON`,WN`._N`0'N$2/N$47N$6?N$8
+MGN$:ON$<WN$>_N$@'N(B/N(D7N(F?N(HGN(JON(LWN(N_N(P'N,R/N,T7N,V
+M?N,XGN,ZON,\WN,^_N-`'N1"/N1$7N1&?N1(GN1*ON1,WN1._N10'N52/N54
+M7N56?N58GN5:ON5<WN5>_N5@'N9B/N9D7N9F?N9HGN9JON9LWN9N_N9P'N=R
+M/N=T7N=V?N=XGN=ZON=\WN=^_N>`'NB"/NB$7NB&?NB(GNB*ONB,WNB._NB0
+M'NF2/NF47NF6?NF8GNF:ONF<WNF>_NF@'NJB/NJD7NJF?NJHGNJJONJLWNJN
+M_NJP'NNR/NNT7NNV?NNXGNNZONN\WNN^_NO`'NS"/NS$7NS&?NS(GNS*ONS,
+MWNS._NS0'NW2/NW47NW6?NW8GNW:ONW<WNW>_NW@'N[B/N[D7N[F?N[HGN[J
+MON[LWN[N_N[P'N_R/N_T7N_V?N_XGN_ZON_\WN_^_N\`'_`"/_`$7_`&?_`(
+MG_`*O_`,W_`.__`0'_$2/_$47_$6?_$8G_$:O_$<W_$>__$@'_(B/_(D7_(F
+M?_(HG_(JO_(LW_(N__(P'_,R/_,T7_,V?_,XG_,ZO_,\W_,^__-`'_1"/_1$
+M7_1&?_1(G_1*O_1,W_1.__10'_52/_547_56?_58G_5:O_5<W_5>__5@'_9B
+M/_9D7_9F?_9HG_9JO_9LW_9N__9P'_=R/_=T7_=V?_=XG_=ZO_=\W_=^__>`
+M'_B"/_B$7_B&?_B(G_B*O_B,W_B.__B0'_F2/_F47_F6?_F8G_F:O_F<W_F>
+M__F@'_JB/_JD7_JF?_JHG_JJO_JLW_JN__JP'_NR/_NT7_NV?_NXG_NZO_N\
+MW_N^__O`'_S"/_S$7_S&?_S(G_S*O_S,W_S.__S0'_W2/_W47_W6?_W8G_W:
+MO_W<W_W>__W@'_[B/_[D7_[F?_[HG_[JO_[LW_[N__[P'__R/__T7__V?__X
+MG__ZO__\W__^__\`,``*P`%(``N@`3R`"#`!*L`%R``;H`-\@!`P`DK`"4@!
+M*Z`%O(`8,`-JP`W(`3N@!_R`(#`$BL`12`)+H`D\@2@P!:K`%<@"6Z`+?($P
+M,`;*P!E(`VN@#;R!.#`'ZL`=R`-[H`_\@4`P"`K!(4@$BZ`1/()(,`DJP27(
+M!)N@$WR"4#`*2L$I2`6KH!6\@E@P"VK!+<@%NZ`7_()@,`R*P3%(!LN@&3R#
+M:#`-JL$UR`;;H!M\@W`P#LK!.4@'ZZ`=O(-X,`_JP3W(!_N@'_R#@#`0"L)!
+M2`@+H2$\A(@P$2K"1<@(&Z$C?(20,!)*PDE("2NA);R$F#`3:L)-R`D[H2?\
+MA*`P%(K"44@*2Z$I/(6H,!6JPE7("ENA*WR%L#`6RL)92`MKH2V\A;@P%^K"
+M7<@+>Z$O_(7`,!@*PV%(#(NA,3R&R#`9*L-ER`R;H3-\AM`P&DK#:4@-JZ$U
+MO(;8,!MJPVW(#;NA-_R&X#`<BL-Q2`[+H3D\A^@P':K#=<@.VZ$[?(?P,![*
+MPWE(#^NA/;R'^#`?ZL-]R`_[H3_\AP`Q(`K$@4@0"Z)!/(@(,2$JQ(7($!NB
+M0WR($#$B2L2)2!%ID@)8"`TA+6C$C8@11$)'6`D;02C4@+;`$E!"6&`+,@$E
+MBH08T!-@`@UP"40!!G#$F4@3FT)6D`H;@2I8!8UX!]!`&2@#;"`ML(63*!-J
+MHE$\BD@Q*2K%I<@4FZ)3?(I0,2I*Q:E(%:NB5;R*6#$K:L6MR!6[HE?\BF`Q
+M+(K%L4@6RZ)9/(MH,2VJQ;7(%MNB6WR+<#$NRL6Y2!?KHEV\BW@Q+^K%O<@7
+M^Z)?_(N`,3`*QL%(&`NC83R,B#$Q*L;%R!@;HV-\C)`Q,DK&R4@9*Z-EO(R8
+),3-JQLW(&0$C
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_xar.c b/contrib/libarchive/libarchive/test/test_read_format_xar.c
index daff2921690a..5c306e58522e 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_xar.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_xar.c
@@ -620,7 +620,7 @@ has the corresponding timestamps unset.
archive_write_set_format_xar(a);
archive_write_add_filter_none(a);
size_t used, buffsize = 1500;
- char *buff = (char*) malloc(buffsize);
+ char *buff = malloc(buffsize);
archive_write_open_memory(a, buff, buffsize, &used);
struct archive_entry *ae = archive_entry_new();
@@ -827,7 +827,7 @@ static void verifyB(unsigned char *d, size_t s) {
assertA(0 == archive_read_next_header(a, &entry));
buf_size = (size_t) archive_entry_size(entry);
assertA(buf_size == 12);
- buf = (unsigned char*) malloc(buf_size);
+ buf = malloc(buf_size);
assertA(NULL != buf);
assertA(buf_size == (size_t) archive_read_data(a, buf, buf_size));
free(buf);
@@ -836,7 +836,7 @@ static void verifyB(unsigned char *d, size_t s) {
assertA(0 == archive_read_next_header(a, &entry));
buf_size = (size_t) archive_entry_size(entry);
assertA(buf_size == 12);
- buf = (unsigned char*) malloc(buf_size);
+ buf = malloc(buf_size);
assertA(NULL != buf);
assertA(buf_size == (size_t) archive_read_data(a, buf, buf_size));
free(buf);
@@ -860,3 +860,34 @@ DEFINE_TEST(test_read_format_xar)
verify(archive12, sizeof(archive12), verify12, NULL, GZIP);
verifyB(archive13, sizeof(archive13));
}
+
+DEFINE_TEST(test_read_format_xar_duplicate_filename_node)
+{
+ static const char *reffiles[] =
+ {
+ "test_read_format_xar_duplicate_filename_node.xar",
+ NULL
+ };
+ struct archive_entry *ae;
+ struct archive *a;
+ int r;
+
+ extract_reference_files(reffiles);
+ assert((a = archive_read_new()) != NULL);
+ assertA(0 == archive_read_support_filter_all(a));
+
+ r = archive_read_support_format_xar(a);
+ if (r == ARCHIVE_WARN) {
+ skipping("xar reading not fully supported on this platform");
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ return;
+ }
+
+ assertA(0 == archive_read_open_filenames(a, reffiles, 10240));
+
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("File", archive_entry_pathname(ae));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_xar_duplicate_filename_node.xar.uu b/contrib/libarchive/libarchive/test/test_read_format_xar_duplicate_filename_node.xar.uu
new file mode 100644
index 000000000000..18cbcf5898df
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_xar_duplicate_filename_node.xar.uu
@@ -0,0 +1,14 @@
+begin 644 test_read_format_xar_duplicate_filename_node.xar
+M>&%R(0`<``$````````!EP````````.]`````7B<A5-);H,P%-U7ZAT0>VIC
+MC('((;N<H-UT][$-L<H0@1,E.7T-`0H=TI6?__OSP'>7JG3.JNUT4V]=_P6[
+MCJI%(W5=;-VWU[T7N[OT^8E?H+6/XW#3B`%8*%H%QMIY1E<J)9A0#S//IZ\$
+M;PC=^(RCM<ID=U#BHSM53F>NI=JZW0%\=R0MW>1YITR*.1K1S'3ZUL?A:`"C
+M-S2YFP2Y+I6CI:UFX;0&&W]O&8X&^#]AKD>5Y@,QP)G0=2-M&E'"DIBC^V\F
+MI3IKH>HF]0-&68!]PM$LF[6JW@8S9CM4K<Q/6O:%]\\L*^ZR8BD3O[<<)^^V
+M'XM>][$>J%9K57B@"FM5"0;FG_V7JB[,(?5MHB-<D.,<R<^1SD-=S7203VLX
+M;0D<CZ46PS:ABU?<]-%UT-(`6G'09R6]W_<KIG$LJ9\%"6!)"&80R#`)<"!R
+M'(DL)T`CH2384K\[6J5U,2T(\V>8#&+(0L`DQED2!@!)1(,PS^.$,I&)+"-1
+M&`*)./KIZ:N]:-%?COHMO%\?NI\?1_T]?@(L`P/8\;44V2:R;"\D48GC?CRL
+C(UAG)C5XG./E`@``)@`8>)R%4TEN@S`4W5?J'1![:F.,@<@`
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_nested.c b/contrib/libarchive/libarchive/test/test_read_format_zip_nested.c
index 95945638b074..b32e4bb94211 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_nested.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_nested.c
@@ -49,7 +49,7 @@ DEFINE_TEST(test_read_format_zip_nested)
/* Save contents of inner Zip. */
innerLength = (size_t)archive_entry_size(ae);
- inner = calloc(innerLength, sizeof(char));
+ inner = calloc(innerLength, sizeof(*inner));
assertEqualInt(innerLength, archive_read_data(a, inner, innerLength));
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_traditional_encryption_data.c b/contrib/libarchive/libarchive/test/test_read_format_zip_traditional_encryption_data.c
index 8f0cfe6dc896..0cf2d0a1576d 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_traditional_encryption_data.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_traditional_encryption_data.c
@@ -41,7 +41,7 @@ DEFINE_TEST(test_read_format_zip_traditional_encryption_data)
assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a));
if (ARCHIVE_OK != archive_write_set_options(a,
"zip:encryption=traditional")) {
- skipping("This system does not have cryptographic liberary");
+ skipping("This system does not have cryptographic library");
archive_write_free(a);
return;
}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes.c b/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes.c
index 7c5d5ea61f77..9b609b4f29ff 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes.c
@@ -38,7 +38,7 @@ test_winzip_aes(const char *refname, int need_libz)
assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a));
if (ARCHIVE_OK != archive_write_set_options(a,
"zip:encryption=aes256")) {
- skipping("This system does not have cryptographic liberary");
+ skipping("This system does not have cryptographic library");
archive_write_free(a);
return;
}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes_large.c b/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes_large.c
index 4b6202bde164..4f52bb911147 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes_large.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes_large.c
@@ -39,7 +39,7 @@ DEFINE_TEST(test_read_format_zip_winzip_aes256_large)
assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a));
if (ARCHIVE_OK != archive_write_set_options(a,
"zip:encryption=aes256")) {
- skipping("This system does not have cryptographic liberary");
+ skipping("This system does not have cryptographic library");
archive_write_free(a);
return;
}
diff --git a/contrib/libarchive/libarchive/test/test_read_truncated_filter.c b/contrib/libarchive/libarchive/test/test_read_truncated_filter.c
index 9c5348d935d2..fc8ddf51b73b 100644
--- a/contrib/libarchive/libarchive/test/test_read_truncated_filter.c
+++ b/contrib/libarchive/libarchive/test/test_read_truncated_filter.c
@@ -43,12 +43,12 @@ test_truncation(const char *compression,
int i, r, use_prog;
buffsize = 2000000;
- assert(NULL != (buff = (char *)malloc(buffsize)));
+ assert(NULL != (buff = malloc(buffsize)));
if (buff == NULL)
return;
datasize = 10000;
- assert(NULL != (data = (char *)malloc(datasize)));
+ assert(NULL != (data = malloc(datasize)));
if (data == NULL) {
free(buff);
return;
diff --git a/contrib/libarchive/libarchive/test/test_sparse_basic.c b/contrib/libarchive/libarchive/test/test_sparse_basic.c
index 0350df1e9f27..963d5e8beeaf 100644
--- a/contrib/libarchive/libarchive/test/test_sparse_basic.c
+++ b/contrib/libarchive/libarchive/test/test_sparse_basic.c
@@ -67,13 +67,16 @@ struct sparse {
static void create_sparse_file(const char *, const struct sparse *);
-#if defined(__APPLE__)
-/* On APFS holes need to be at least 4096x4097 bytes */
-#define MIN_HOLE 16781312
-#else
-/* Elsewhere we work with 4096*10 bytes */
-#define MIN_HOLE 409600
-#endif
+/* This should be large enough that any OS/filesystem that
+ * does support sparse files is certain to store a gap this big
+ * as a hole. */
+/* A few data points:
+ * = ZFS on FreeBSD needs this to be at least 200kB
+ * = macOS APFS needs this to be at least 4096x4097 bytes
+ *
+ * 32MiB here is bigger than either of the above.
+ */
+#define MIN_HOLE (32 * 1024UL * 1024UL)
#if defined(_WIN32) && !defined(__CYGWIN__)
#include <winioctl.h>
diff --git a/contrib/libarchive/libarchive/test/test_tar_large.c b/contrib/libarchive/libarchive/test/test_tar_large.c
index 7ff3fee17717..c1f379162ad7 100644
--- a/contrib/libarchive/libarchive/test/test_tar_large.c
+++ b/contrib/libarchive/libarchive/test/test_tar_large.c
@@ -99,7 +99,7 @@ memory_write(struct archive *a, void *_private, const void *buff, size_t size)
} else {
/* Yes, we're assuming the very first write is metadata. */
/* It's header or metadata, copy and save it. */
- block = (struct memblock *)malloc(sizeof(*block));
+ block = malloc(sizeof(*block));
memset(block, 0, sizeof(*block));
block->size = size;
block->buff = malloc(size);
diff --git a/contrib/libarchive/libarchive/test/test_ustar_filename_encoding.c b/contrib/libarchive/libarchive/test/test_ustar_filename_encoding.c
index cc62453f1c1b..1242bd1d3cd2 100644
--- a/contrib/libarchive/libarchive/test/test_ustar_filename_encoding.c
+++ b/contrib/libarchive/libarchive/test/test_ustar_filename_encoding.c
@@ -390,3 +390,105 @@ DEFINE_TEST(test_ustar_filename_encoding_CP932_UTF8)
assertEqualMem(buff, "\xE8\xA1\xA8.txt", 7);
}
+DEFINE_TEST(test_ustar_filename_encoding_UTF16_win)
+{
+#if !defined(_WIN32) || defined(__CYGWIN__)
+ skipping("This test is meant to verify unicode string handling"
+ " on Windows with UTF-16 names");
+ return;
+#else
+ struct archive *a;
+ struct archive_entry *entry;
+ char buff[4096];
+ size_t used;
+
+ /*
+ * Don't call setlocale because we're verifying that the '_w' functions
+ * work as expected when 'hdrcharset' is UTF-8
+ */
+
+ /* Part 1: file */
+ a = archive_write_new();
+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_ustar(a));
+ if (archive_write_set_options(a, "hdrcharset=UTF-8") != ARCHIVE_OK) {
+ skipping("This system cannot convert character-set"
+ " from UTF-16 to UTF-8.");
+ archive_write_free(a);
+ return;
+ }
+ assertEqualInt(ARCHIVE_OK,
+ archive_write_open_memory(a, buff, sizeof(buff), &used));
+
+ entry = archive_entry_new2(a);
+ /* Set the filename using a UTF-16 string */
+ archive_entry_copy_pathname_w(entry, L"\u8868.txt");
+ archive_entry_set_filetype(entry, AE_IFREG);
+ archive_entry_set_size(entry, 0);
+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry));
+ archive_entry_free(entry);
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /* Check UTF-8 version. */
+ assertEqualMem(buff, "\xE8\xA1\xA8.txt", 7);
+
+ /* Part 2: directory */
+ a = archive_write_new();
+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_ustar(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_set_options(a, "hdrcharset=UTF-8"));
+ assertEqualInt(ARCHIVE_OK,
+ archive_write_open_memory(a, buff, sizeof(buff), &used));
+
+ entry = archive_entry_new2(a);
+ /* Set the directory name using a UTF-16 string */
+ /* NOTE: Explicitly not adding trailing slash to test that code path */
+ archive_entry_copy_pathname_w(entry, L"\u8868");
+ archive_entry_set_filetype(entry, AE_IFDIR);
+ archive_entry_set_size(entry, 0);
+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry));
+ archive_entry_free(entry);
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /* Check UTF-8 version. */
+ assertEqualMem(buff, "\xE8\xA1\xA8/", 4);
+
+ /* Part 3: symlink */
+ a = archive_write_new();
+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_ustar(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_set_options(a, "hdrcharset=UTF-8"));
+ assertEqualInt(ARCHIVE_OK,
+ archive_write_open_memory(a, buff, sizeof(buff), &used));
+
+ entry = archive_entry_new2(a);
+ /* Set the symlink target using a UTF-16 string */
+ archive_entry_set_pathname(entry, "link.txt");
+ archive_entry_copy_symlink_w(entry, L"\u8868.txt");
+ archive_entry_set_filetype(entry, AE_IFLNK);
+ archive_entry_set_symlink_type(entry, AE_SYMLINK_TYPE_FILE);
+ archive_entry_set_size(entry, 0);
+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry));
+ archive_entry_free(entry);
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /* Check UTF-8 version. */
+ assertEqualMem(buff + 157, "\xE8\xA1\xA8.txt", 7);
+
+ /* Part 4: hardlink */
+ a = archive_write_new();
+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_ustar(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_set_options(a, "hdrcharset=UTF-8"));
+ assertEqualInt(ARCHIVE_OK,
+ archive_write_open_memory(a, buff, sizeof(buff), &used));
+
+ entry = archive_entry_new2(a);
+ /* Set the symlink target using a UTF-16 string */
+ archive_entry_set_pathname(entry, "link.txt");
+ archive_entry_copy_hardlink_w(entry, L"\u8868.txt");
+ archive_entry_set_size(entry, 0);
+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry));
+ archive_entry_free(entry);
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /* Check UTF-8 version. */
+ assertEqualMem(buff + 157, "\xE8\xA1\xA8.txt", 7);
+#endif
+}
diff --git a/contrib/libarchive/libarchive/test/test_write_disk_secure_noabsolutepaths.c b/contrib/libarchive/libarchive/test/test_write_disk_secure_noabsolutepaths.c
new file mode 100644
index 000000000000..1c9254a42093
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_write_disk_secure_noabsolutepaths.c
@@ -0,0 +1,88 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2024 Mostyn Bramley-Moore <mostyn@antipode.se>
+ */
+
+#include "test.h"
+
+#include <stdlib.h>
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#define UNLINK _unlink
+#else
+#include <unistd.h>
+#define UNLINK unlink
+#endif
+
+/*
+ * Exercise security checks that should prevent writing absolute paths
+ * when extracting archives.
+ */
+DEFINE_TEST(test_write_disk_secure_noabsolutepaths)
+{
+ struct archive *a, *ad;
+ struct archive_entry *ae;
+
+ char buff[10000];
+
+ size_t used;
+
+ // Create an archive_write object.
+ assert((a = archive_write_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_ustar(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, sizeof(buff), &used));
+
+ // Create an absolute path for a test file inside testworkdir.
+ const char *entry_suffix = "/badfile";
+ size_t entry_suffix_length = strlen(entry_suffix);
+ size_t testworkdir_length = strlen(testworkdir);
+ size_t temp_absolute_file_name_length = testworkdir_length + entry_suffix_length;
+ char *temp_absolute_file_name = calloc(1, temp_absolute_file_name_length + 1); // +1 for null character.
+ assertEqualInt(snprintf(temp_absolute_file_name, temp_absolute_file_name_length + 1, "%s%s", testworkdir, entry_suffix),
+ temp_absolute_file_name_length);
+
+ // Convert to a unix-style path, so we can compare it to the entry
+ // path when reading back the archive.
+ for (char *p = temp_absolute_file_name; *p != '\0'; p++)
+ if (*p == '\\') *p = '/';
+
+ // Add a regular file entry with an absolute path.
+ assert((ae = archive_entry_new()) != NULL);
+ archive_entry_copy_pathname(ae, temp_absolute_file_name);
+ archive_entry_set_mode(ae, S_IFREG | 0777);
+ archive_entry_set_size(ae, 6);
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+ archive_entry_free(ae);
+ assertEqualInt(6, archive_write_data(a, "hello", 6));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ // Now try to extract the data.
+ assert((a = archive_read_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, buff, used));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString(temp_absolute_file_name, archive_entry_pathname(ae));
+ assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
+ assertEqualInt(AE_IFREG | 0777, archive_entry_mode(ae));
+ assertEqualInt(6, archive_entry_size(ae));
+
+ // This should succeed.
+ assertEqualInt(ARCHIVE_OK, archive_read_extract(a, ae, 0));
+ UNLINK(temp_absolute_file_name);
+
+ // This should fail, since the archive entry has an absolute path.
+ assert(ARCHIVE_OK != archive_read_extract(a, ae, ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS));
+
+ // This should also fail.
+ assert((ad = archive_write_new()) != NULL);
+ assertEqualInt(ARCHIVE_OK, archive_write_disk_set_options(a, ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS));
+ assert(ARCHIVE_OK != archive_read_extract2(a, ae, ad));
+
+ assertEqualInt(ARCHIVE_OK, archive_write_free(ad));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_b64encode.c b/contrib/libarchive/libarchive/test/test_write_filter_b64encode.c
index e33ff8a9817c..d7c4763b1cdc 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_b64encode.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_b64encode.c
@@ -41,10 +41,10 @@ DEFINE_TEST(test_write_filter_b64encode)
int i;
buffsize = 2000000;
- assert(NULL != (buff = (char *)malloc(buffsize)));
+ assert(NULL != (buff = malloc(buffsize)));
datasize = 10000;
- assert(NULL != (data = (char *)malloc(datasize)));
+ assert(NULL != (data = malloc(datasize)));
memset(data, 0, datasize);
/*
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_bzip2.c b/contrib/libarchive/libarchive/test/test_write_filter_bzip2.c
index f48bcc213231..20ca0d9a7b22 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_bzip2.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_bzip2.c
@@ -43,12 +43,12 @@ DEFINE_TEST(test_write_filter_bzip2)
int i, r, use_prog;
buffsize = 2000000;
- assert(NULL != (buff = (char *)malloc(buffsize)));
+ assert(NULL != (buff = malloc(buffsize)));
if (buff == NULL)
return;
datasize = 10000;
- assert(NULL != (data = (char *)malloc(datasize)));
+ assert(NULL != (data = malloc(datasize)));
if (data == NULL) {
free(buff);
return;
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_compress.c b/contrib/libarchive/libarchive/test/test_write_filter_compress.c
index f7b9565b7db2..6a0c022c48e1 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_compress.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_compress.c
@@ -43,10 +43,10 @@ DEFINE_TEST(test_write_filter_compress)
int i;
buffsize = 1000000;
- assert(NULL != (buff = (char *)malloc(buffsize)));
+ assert(NULL != (buff = malloc(buffsize)));
datasize = 10000;
- assert(NULL != (data = (char *)malloc(datasize)));
+ assert(NULL != (data = malloc(datasize)));
memset(data, 0, datasize);
assert((a = archive_write_new()) != NULL);
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_gzip.c b/contrib/libarchive/libarchive/test/test_write_filter_gzip.c
index ae81a4fc59d6..14b14ecdd105 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_gzip.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_gzip.c
@@ -44,12 +44,12 @@ DEFINE_TEST(test_write_filter_gzip)
int i, r, use_prog = 0;
buffsize = 2000000;
- assert(NULL != (buff = (char *)malloc(buffsize)));
+ assert(NULL != (buff = malloc(buffsize)));
if (buff == NULL)
return;
datasize = 10000;
- assert(NULL != (data = (char *)malloc(datasize)));
+ assert(NULL != (data = malloc(datasize)));
if (data == NULL) {
free(buff);
return;
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_gzip_timestamp.c b/contrib/libarchive/libarchive/test/test_write_filter_gzip_timestamp.c
index ee29f034231c..a148f818dcec 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_gzip_timestamp.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_gzip_timestamp.c
@@ -37,12 +37,12 @@ DEFINE_TEST(test_write_filter_gzip_timestamp)
int r, use_prog = 0;
buffsize = 10000;
- assert(NULL != (buff = (char *)malloc(buffsize)));
+ assert(NULL != (buff = malloc(buffsize)));
if (buff == NULL)
return;
datasize = 10000;
- assert(NULL != (data = (char *)malloc(datasize)));
+ assert(NULL != (data = malloc(datasize)));
if (data == NULL) {
free(buff);
return;
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_lrzip.c b/contrib/libarchive/libarchive/test/test_write_filter_lrzip.c
index 2efc2ec284a4..8da7ae39af5d 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_lrzip.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_lrzip.c
@@ -46,10 +46,10 @@ DEFINE_TEST(test_write_filter_lrzip)
}
buffsize = 2000000;
- assert(NULL != (buff = (char *)malloc(buffsize)));
+ assert(NULL != (buff = malloc(buffsize)));
datasize = 10000;
- assert(NULL != (data = (char *)malloc(datasize)));
+ assert(NULL != (data = malloc(datasize)));
memset(data, 0, datasize);
/*
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_lz4.c b/contrib/libarchive/libarchive/test/test_write_filter_lz4.c
index 97a80321dede..74a910b53530 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_lz4.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_lz4.c
@@ -58,10 +58,10 @@ DEFINE_TEST(test_write_filter_lz4)
assertEqualInt(ARCHIVE_OK, archive_write_free(a));
buffsize = 2000000;
- assert(NULL != (buff = (char *)malloc(buffsize)));
+ assert(NULL != (buff = malloc(buffsize)));
datasize = 10000;
- assert(NULL != (data = (char *)calloc(datasize, 1)));
+ assert(NULL != (data = calloc(datasize, 1)));
filecount = 10;
/*
@@ -302,10 +302,10 @@ test_options(const char *options)
assertEqualInt(ARCHIVE_OK, archive_write_free(a));
buffsize = 2000000;
- assert(NULL != (buff = (char *)malloc(buffsize)));
+ assert(NULL != (buff = malloc(buffsize)));
datasize = 10000;
- assert(NULL != (data = (char *)calloc(datasize, 1)));
+ assert(NULL != (data = calloc(datasize, 1)));
filecount = 10;
/*
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_lzip.c b/contrib/libarchive/libarchive/test/test_write_filter_lzip.c
index 8d6544668980..631fd96bd5ce 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_lzip.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_lzip.c
@@ -43,12 +43,12 @@ DEFINE_TEST(test_write_filter_lzip)
int i, r;
buffsize = 2000000;
- assert(NULL != (buff = (char *)malloc(buffsize)));
+ assert(NULL != (buff = malloc(buffsize)));
if (buff == NULL)
return;
datasize = 10000;
- assert(NULL != (data = (char *)malloc(datasize)));
+ assert(NULL != (data = malloc(datasize)));
if (data == NULL) {
free(buff);
return;
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_lzma.c b/contrib/libarchive/libarchive/test/test_write_filter_lzma.c
index d7c0c5b21b6b..9bb2d8eb7943 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_lzma.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_lzma.c
@@ -42,12 +42,12 @@ DEFINE_TEST(test_write_filter_lzma)
int i, r;
buffsize = 2000000;
- assert(NULL != (buff = (char *)malloc(buffsize)));
+ assert(NULL != (buff = malloc(buffsize)));
if (buff == NULL)
return;
datasize = 10000;
- assert(NULL != (data = (char *)malloc(datasize)));
+ assert(NULL != (data = malloc(datasize)));
if (data == NULL) {
free(buff);
return;
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_lzop.c b/contrib/libarchive/libarchive/test/test_write_filter_lzop.c
index 87843f49bd3b..8b74d224dced 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_lzop.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_lzop.c
@@ -52,10 +52,10 @@ DEFINE_TEST(test_write_filter_lzop)
}
buffsize = 2000000;
- assert(NULL != (buff = (char *)malloc(buffsize)));
+ assert(NULL != (buff = malloc(buffsize)));
datasize = 10000;
- assert(NULL != (data = (char *)calloc(datasize, 1)));
+ assert(NULL != (data = calloc(datasize, 1)));
filecount = 10;
/*
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_uuencode.c b/contrib/libarchive/libarchive/test/test_write_filter_uuencode.c
index 7eda278b35cd..fbd0520880fe 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_uuencode.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_uuencode.c
@@ -41,10 +41,10 @@ DEFINE_TEST(test_write_filter_uuencode)
int i;
buffsize = 2000000;
- assert(NULL != (buff = (char *)malloc(buffsize)));
+ assert(NULL != (buff = malloc(buffsize)));
datasize = 10000;
- assert(NULL != (data = (char *)malloc(datasize)));
+ assert(NULL != (data = malloc(datasize)));
memset(data, 0, datasize);
/*
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_xz.c b/contrib/libarchive/libarchive/test/test_write_filter_xz.c
index db4e5dafa274..6baa0473b8e2 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_xz.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_xz.c
@@ -43,12 +43,12 @@ DEFINE_TEST(test_write_filter_xz)
int i, r;
buffsize = 2000000;
- assert(NULL != (buff = (char *)malloc(buffsize)));
+ assert(NULL != (buff = malloc(buffsize)));
if (buff == NULL)
return;
datasize = 10000;
- assert(NULL != (data = (char *)malloc(datasize)));
+ assert(NULL != (data = malloc(datasize)));
if (data == NULL) {
free(buff);
return;
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_zstd.c b/contrib/libarchive/libarchive/test/test_write_filter_zstd.c
index da711f9e4bf9..41451ca86251 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_zstd.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_zstd.c
@@ -37,12 +37,12 @@ DEFINE_TEST(test_write_filter_zstd)
int i, r;
buffsize = 2000000;
- assert(NULL != (buff = (char *)malloc(buffsize)));
+ assert(NULL != (buff = malloc(buffsize)));
if (buff == NULL)
return;
datasize = 10000;
- assert(NULL != (data = (char *)malloc(datasize)));
+ assert(NULL != (data = malloc(datasize)));
if (data == NULL) {
free(buff);
return;
@@ -230,12 +230,8 @@ DEFINE_TEST(test_write_filter_zstd)
archive_write_set_filter_option(a, NULL, "max-frame-out", "1GB"));
#endif
#if ZSTD_VERSION_NUMBER >= MINVER_LONG
- if ((int)(sizeof(size_t) == 4))
- assertEqualIntA(a, ARCHIVE_OK,
- archive_write_set_filter_option(a, NULL, "long", "26"));
- else
- assertEqualIntA(a, ARCHIVE_OK,
- archive_write_set_filter_option(a, NULL, "long", "27"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "long", "23"));
assertEqualIntA(a, ARCHIVE_FAILED,
archive_write_set_filter_option(a, NULL, "long", "-1")); /* negative */
#endif
diff --git a/contrib/libarchive/libarchive/test/test_write_format_iso9660_filename.c b/contrib/libarchive/libarchive/test/test_write_format_iso9660_filename.c
index 713883bdc8cb..ca617c3a94d8 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_iso9660_filename.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_iso9660_filename.c
@@ -321,7 +321,7 @@ DEFINE_TEST(test_write_format_iso9660_filename)
*/
fcnt = create_iso_image(buff, buffsize, &used, NULL);
- fns.names = (char **)malloc(sizeof(char *) * fcnt);
+ fns.names = malloc(sizeof(char *) * fcnt);
assert(fns.names != NULL);
if (fns.names == NULL) {
free(buff);
diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip.c b/contrib/libarchive/libarchive/test/test_write_format_zip.c
index 54240eeb7afe..583c78c3ace4 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_zip.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_zip.c
@@ -699,7 +699,7 @@ DEFINE_TEST(test_write_format_zip_traditional_pkware_encryption)
assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a));
if (ARCHIVE_OK != archive_write_set_options(a,
"zip:encryption=zipcrypt")) {
- skipping("This system does not have cryptographic liberary");
+ skipping("This system does not have cryptographic library");
archive_write_free(a);
free(buff);
return;
@@ -779,7 +779,7 @@ DEFINE_TEST(test_write_format_zip_winzip_aes128_encryption)
assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a));
if (ARCHIVE_OK != archive_write_set_options(a, "zip:encryption=aes128"))
{
- skipping("This system does not have cryptographic liberary");
+ skipping("This system does not have cryptographic library");
archive_write_free(a);
free(buff);
return;
@@ -859,7 +859,7 @@ DEFINE_TEST(test_write_format_zip_winzip_aes256_encryption)
assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a));
if (ARCHIVE_OK != archive_write_set_options(a, "zip:encryption=aes256"))
{
- skipping("This system does not have cryptographic liberary");
+ skipping("This system does not have cryptographic library");
archive_write_free(a);
free(buff);
return;
diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip_entry_size_unset.c b/contrib/libarchive/libarchive/test/test_write_format_zip_entry_size_unset.c
index 10c191f7ce7d..fe69478160d5 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_zip_entry_size_unset.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_entry_size_unset.c
@@ -205,7 +205,7 @@ static void verify_contents(const char *zip_buff, size_t size)
assertEqualInt(i4(data_descriptor + 4), crc);
/* Check compressed size */
assertEqualInt(i4(data_descriptor + 8), sizeof(file_data1) + sizeof(file_data2));
- /* Chcek uncompresed size */
+ /* Check uncompressed size */
assertEqualInt(i4(data_descriptor + 12), sizeof(file_data1) + sizeof(file_data2));
/* Get folder entry in central directory */
diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip_large.c b/contrib/libarchive/libarchive/test/test_write_format_zip_large.c
index 90bd16aaa581..d08dae46d807 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_zip_large.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_large.c
@@ -96,7 +96,7 @@ memory_write(struct archive *a, void *_private, const void *buff, size_t size)
} else {
/* Yes, we're assuming the very first write is metadata. */
/* It's header or metadata, copy and save it. */
- block = (struct fileblock *)malloc(sizeof(*block));
+ block = malloc(sizeof(*block));
memset(block, 0, sizeof(*block));
block->size = (int)size;
block->buff = malloc(size);
diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip_stream.c b/contrib/libarchive/libarchive/test/test_write_format_zip_stream.c
index aff6a31ae171..78bda6c27702 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_zip_stream.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_stream.c
@@ -71,7 +71,11 @@ DEFINE_TEST(test_write_format_zip_stream)
unsigned long crc;
unsigned long compressed_size = 0;
int file_perm = 00644;
+#ifdef HAVE_ZLIB_H
int zip_version = 20;
+#else
+ int zip_version = 10;
+#endif
int zip_compression = 8;
short file_uid = 10, file_gid = 20;
unsigned char *buff, *buffend, *p;
@@ -82,6 +86,7 @@ DEFINE_TEST(test_write_format_zip_stream)
const char *file_name = "file";
#ifndef HAVE_ZLIB_H
+ zip_version = 10;
zip_compression = 0;
#endif
diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip_windows_path.c b/contrib/libarchive/libarchive/test/test_write_format_zip_windows_path.c
new file mode 100644
index 000000000000..c8be48293638
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_windows_path.c
@@ -0,0 +1,100 @@
+/*-
+ * Copyright (c) 2024 Yang Zhou
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer
+ * in this position and unchanged.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "test.h"
+
+static void
+test_with_hdrcharset(const char *charset)
+{
+ static const char *raw_path = "dir_stored\\dir1/file";
+ static const char *replaced = "dir_stored/dir1/file";
+ struct archive *a;
+ size_t used;
+ size_t buffsize = 1000000;
+ char *buff;
+
+ buff = malloc(buffsize);
+
+ /* Create a new archive in memory. */
+ assert((a = archive_write_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_zip(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a));
+ if (charset != NULL) {
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_option(a, "zip", "hdrcharset", charset));
+ }
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used));
+
+ /*
+ * Write a file with mixed '/' and '\'
+ */
+ struct archive_entry *ae;
+ assert((ae = archive_entry_new()) != NULL);
+ archive_entry_set_mtime(ae, 1, 10);
+ archive_entry_copy_pathname(ae, raw_path);
+ archive_entry_set_mode(ae, AE_IFREG | 0755);
+ archive_entry_set_size(ae, 0);
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+ archive_entry_free(ae);
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_free(a));
+ dumpfile("constructed.zip", buff, used);
+
+ /*
+ * Check if the generated archive contains and only contains expected path.
+ * Intentionally avoid using `archive_read_XXX` functions because it silently replaces '\' with '/',
+ * making it difficult to get the exact path written in the archive.
+ */
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ const char *expected = replaced;
+ const char *unexpected = raw_path;
+#else
+ const char *expected = raw_path;
+ const char *unexpected = replaced;
+#endif
+ int expected_found = 0;
+ int unexpected_found = 0;
+ size_t len = strlen(raw_path);
+ for (char *ptr = buff; ptr < (buff + used - len); ptr++) {
+ if (memcmp(ptr, expected, len) == 0)
+ ++expected_found;
+ if (memcmp(ptr, unexpected, len) == 0)
+ ++unexpected_found;
+ }
+ failure("should find expected path in both local and central header (charset=%s)", charset);
+ assertEqualInt(2, expected_found);
+ failure("should not find unexpected path in anywhere (charset=%s)", charset);
+ assertEqualInt(0, unexpected_found);
+}
+
+DEFINE_TEST(test_write_format_zip_windows_path)
+{
+ test_with_hdrcharset(NULL);
+#if defined(_WIN32) && !defined(__CYGWIN__) || HAVE_ICONV
+ test_with_hdrcharset("ISO-8859-1");
+ test_with_hdrcharset("UTF-8");
+#endif
+}
diff --git a/contrib/libarchive/libarchive/test/test_zip_filename_encoding.c b/contrib/libarchive/libarchive/test/test_zip_filename_encoding.c
index 448fb9b1d4ef..b6786f2c3b18 100644
--- a/contrib/libarchive/libarchive/test/test_zip_filename_encoding.c
+++ b/contrib/libarchive/libarchive/test/test_zip_filename_encoding.c
@@ -527,3 +527,98 @@ DEFINE_TEST(test_zip_filename_encoding_CP932)
assertEqualInt(0, buff[7]);
assertEqualMem(buff + 30, "abcABC", 6);
}
+
+DEFINE_TEST(test_zip_filename_encoding_UTF16_win)
+{
+#if !defined(_WIN32) || defined(__CYGWIN__)
+ skipping("This test is meant to verify unicode string handling"
+ " on Windows with UTF-16 names");
+ return;
+#else
+ struct archive *a;
+ struct archive_entry *entry;
+ char buff[4096];
+ size_t used;
+
+ /*
+ * Don't call setlocale because we're verifying that the '_w' functions
+ * work as expected when 'hdrcharset' is UTF-8
+ */
+
+ /* Part 1: file */
+ a = archive_write_new();
+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_zip(a));
+ if (archive_write_set_options(a, "hdrcharset=UTF-8") != ARCHIVE_OK) {
+ skipping("This system cannot convert character-set"
+ " from UTF-16 to UTF-8.");
+ archive_write_free(a);
+ return;
+ }
+ assertEqualInt(ARCHIVE_OK,
+ archive_write_open_memory(a, buff, sizeof(buff), &used));
+
+ entry = archive_entry_new2(a);
+ /* Set the filename using a UTF-16 string */
+ archive_entry_copy_pathname_w(entry, L"\u8868.txt");
+ archive_entry_set_filetype(entry, AE_IFREG);
+ archive_entry_set_size(entry, 0);
+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry));
+ archive_entry_free(entry);
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /* A bit 11 of general purpose flag should be 1,
+ * which indicates the filename charset is UTF-8. */
+ assertEqualInt(0x08, buff[7]);
+ /* Check UTF-8 version. */
+ assertEqualMem(buff + 30, "\xE8\xA1\xA8.txt", 7);
+
+ /* Part 2: directory */
+ a = archive_write_new();
+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_zip(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_set_options(a, "hdrcharset=UTF-8"));
+ assertEqualInt(ARCHIVE_OK,
+ archive_write_open_memory(a, buff, sizeof(buff), &used));
+
+ entry = archive_entry_new2(a);
+ /* Set the directory name using a UTF-16 string */
+ /* NOTE: Explicitly not adding trailing slash to test that code path */
+ archive_entry_copy_pathname_w(entry, L"\u8868");
+ archive_entry_set_filetype(entry, AE_IFDIR);
+ archive_entry_set_size(entry, 0);
+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry));
+ archive_entry_free(entry);
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /* A bit 11 of general purpose flag should be 1,
+ * which indicates the filename charset is UTF-8. */
+ assertEqualInt(0x08, buff[7]);
+ /* Check UTF-8 version. */
+ assertEqualMem(buff+ 30, "\xE8\xA1\xA8/", 4);
+
+ /* Part 3: symlink */
+ a = archive_write_new();
+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_zip(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_set_options(a, "hdrcharset=UTF-8"));
+ assertEqualInt(ARCHIVE_OK,
+ archive_write_open_memory(a, buff, sizeof(buff), &used));
+
+ entry = archive_entry_new2(a);
+ /* Set the symlink target using a UTF-16 string */
+ archive_entry_set_pathname(entry, "link.txt");
+ archive_entry_copy_symlink_w(entry, L"\u8868.txt");
+ archive_entry_set_filetype(entry, AE_IFLNK);
+ archive_entry_set_symlink_type(entry, AE_SYMLINK_TYPE_FILE);
+ archive_entry_set_size(entry, 0);
+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry));
+ archive_entry_free(entry);
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /* A bit 11 of general purpose flag should be 0,
+ * because the file name is ASCII. */
+ assertEqualInt(0, buff[7]);
+ /* Check UTF-8 version. */
+ assertEqualMem(buff + 38, "\xE8\xA1\xA8.txt", 7);
+
+ /* NOTE: ZIP does not support hardlinks */
+#endif
+}
diff --git a/contrib/libarchive/tar/bsdtar.1 b/contrib/libarchive/tar/bsdtar.1
index fe9ec9504674..7a7b0d5d9fb1 100644
--- a/contrib/libarchive/tar/bsdtar.1
+++ b/contrib/libarchive/tar/bsdtar.1
@@ -1,28 +1,10 @@
+.\"
+.\" SPDX-License-Identifier: BSD-2-Clause
+.\"
.\" Copyright (c) 2003-2007 Tim Kientzle
.\" Copyright (c) 2017 Martin Matuska
.\" All rights reserved.
.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
.Dd April 23, 2024
.Dt TAR 1
.Os
diff --git a/contrib/libarchive/tar/bsdtar.c b/contrib/libarchive/tar/bsdtar.c
index 42baab2861bd..439093ded76a 100644
--- a/contrib/libarchive/tar/bsdtar.c
+++ b/contrib/libarchive/tar/bsdtar.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2008 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "bsdtar_platform.h"
@@ -43,6 +25,9 @@
#ifdef HAVE_LANGINFO_H
#include <langinfo.h>
#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
#ifdef HAVE_LOCALE_H
#include <locale.h>
#endif
diff --git a/contrib/libarchive/tar/bsdtar.h b/contrib/libarchive/tar/bsdtar.h
index 22056c7920c4..42520c88f2bc 100644
--- a/contrib/libarchive/tar/bsdtar.h
+++ b/contrib/libarchive/tar/bsdtar.h
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef BSDTAR_H_INCLUDED
diff --git a/contrib/libarchive/tar/bsdtar_platform.h b/contrib/libarchive/tar/bsdtar_platform.h
index a4f37d95e9b3..02f64dcd7a04 100644
--- a/contrib/libarchive/tar/bsdtar_platform.h
+++ b/contrib/libarchive/tar/bsdtar_platform.h
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
@@ -115,7 +97,7 @@
#define __LA_NORETURN __attribute__((__noreturn__))
#elif defined(_MSC_VER)
#define __LA_NORETURN __declspec(noreturn)
-#else
+#else
#define __LA_NORETURN
#endif
diff --git a/contrib/libarchive/tar/cmdline.c b/contrib/libarchive/tar/cmdline.c
index 2a89f42b0880..35cb1cb43bf1 100644
--- a/contrib/libarchive/tar/cmdline.c
+++ b/contrib/libarchive/tar/cmdline.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2008 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
diff --git a/contrib/libarchive/tar/creation_set.c b/contrib/libarchive/tar/creation_set.c
index 5cd1232b764c..6883090418b0 100644
--- a/contrib/libarchive/tar/creation_set.c
+++ b/contrib/libarchive/tar/creation_set.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "bsdtar_platform.h"
@@ -134,7 +116,7 @@ _cset_add_filter(struct creation_set *cset, int program, const char *filter)
struct filter_set *new_ptr;
char *new_filter;
- new_ptr = (struct filter_set *)realloc(cset->filters,
+ new_ptr = realloc(cset->filters,
sizeof(*cset->filters) * (cset->filter_count + 1));
if (new_ptr == NULL)
lafe_errc(1, 0, "No memory");
diff --git a/contrib/libarchive/tar/read.c b/contrib/libarchive/tar/read.c
index a7f14a07bb35..8563fe714f9a 100644
--- a/contrib/libarchive/tar/read.c
+++ b/contrib/libarchive/tar/read.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "bsdtar_platform.h"
diff --git a/contrib/libarchive/tar/subst.c b/contrib/libarchive/tar/subst.c
index 9747abb906c4..0194cc84bd2d 100644
--- a/contrib/libarchive/tar/subst.c
+++ b/contrib/libarchive/tar/subst.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2008 Joerg Sonnenberger
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "bsdtar_platform.h"
diff --git a/contrib/libarchive/tar/test/test.h b/contrib/libarchive/tar/test/test.h
index 549357b4e0fd..823ec0824f8c 100644
--- a/contrib/libarchive/tar/test/test.h
+++ b/contrib/libarchive/tar/test/test.h
@@ -1,26 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2017 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/* Every test program should #include "test.h" as the first thing. */
diff --git a/contrib/libarchive/tar/test/test_0.c b/contrib/libarchive/tar/test/test_0.c
index 7a3c2e46858f..9c25056255e1 100644
--- a/contrib/libarchive/tar/test/test_0.c
+++ b/contrib/libarchive/tar/test/test_0.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_basic.c b/contrib/libarchive/tar/test/test_basic.c
index a59236c92b55..a74ed0a13591 100644
--- a/contrib/libarchive/tar/test/test_basic.c
+++ b/contrib/libarchive/tar/test/test_basic.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_copy.c b/contrib/libarchive/tar/test/test_copy.c
index fd47a6d877e6..d1263dc7928f 100644
--- a/contrib/libarchive/tar/test/test_copy.c
+++ b/contrib/libarchive/tar/test/test_copy.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
@@ -190,7 +172,7 @@ create_tree(void)
#define LIMIT_USTAR 100
static void
-verify_tree(size_t limit)
+verify_tree(size_t limit, const char *format)
{
char name1[260];
char name2[260];
@@ -203,6 +185,7 @@ verify_tree(size_t limit)
/* Verify a file named "f/abcdef..." */
snprintf(name1, sizeof(name1), "f/%s", filenames[i]);
if (i <= limit) {
+ failure("Verifying %s", format);
assertFileExists(name1);
assertFileContents(name1, (int)strlen(name1), name1);
}
@@ -210,6 +193,7 @@ verify_tree(size_t limit)
snprintf(name2, sizeof(name2), "l/%s", filenames[i]);
if (i + 2 <= limit) {
/* Verify hardlink "l/abcdef..." */
+ failure("Verifying %s", format);
assertIsHardlink(name1, name2);
/* Verify hardlink "m/abcdef..." */
name2[0] = 'm';
@@ -220,13 +204,16 @@ verify_tree(size_t limit)
/* Verify symlink "s/abcdef..." */
snprintf(name1, sizeof(name1), "s/%s", filenames[i]);
snprintf(name2, sizeof(name2), "../f/%s", filenames[i]);
- if (strlen(name2) <= limit)
+ if (strlen(name2) <= limit) {
+ failure("Verifying %s", format);
assertIsSymlink(name1, name2, 0);
+ }
}
/* Verify dir "d/abcdef...". */
snprintf(name1, sizeof(name1), "d/%s", filenames[i]);
if (i + 1 <= limit) { /* +1 for trailing slash */
+ failure("Verifying %s", format);
if (assertIsDir(name1, -1)) {
/* TODO: opendir/readdir this
* directory and make sure
@@ -246,7 +233,7 @@ verify_tree(size_t limit)
char dir[2];
dir[0] = *dp; dir[1] = '\0';
d = opendir(dir);
- failure("Unable to open dir '%s'", dir);
+ failure("Unable to open dir '%s' for testing %s", dir, format);
if (!assert(d != NULL))
continue;
while ((de = readdir(d)) != NULL) {
@@ -278,25 +265,25 @@ verify_tree(size_t limit)
}
static void
-copy_basic(void)
+copy_basic(const char *extra_args, const char *name)
{
int r;
/* NOTE: for proper operation on cygwin-1.5 and windows, the
- * length of the name of the directory below, "plain", must be
+ * length of the name of the directory below must be
* less than or equal to the length of the name of the original
* directory, "original" This restriction derives from the
* extremely limited pathname lengths on those platforms.
*/
- assertMakeDir("plain", 0775);
- assertEqualInt(0, chdir("plain"));
+ assertMakeDir(name, 0775);
+ assertEqualInt(0, chdir(name));
/*
* Use the tar program to create an archive.
*/
- r = systemf("%s cf archive -C ../original f d l m s >pack.out 2>pack.err",
- testprog);
- failure("Error invoking \"%s cf\"", testprog);
+ r = systemf("%s cf archive %s -C ../original f d l m s >pack.out 2>pack.err",
+ testprog, extra_args);
+ failure("Error invoking \"%s cf archive %s\"", testprog, extra_args);
assertEqualInt(r, 0);
/* Verify that nothing went to stdout or stderr. */
@@ -314,7 +301,7 @@ copy_basic(void)
assertEmptyFile("unpack.err");
assertEmptyFile("unpack.out");
- verify_tree(LIMIT_NONE);
+ verify_tree(LIMIT_NONE, name);
assertEqualInt(0, chdir(".."));
}
@@ -357,8 +344,8 @@ copy_ustar(void)
assertEmptyFile("unpack.err");
assertEmptyFile("unpack.out");
- verify_tree(LIMIT_USTAR);
- assertEqualInt(0, chdir("../.."));
+ verify_tree(LIMIT_USTAR, "ustar");
+ assertEqualInt(0, chdir(".."));
}
DEFINE_TEST(test_copy)
@@ -367,8 +354,11 @@ DEFINE_TEST(test_copy)
create_tree(); /* Create sample files in "original" dir. */
/* Test simple "tar -c | tar -x" pipeline copy. */
- copy_basic();
+ copy_basic("", "default");
/* Same, but constrain to ustar format. */
copy_ustar();
+
+ /* Same, but with pax format. */
+ copy_basic(" --format pax", "pax");
}
diff --git a/contrib/libarchive/tar/test/test_empty_mtree.c b/contrib/libarchive/tar/test/test_empty_mtree.c
index 11cdfb56690a..9ef098fe4e47 100644
--- a/contrib/libarchive/tar/test/test_empty_mtree.c
+++ b/contrib/libarchive/tar/test/test_empty_mtree.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2009 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_extract_tar_Z.c b/contrib/libarchive/tar/test/test_extract_tar_Z.c
index b03aca6d1da5..cd195560ceb0 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_Z.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_Z.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_extract_tar_bz2.c b/contrib/libarchive/tar/test/test_extract_tar_bz2.c
index 02b3ee326d5b..3c30c5ac4bb0 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_bz2.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_bz2.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_extract_tar_grz.c b/contrib/libarchive/tar/test/test_extract_tar_grz.c
index f0adf994dec6..f0eb0017191b 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_grz.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_grz.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_extract_tar_gz.c b/contrib/libarchive/tar/test/test_extract_tar_gz.c
index b17d66f01529..b0e69da7b57e 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_gz.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_gz.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_extract_tar_lrz.c b/contrib/libarchive/tar/test/test_extract_tar_lrz.c
index d6049809bb22..8b63f7de448b 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_lrz.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_lrz.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_extract_tar_lz.c b/contrib/libarchive/tar/test/test_extract_tar_lz.c
index 3889138928d1..221cc46855d5 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_lz.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_lz.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_extract_tar_lz4.c b/contrib/libarchive/tar/test/test_extract_tar_lz4.c
index f0e03ed3206e..eef2275b7313 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_lz4.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_lz4.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012,2014 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_extract_tar_lzma.c b/contrib/libarchive/tar/test/test_extract_tar_lzma.c
index fd9f547fb524..68b9e4918316 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_lzma.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_lzma.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_extract_tar_lzo.c b/contrib/libarchive/tar/test/test_extract_tar_lzo.c
index 9c05e15a6b04..22566a290b7c 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_lzo.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_lzo.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_extract_tar_xz.c b/contrib/libarchive/tar/test/test_extract_tar_xz.c
index 8684072d76f5..f9cd18d1e2ad 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_xz.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_xz.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_extract_tar_zstd.c b/contrib/libarchive/tar/test/test_extract_tar_zstd.c
index 1eced8817387..a2e8d43928e2 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_zstd.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_zstd.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2017 Sean Purcell
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_format_newc.c b/contrib/libarchive/tar/test/test_format_newc.c
index 5357cc7cdae4..ec84b75b7f19 100644
--- a/contrib/libarchive/tar/test/test_format_newc.c
+++ b/contrib/libarchive/tar/test/test_format_newc.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_help.c b/contrib/libarchive/tar/test/test_help.c
index fd97a217b789..51575bbfe287 100644
--- a/contrib/libarchive/tar/test/test_help.c
+++ b/contrib/libarchive/tar/test/test_help.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_leading_slash.c b/contrib/libarchive/tar/test/test_leading_slash.c
index ca64ad154055..7aab992c842c 100644
--- a/contrib/libarchive/tar/test/test_leading_slash.c
+++ b/contrib/libarchive/tar/test/test_leading_slash.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2014 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_missing_file.c b/contrib/libarchive/tar/test/test_missing_file.c
index 1cc40f3745e8..7c0557268dfc 100644
--- a/contrib/libarchive/tar/test/test_missing_file.c
+++ b/contrib/libarchive/tar/test/test_missing_file.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2016 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_C_mtree.c b/contrib/libarchive/tar/test/test_option_C_mtree.c
index 25679644af61..b6ab159941d8 100644
--- a/contrib/libarchive/tar/test/test_option_C_mtree.c
+++ b/contrib/libarchive/tar/test/test_option_C_mtree.c
@@ -1,29 +1,11 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2018 The FreeBSD Foundation
* All rights reserved.
- *
+ *
* This software was developed by Arshan Khanifar <arshankhanifar@gmail.com>
* under sponsorship from the FreeBSD Foundation.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
@@ -39,12 +21,12 @@ DEFINE_TEST(test_option_C_mtree)
char *p;
#endif
- /* an absolute path to mtree file */
- char *mtree_file = "/METALOG.mtree";
+ /* an absolute path to mtree file */
+ char *mtree_file = "/METALOG.mtree";
char *absolute_path = malloc(strlen(testworkdir) + strlen(mtree_file) + 1);
strcpy(absolute_path, testworkdir);
strcat(absolute_path, mtree_file );
-
+
/* Create an archive using an mtree file. */
assertMakeFile(absolute_path, 0777, content);
assertMakeDir("bar", 0775);
diff --git a/contrib/libarchive/tar/test/test_option_C_upper.c b/contrib/libarchive/tar/test/test_option_C_upper.c
index cadc924e1d47..a4eb82a153f2 100644
--- a/contrib/libarchive/tar/test/test_option_C_upper.c
+++ b/contrib/libarchive/tar/test/test_option_C_upper.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2010 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_H_upper.c b/contrib/libarchive/tar/test/test_option_H_upper.c
index 097a9729d26f..ac4993bdef06 100644
--- a/contrib/libarchive/tar/test/test_option_H_upper.c
+++ b/contrib/libarchive/tar/test/test_option_H_upper.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2010 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
@@ -78,7 +60,7 @@ DEFINE_TEST(test_option_H_upper)
/* Test 3: With -H, some symlinks on command line. */
assertMakeDir("test3", 0755);
assertEqualInt(0,
- systemf("%s -cf test3/archive.tar -H -C in ld1 d1 link2 linkY >test2/c.out 2>test2/c.err", testprog));
+ systemf("%s -cf test3/archive.tar -H -C in ld1 d1 link2 linkY >test3/c.out 2>test3/c.err", testprog));
assertChdir("test3");
assertEqualInt(0,
systemf("%s -xf archive.tar >c.out 2>c.err", testprog));
@@ -88,4 +70,20 @@ DEFINE_TEST(test_option_H_upper)
assertIsReg("link2", umasked(0644));
assertIsSymlink("linkY", "d1/fileY", 0);
assertChdir("..");
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ /* Test 4: With -H, using wildcards with some symlinks on command line. (wildcards are supported only in Windows) */
+ assertMakeDir("test4", 0755);
+ assertEqualInt(0,
+ systemf("%s -cf test4/archive.tar -H -C in * >test4/c.out 2>test4/c.err", testprog));
+ assertChdir("test4");
+ assertEqualInt(0,
+ systemf("%s -xf archive.tar >c.out 2>c.err", testprog));
+ assertIsDir("ld1", umasked(0755));
+ assertIsSymlink("d1/linkX", "fileX", 0);
+ assertIsSymlink("d1/link1", "file1", 0);
+ assertIsReg("link2", umasked(0644));
+ assertIsSymlink("linkY", "d1/fileY", 0);
+ assertChdir("..");
+#endif
}
diff --git a/contrib/libarchive/tar/test/test_option_L_upper.c b/contrib/libarchive/tar/test/test_option_L_upper.c
index fd1ed0a52c76..919c15c6f376 100644
--- a/contrib/libarchive/tar/test/test_option_L_upper.c
+++ b/contrib/libarchive/tar/test/test_option_L_upper.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2010 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
@@ -78,7 +60,7 @@ DEFINE_TEST(test_option_L_upper)
/* Test 3: With -L, some symlinks on command line. */
assertMakeDir("test3", 0755);
assertEqualInt(0,
- systemf("%s -cf test3/archive.tar -L -C in ld1 d1 link2 linkY >test2/c.out 2>test2/c.err", testprog));
+ systemf("%s -cf test3/archive.tar -L -C in ld1 d1 link2 linkY >test3/c.out 2>test3/c.err", testprog));
assertChdir("test3");
assertEqualInt(0,
systemf("%s -xf archive.tar >c.out 2>c.err", testprog));
@@ -88,4 +70,20 @@ DEFINE_TEST(test_option_L_upper)
assertIsReg("link2", umasked(0644));
assertIsSymlink("linkY", "d1/fileY", 0);
assertChdir("..");
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ /* Test 4: With -L, using wildcards with some symlinks on command line. (wildcards are supported only in Windows) */
+ assertMakeDir("test4", 0755);
+ assertEqualInt(0,
+ systemf("%s -cf test4/archive.tar -L -C in * >test4/c.out 2>test4/c.err", testprog));
+ assertChdir("test4");
+ assertEqualInt(0,
+ systemf("%s -xf archive.tar >c.out 2>c.err", testprog));
+ assertIsDir("ld1", umasked(0755));
+ assertIsReg("d1/link1", umasked(0644));
+ assertIsSymlink("d1/linkX", "fileX", 0);
+ assertIsReg("link2", umasked(0644));
+ assertIsSymlink("linkY", "d1/fileY", 0);
+ assertChdir("..");
+#endif
}
diff --git a/contrib/libarchive/tar/test/test_option_O_upper.c b/contrib/libarchive/tar/test/test_option_O_upper.c
index a5540dbe8417..f70d7e3b4413 100644
--- a/contrib/libarchive/tar/test/test_option_O_upper.c
+++ b/contrib/libarchive/tar/test/test_option_O_upper.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2010 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_P.c b/contrib/libarchive/tar/test/test_option_P.c
new file mode 100644
index 000000000000..e63da3e0875c
--- /dev/null
+++ b/contrib/libarchive/tar/test/test_option_P.c
@@ -0,0 +1,82 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2024 Mostyn Bramley-Moore <mostyn@antipode.se>
+ */
+
+#include "test.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#define UNLINK _unlink
+#else
+#define UNLINK unlink
+#endif
+
+DEFINE_TEST(test_extract_tar_absolute_paths)
+{
+ int r;
+
+ // Create an absolute path for a test file inside testworkdir.
+ char *entry_suffix = "/tar-noabs";
+ size_t entry_suffix_length = strlen(entry_suffix);
+ size_t testworkdir_length = strlen(testworkdir);
+ size_t temp_absolute_file_name_length = testworkdir_length + entry_suffix_length;
+ char *temp_absolute_file_name = calloc(1, temp_absolute_file_name_length + 1); // +1 for null character.
+ assertEqualInt(snprintf(temp_absolute_file_name, temp_absolute_file_name_length + 1, "%s%s", testworkdir, entry_suffix),
+ temp_absolute_file_name_length);
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ // I'm unsure how to specify paths with spaces for the test invocation on windows.
+ // Adding quotes doesn't seem to work. We should find a way to escape these paths,
+ // but for now let's fail in a place that's obviously related to the test setup if
+ // testworkdir contains spaces.
+ for (char *p = temp_absolute_file_name; *p != '\0'; p++)
+ {
+ assert(*p != ' ');
+ if (*p == ' ') break;
+ }
+#endif
+
+ // Create the file.
+ const char *sample_data = "test file from test_extract_tar_absolute_paths";
+ assertMakeFile(temp_absolute_file_name, 0644, sample_data);
+
+ // Create an archive with the test file, using an absolute path.
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ r = systemf("%s --absolute-paths -cf test.tar %s", testprog, temp_absolute_file_name);
+#else
+ r = systemf("%s --absolute-paths -cf test.tar \"%s\"", testprog, temp_absolute_file_name);
+#endif
+ assertEqualInt(r, 0);
+
+ UNLINK(temp_absolute_file_name);
+
+ // Extracting the archive without -P / --absolute-paths should strip leading drive letter or slash
+ r = systemf("%s -xf test.tar", testprog);
+ assertEqualInt(r, 0);
+ assertFileNotExists(temp_absolute_file_name);
+
+ // Check that the mangled path exists.
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ assertFileExists(temp_absolute_file_name + 3); // Skip the drive letter, colon and slash.
+ UNLINK(temp_absolute_file_name + 3);
+#else
+ assertFileExists(temp_absolute_file_name + 1); // Skip the slash.
+ UNLINK(temp_absolute_file_name + 1);
+#endif
+
+ // Extracting the archive with -P / --absolute-paths should create the file.
+ r = systemf("%s --absolute-paths -xf test.tar", testprog);
+ assertEqualInt(r, 0);
+ assertFileExists(temp_absolute_file_name);
+
+ // Check that the mangled path wasn't created.
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ assertFileNotExists(temp_absolute_file_name + 3); // Skip the drive letter, colon and slash.
+#else
+ assertFileNotExists(temp_absolute_file_name + 1); // Skip the slash.
+#endif
+}
diff --git a/contrib/libarchive/tar/test/test_option_T_upper.c b/contrib/libarchive/tar/test/test_option_T_upper.c
index c64767fcfb84..e3c5bc2d30cd 100644
--- a/contrib/libarchive/tar/test/test_option_T_upper.c
+++ b/contrib/libarchive/tar/test/test_option_T_upper.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2008 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_U_upper.c b/contrib/libarchive/tar/test/test_option_U_upper.c
index 4518a5f9fd8e..841874b6b196 100644
--- a/contrib/libarchive/tar/test/test_option_U_upper.c
+++ b/contrib/libarchive/tar/test/test_option_U_upper.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2010 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_X_upper.c b/contrib/libarchive/tar/test/test_option_X_upper.c
index b5ea98b9a0d7..a2eac676b2e7 100644
--- a/contrib/libarchive/tar/test/test_option_X_upper.c
+++ b/contrib/libarchive/tar/test/test_option_X_upper.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2010 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_a.c b/contrib/libarchive/tar/test/test_option_a.c
index 52797411c751..0a58fc665c1f 100644
--- a/contrib/libarchive/tar/test/test_option_a.c
+++ b/contrib/libarchive/tar/test/test_option_a.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_acls.c b/contrib/libarchive/tar/test/test_option_acls.c
index 333ac2e4fb47..5bbe977e5cf2 100644
--- a/contrib/libarchive/tar/test/test_option_acls.c
+++ b/contrib/libarchive/tar/test/test_option_acls.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2017 Martin Matuska
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_b.c b/contrib/libarchive/tar/test/test_option_b.c
index d7e0f399c297..2b2225de6531 100644
--- a/contrib/libarchive/tar/test/test_option_b.c
+++ b/contrib/libarchive/tar/test/test_option_b.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2010 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_b64encode.c b/contrib/libarchive/tar/test/test_option_b64encode.c
index b9a2b809ea4a..3a083e79b31f 100644
--- a/contrib/libarchive/tar/test/test_option_b64encode.c
+++ b/contrib/libarchive/tar/test/test_option_b64encode.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_exclude.c b/contrib/libarchive/tar/test/test_option_exclude.c
index b21ec624aec2..9c8d8bec27b9 100644
--- a/contrib/libarchive/tar/test/test_option_exclude.c
+++ b/contrib/libarchive/tar/test/test_option_exclude.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2010 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_exclude_vcs.c b/contrib/libarchive/tar/test/test_option_exclude_vcs.c
index ec4dc5594f5c..ccc19d29d4dd 100644
--- a/contrib/libarchive/tar/test/test_option_exclude_vcs.c
+++ b/contrib/libarchive/tar/test/test_option_exclude_vcs.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2019 Martin Matuska
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
@@ -63,7 +45,7 @@ DEFINE_TEST(test_option_exclude_vcs)
assertMakeDir("_darcs", 0755);
assertMakeFile("_darcs/format", 0644, "");
assertChdir("..");
-
+
assertEqualInt(0, systemf("%s -c -C in -f included.tar .", testprog));
assertEqualInt(0,
systemf("%s -c --exclude-vcs -C in -f excluded.tar .", testprog));
diff --git a/contrib/libarchive/tar/test/test_option_fflags.c b/contrib/libarchive/tar/test/test_option_fflags.c
index 045c780edefc..a796f571f49a 100644
--- a/contrib/libarchive/tar/test/test_option_fflags.c
+++ b/contrib/libarchive/tar/test/test_option_fflags.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2017 Martin Matuska
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
@@ -97,7 +79,7 @@ DEFINE_TEST(test_option_fflags)
assertMakeDir("nofflags_fflags", 0755);
clear_fflags("nofflags_fflags");
r = systemf("%s -x -C nofflags_fflags --no-same-permissions --fflags -f nofflags.tar >nofflags_fflags.out 2>nofflags_fflags.err", testprog);
- assertEqualInt(r, 0);
+ assertEqualInt(r, 0);
assertUnequalFflags("f", "nofflags_fflags/f");
/* Extract nofflags with nofflags */
diff --git a/contrib/libarchive/tar/test/test_option_gid_gname.c b/contrib/libarchive/tar/test/test_option_gid_gname.c
index a4cff1ab2f64..38220772dc12 100644
--- a/contrib/libarchive/tar/test/test_option_gid_gname.c
+++ b/contrib/libarchive/tar/test/test_option_gid_gname.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2010 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_group.c b/contrib/libarchive/tar/test/test_option_group.c
index d429ddab9f9f..8d3cc651362a 100644
--- a/contrib/libarchive/tar/test/test_option_group.c
+++ b/contrib/libarchive/tar/test/test_option_group.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2010 Tim Kientzle
* Copyright (c) 2024 Haelwenn (lanodan) Monnier
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_grzip.c b/contrib/libarchive/tar/test/test_option_grzip.c
index d898e4408151..d63751631a46 100644
--- a/contrib/libarchive/tar/test/test_option_grzip.c
+++ b/contrib/libarchive/tar/test/test_option_grzip.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_ignore_zeros.c b/contrib/libarchive/tar/test/test_option_ignore_zeros.c
index 985ad3082fce..31e0dd940460 100644
--- a/contrib/libarchive/tar/test/test_option_ignore_zeros.c
+++ b/contrib/libarchive/tar/test/test_option_ignore_zeros.c
@@ -1,27 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2021 Ryan Libby
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
@@ -89,6 +70,14 @@ DEFINE_TEST(test_option_ignore_zeros_mode_x)
DEFINE_TEST(test_option_ignore_zeros_mode_c)
{
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ // The first command run by systemf below prints this to stderr:
+ // bsdtar.exe: a: Can't translate uname '(null)' to UTF-8
+ // bsdtar.exe: b: Can't translate uname '(null)' to UTF-8
+ skipping("TODO: figure out why this test fails on github workflows with MSVC");
+ return;
+#endif
+
if (make_files())
return;
diff --git a/contrib/libarchive/tar/test/test_option_j.c b/contrib/libarchive/tar/test/test_option_j.c
index cf4d91d0afac..a67ef7412738 100644
--- a/contrib/libarchive/tar/test/test_option_j.c
+++ b/contrib/libarchive/tar/test/test_option_j.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_k.c b/contrib/libarchive/tar/test/test_option_k.c
index 873a1209b0a9..85bf1c8263ae 100644
--- a/contrib/libarchive/tar/test/test_option_k.c
+++ b/contrib/libarchive/tar/test/test_option_k.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2010 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_keep_newer_files.c b/contrib/libarchive/tar/test/test_option_keep_newer_files.c
index 2572a98c5812..18e1e1152251 100644
--- a/contrib/libarchive/tar/test/test_option_keep_newer_files.c
+++ b/contrib/libarchive/tar/test/test_option_keep_newer_files.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2010 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_lrzip.c b/contrib/libarchive/tar/test/test_option_lrzip.c
index 8bf4633f643e..0ed128586c01 100644
--- a/contrib/libarchive/tar/test/test_option_lrzip.c
+++ b/contrib/libarchive/tar/test/test_option_lrzip.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_lz4.c b/contrib/libarchive/tar/test/test_option_lz4.c
index 1b766d04969f..6a9a4c3d429b 100644
--- a/contrib/libarchive/tar/test/test_option_lz4.c
+++ b/contrib/libarchive/tar/test/test_option_lz4.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2014 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_lzma.c b/contrib/libarchive/tar/test/test_option_lzma.c
index 1d8697b53ee8..e309a64d2bad 100644
--- a/contrib/libarchive/tar/test/test_option_lzma.c
+++ b/contrib/libarchive/tar/test/test_option_lzma.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_lzop.c b/contrib/libarchive/tar/test/test_option_lzop.c
index d96a14f08fea..ac9b57c973dd 100644
--- a/contrib/libarchive/tar/test/test_option_lzop.c
+++ b/contrib/libarchive/tar/test/test_option_lzop.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_n.c b/contrib/libarchive/tar/test/test_option_n.c
index a6bda0599e16..0a20c5a897e8 100644
--- a/contrib/libarchive/tar/test/test_option_n.c
+++ b/contrib/libarchive/tar/test/test_option_n.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2010 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_newer_than.c b/contrib/libarchive/tar/test/test_option_newer_than.c
index a250a4c8d8c6..4486472f1de5 100644
--- a/contrib/libarchive/tar/test/test_option_newer_than.c
+++ b/contrib/libarchive/tar/test/test_option_newer_than.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2010 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_nodump.c b/contrib/libarchive/tar/test/test_option_nodump.c
index 6a5b66e3215a..33768a47f28c 100644
--- a/contrib/libarchive/tar/test/test_option_nodump.c
+++ b/contrib/libarchive/tar/test/test_option_nodump.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_older_than.c b/contrib/libarchive/tar/test/test_option_older_than.c
index d57c4d414b8f..ffbde8da7cdd 100644
--- a/contrib/libarchive/tar/test/test_option_older_than.c
+++ b/contrib/libarchive/tar/test/test_option_older_than.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2010 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_owner.c b/contrib/libarchive/tar/test/test_option_owner.c
index 04c86cc0e8d4..ed212031058d 100644
--- a/contrib/libarchive/tar/test/test_option_owner.c
+++ b/contrib/libarchive/tar/test/test_option_owner.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2010 Tim Kientzle
* Copyright (c) 2024 Haelwenn (lanodan) Monnier
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_passphrase.c b/contrib/libarchive/tar/test/test_option_passphrase.c
index 74f3d3d5d031..968a33c00bdb 100644
--- a/contrib/libarchive/tar/test/test_option_passphrase.c
+++ b/contrib/libarchive/tar/test/test_option_passphrase.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2014 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_q.c b/contrib/libarchive/tar/test/test_option_q.c
index fd4b55e545ae..4bb3ef86b743 100644
--- a/contrib/libarchive/tar/test/test_option_q.c
+++ b/contrib/libarchive/tar/test/test_option_q.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_r.c b/contrib/libarchive/tar/test/test_option_r.c
index 655b973ad1e2..622512c95f71 100644
--- a/contrib/libarchive/tar/test/test_option_r.c
+++ b/contrib/libarchive/tar/test/test_option_r.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_s.c b/contrib/libarchive/tar/test/test_option_s.c
index 564793b97d5e..1a36280c111f 100644
--- a/contrib/libarchive/tar/test/test_option_s.c
+++ b/contrib/libarchive/tar/test/test_option_s.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2008 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_safe_writes.c b/contrib/libarchive/tar/test/test_option_safe_writes.c
index d1e36cfd4736..b88479bc5f35 100644
--- a/contrib/libarchive/tar/test/test_option_safe_writes.c
+++ b/contrib/libarchive/tar/test/test_option_safe_writes.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2020 Martin Matuska
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_uid_uname.c b/contrib/libarchive/tar/test/test_option_uid_uname.c
index 261e3b86565b..a6f3c5bb979b 100644
--- a/contrib/libarchive/tar/test/test_option_uid_uname.c
+++ b/contrib/libarchive/tar/test/test_option_uid_uname.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2010 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_uuencode.c b/contrib/libarchive/tar/test/test_option_uuencode.c
index 4bb6e0898c2b..f492764eed6a 100644
--- a/contrib/libarchive/tar/test/test_option_uuencode.c
+++ b/contrib/libarchive/tar/test/test_option_uuencode.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_xattrs.c b/contrib/libarchive/tar/test/test_option_xattrs.c
index eef6c779bb52..8c711a9ae4b2 100644
--- a/contrib/libarchive/tar/test/test_option_xattrs.c
+++ b/contrib/libarchive/tar/test/test_option_xattrs.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2017 Martin Matuska
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
@@ -73,7 +55,7 @@ DEFINE_TEST(test_option_xattrs)
/* Extract noxattrs with xattrs */
assertMakeDir("noxattrs_xattrs", 0755);
r = systemf("%s -x -C noxattrs_xattrs --no-same-permissions --xattrs -f noxattrs.tar >noxattrs_xattrs.out 2>noxattrs_xattrs.err", testprog);
- assertEqualInt(r, 0);
+ assertEqualInt(r, 0);
readval = getXattr("noxattrs_xattrs/f", testattr, &size);
assert(readval == NULL);
diff --git a/contrib/libarchive/tar/test/test_option_xz.c b/contrib/libarchive/tar/test/test_option_xz.c
index 45163e735f19..71043947526d 100644
--- a/contrib/libarchive/tar/test/test_option_xz.c
+++ b/contrib/libarchive/tar/test/test_option_xz.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_z.c b/contrib/libarchive/tar/test/test_option_z.c
index 8e10e37ba22e..a14380de4262 100644
--- a/contrib/libarchive/tar/test/test_option_z.c
+++ b/contrib/libarchive/tar/test/test_option_z.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_option_zstd.c b/contrib/libarchive/tar/test/test_option_zstd.c
index f9983670249c..192c20948ec9 100644
--- a/contrib/libarchive/tar/test/test_option_zstd.c
+++ b/contrib/libarchive/tar/test/test_option_zstd.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2017 Sean Purcell
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_patterns.c b/contrib/libarchive/tar/test/test_patterns.c
index 64f8fffe90f9..7df66904cd95 100644
--- a/contrib/libarchive/tar/test/test_patterns.c
+++ b/contrib/libarchive/tar/test/test_patterns.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2009 Michihiro NAKAJIMA
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_print_longpath.c b/contrib/libarchive/tar/test/test_print_longpath.c
index a21651fa15eb..c55651e9717e 100644
--- a/contrib/libarchive/tar/test/test_print_longpath.c
+++ b/contrib/libarchive/tar/test/test_print_longpath.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2011 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_stdio.c b/contrib/libarchive/tar/test/test_stdio.c
index d046727a2dd3..0c27c59a2af6 100644
--- a/contrib/libarchive/tar/test/test_stdio.c
+++ b/contrib/libarchive/tar/test/test_stdio.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_strip_components.c b/contrib/libarchive/tar/test/test_strip_components.c
index 9bf79ab7cf20..97c90b3b426e 100644
--- a/contrib/libarchive/tar/test/test_strip_components.c
+++ b/contrib/libarchive/tar/test/test_strip_components.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_symlink_dir.c b/contrib/libarchive/tar/test/test_symlink_dir.c
index 4c5666204388..22a98a19617f 100644
--- a/contrib/libarchive/tar/test/test_symlink_dir.c
+++ b/contrib/libarchive/tar/test/test_symlink_dir.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/test/test_version.c b/contrib/libarchive/tar/test/test_version.c
index 1b896c0c49d1..f46e3442a4b7 100644
--- a/contrib/libarchive/tar/test/test_version.c
+++ b/contrib/libarchive/tar/test/test_version.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2017 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/tar/util.c b/contrib/libarchive/tar/util.c
index 37c3a23231bd..a152f3506994 100644
--- a/contrib/libarchive/tar/util.c
+++ b/contrib/libarchive/tar/util.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "bsdtar_platform.h"
@@ -234,6 +216,7 @@ yes(const char *fmt, ...)
char buff[32];
char *p;
ssize_t l;
+ int read_fd = 2; /* stderr */
va_list ap;
va_start(ap, fmt);
@@ -242,7 +225,24 @@ yes(const char *fmt, ...)
fprintf(stderr, " (y/N)? ");
fflush(stderr);
- l = read(2, buff, sizeof(buff) - 1);
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ /* To be resilient when stdin is a pipe, bsdtar prefers to read from
+ * stderr. On Windows, stderr cannot be read. The nearest "piping
+ * resilient" equivalent is reopening the console input handle.
+ */
+ read_fd = _open("CONIN$", O_RDONLY);
+ if (read_fd < 0) {
+ fprintf(stderr, "Keyboard read failed\n");
+ exit(1);
+ }
+#endif
+
+ l = read(read_fd, buff, sizeof(buff) - 1);
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ _close(read_fd);
+#endif
+
if (l < 0) {
fprintf(stderr, "Keyboard read failed\n");
exit(1);
diff --git a/contrib/libarchive/tar/write.c b/contrib/libarchive/tar/write.c
index 5c7b13ae682f..f1838d6b5dea 100644
--- a/contrib/libarchive/tar/write.c
+++ b/contrib/libarchive/tar/write.c
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "bsdtar_platform.h"
@@ -32,7 +14,9 @@
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
-#ifdef HAVE_ATTR_XATTR_H
+#if HAVE_SYS_XATTR_H
+#include <sys/xattr.h>
+#elif HAVE_ATTR_XATTR_H
#include <attr/xattr.h>
#endif
#ifdef HAVE_ERRNO_H
@@ -942,7 +926,9 @@ write_hierarchy(struct bsdtar *bsdtar, struct archive *a, const char *path)
while (entry != NULL) {
write_file(bsdtar, a, entry);
- archive_entry_free(entry);
+ if (entry != spare_entry) {
+ archive_entry_free(entry);
+ }
entry = spare_entry;
spare_entry = NULL;
}
@@ -980,12 +966,11 @@ write_entry(struct bsdtar *bsdtar, struct archive *a,
safe_fprintf(stderr, "a ");
list_item_verbose(bsdtar, stderr, entry);
lafe_warnc(0, ": %s", archive_error_string(a));
- } else if (bsdtar->verbose > 0) {
+ } else {
lafe_warnc(0, "%s: %s",
archive_entry_pathname(entry),
archive_error_string(a));
- } else
- fprintf(stderr, ": %s", archive_error_string(a));
+ }
}
if (e == ARCHIVE_FATAL)
diff --git a/contrib/libarchive/test_utils/test_common.h b/contrib/libarchive/test_utils/test_common.h
index 8e1ec82436f8..9a20224a2065 100644
--- a/contrib/libarchive/test_utils/test_common.h
+++ b/contrib/libarchive/test_utils/test_common.h
@@ -48,6 +48,9 @@
#endif
#include <sys/types.h> /* Windows requires this before sys/stat.h */
+#if !HAVE_SUSECONDS_T
+#define suseconds_t long
+#endif
#include <sys/stat.h>
#if HAVE_DIRENT_H
@@ -313,7 +316,7 @@ int assertion_non_empty_file(const char *, int, const char *);
int assertion_set_nodump(const char *, int, const char *);
int assertion_text_file_contents(const char *, int, const char *buff, const char *f);
int assertion_umask(const char *, int, int);
-int assertion_utimes(const char *, int, const char *, long, long, long, long );
+int assertion_utimes(const char *, int, const char *, time_t, suseconds_t, time_t, suseconds_t);
int assertion_version(const char*, int, const char *, const char *);
void skipping_setup(const char *, int);
diff --git a/contrib/libarchive/test_utils/test_main.c b/contrib/libarchive/test_utils/test_main.c
index 6617732a335b..76fcd79406ff 100644
--- a/contrib/libarchive/test_utils/test_main.c
+++ b/contrib/libarchive/test_utils/test_main.c
@@ -85,6 +85,10 @@
#include <membership.h>
#endif
+#ifndef nitems
+#define nitems(arr) (sizeof(arr) / sizeof((arr)[0]))
+#endif
+
/*
*
* Windows support routines
@@ -121,6 +125,8 @@
#define access _access
#undef chdir
#define chdir _chdir
+#undef chmod
+#define chmod _chmod
#endif
#ifndef fileno
#define fileno _fileno
@@ -217,7 +223,8 @@ my_CreateSymbolicLinkA(const char *linkname, const char *target,
static BOOLEAN (WINAPI *f)(LPCSTR, LPCSTR, DWORD);
DWORD attrs;
static int set;
- int ret, tmpflags, llen, tlen;
+ int ret, tmpflags;
+ size_t llen, tlen;
int flags = 0;
char *src, *tgt, *p;
if (!set) {
@@ -233,10 +240,10 @@ my_CreateSymbolicLinkA(const char *linkname, const char *target,
if (tlen == 0 || llen == 0)
return (0);
- tgt = malloc((tlen + 1) * sizeof(char));
+ tgt = malloc(tlen + 1);
if (tgt == NULL)
return (0);
- src = malloc((llen + 1) * sizeof(char));
+ src = malloc(llen + 1);
if (src == NULL) {
free(tgt);
return (0);
@@ -1237,16 +1244,19 @@ assertion_file_contains_lines_any_order(const char *file, int line,
}
expected_count = i;
if (expected_count) {
- expected = malloc(sizeof(char *) * expected_count);
+ expected = calloc(expected_count, sizeof(*expected));
if (expected == NULL) {
failure_start(pathname, line, "Can't allocate memory");
failure_finish(NULL);
- free(expected);
- free(buff);
- return (0);
+ goto cleanup;
}
for (i = 0; lines[i] != NULL; ++i) {
expected[i] = strdup(lines[i]);
+ if (expected[i] == NULL) {
+ failure_start(pathname, line, "Can't allocate memory");
+ failure_finish(NULL);
+ goto cleanup;
+ }
}
}
@@ -1264,9 +1274,7 @@ assertion_file_contains_lines_any_order(const char *file, int line,
if (actual == NULL) {
failure_start(pathname, line, "Can't allocate memory");
failure_finish(NULL);
- free(expected);
- free(buff);
- return (0);
+ goto cleanup;
}
for (j = 0, p = buff; p < buff + buff_size;
p += 1 + strlen(p)) {
@@ -1279,8 +1287,6 @@ assertion_file_contains_lines_any_order(const char *file, int line,
/* Erase matching lines from both lists */
for (i = 0; i < expected_count; ++i) {
- if (expected[i] == NULL)
- continue;
for (j = 0; j < actual_count; ++j) {
if (actual[j] == NULL)
continue;
@@ -1303,9 +1309,9 @@ assertion_file_contains_lines_any_order(const char *file, int line,
++actual_failure;
}
if (expected_failure == 0 && actual_failure == 0) {
- free(buff);
- free(expected);
free(actual);
+ free(expected);
+ free(buff);
return (1);
}
failure_start(file, line, "File doesn't match: %s", pathname);
@@ -1313,6 +1319,7 @@ assertion_file_contains_lines_any_order(const char *file, int line,
if (expected[i] != NULL) {
logprintf(" Expected but not present: %s\n", expected[i]);
free(expected[i]);
+ expected[i] = NULL;
}
}
for (j = 0; j < actual_count; ++j) {
@@ -1320,9 +1327,15 @@ assertion_file_contains_lines_any_order(const char *file, int line,
logprintf(" Present but not expected: %s\n", actual[j]);
}
failure_finish(NULL);
- free(buff);
- free(expected);
+cleanup:
free(actual);
+ if (expected != NULL) {
+ for (i = 0; i < expected_count; ++i)
+ if (expected[i] != NULL)
+ free(expected[i]);
+ free(expected);
+ }
+ free(buff);
return (0);
}
@@ -1766,16 +1779,17 @@ is_symlink(const char *file, int line,
FILE_FLAG_OPEN_REPARSE_POINT;
/* Replace slashes with backslashes in pathname */
- pn = malloc((strlen(pathname) + 1) * sizeof(char));
- p = pathname;
- s = pn;
- while(*p != '\0') {
- if(*p == '/')
+ pn = malloc(strlen(pathname) + 1);
+ if (pn == NULL) {
+ failure_start(file, line, "Can't allocate memory");
+ failure_finish(NULL);
+ return (0);
+ }
+ for (p = pathname, s = pn; *p != '\0'; p++, s++) {
+ if (*p == '/')
*s = '\\';
else
*s = *p;
- p++;
- s++;
}
*s = '\0';
@@ -2083,8 +2097,8 @@ assertion_umask(const char *file, int line, int mask)
/* Set times, report failures. */
int
-assertion_utimes(const char *file, int line,
- const char *pathname, long at, long at_nsec, long mt, long mt_nsec)
+assertion_utimes(const char *file, int line, const char *pathname,
+ time_t at, suseconds_t at_nsec, time_t mt, suseconds_t mt_nsec)
{
int r;
@@ -2950,7 +2964,6 @@ setTestAcl(const char *path)
acl_permset_t permset;
const uid_t uid = 1;
uuid_t uuid;
- int i;
const acl_perm_t acl_perms[] = {
ACL_READ_DATA,
ACL_WRITE_DATA,
@@ -2992,7 +3005,7 @@ setTestAcl(const char *path)
failure("acl_get_permset() error: %s", strerror(errno));
if (assertEqualInt(r, 0) == 0)
goto testacl_free;
- for (i = 0; i < (int)(sizeof(acl_perms) / sizeof(acl_perms[0])); i++) {
+ for (size_t i = 0; i < nitems(acl_perms); i++) {
r = acl_add_perm(permset, acl_perms[i]);
failure("acl_add_perm() error: %s", strerror(errno));
if (assertEqualInt(r, 0) == 0)
@@ -3642,7 +3655,7 @@ test_run(int i, const char *tmpdir)
static void
usage(const char *program)
{
- static const int limit = sizeof(tests) / sizeof(tests[0]);
+ static const int limit = nitems(tests);
int i;
printf("Usage: %s [options] <test> <test> ...\n", program);
@@ -3874,12 +3887,13 @@ get_test_set(int *test_set, int limit, const char *test)
int
main(int argc, char **argv)
{
- static const int limit = sizeof(tests) / sizeof(tests[0]);
- int test_set[sizeof(tests) / sizeof(tests[0])];
+ static const int limit = nitems(tests);
+ int test_set[nitems(tests)];
int i = 0, j = 0, tests_run = 0, tests_failed = 0, option;
- int testprogdir_len;
+ size_t testprogdir_len;
+ size_t tmplen;
#ifdef PROGRAM
- int tmp2_len;
+ size_t tmp2_len;
#endif
time_t now;
struct tm *tmptr;
@@ -3922,7 +3936,7 @@ main(int argc, char **argv)
*/
progname = p = argv[0];
testprogdir_len = strlen(progname) + 1;
- if ((testprogdir = (char *)malloc(testprogdir_len)) == NULL)
+ if ((testprogdir = malloc(testprogdir_len)) == NULL)
{
fprintf(stderr, "ERROR: Out of memory.");
exit(1);
@@ -3950,7 +3964,7 @@ main(int argc, char **argv)
#endif
{
/* Fixup path for relative directories. */
- if ((testprogdir = (char *)realloc(testprogdir,
+ if ((testprogdir = realloc(testprogdir,
strlen(pwd) + 1 + strlen(testprogdir) + 1)) == NULL)
{
fprintf(stderr, "ERROR: Out of memory.");
@@ -3977,6 +3991,9 @@ main(int argc, char **argv)
tmp = getenv("TEMPDIR");
else
tmp = "/tmp";
+ tmplen = strlen(tmp);
+ while (tmplen > 0 && tmp[tmplen - 1] == '/')
+ tmplen--;
/* Allow -d to be controlled through the environment. */
if (getenv(ENVBASE "_DEBUG") != NULL)
@@ -4070,7 +4087,7 @@ main(int argc, char **argv)
if (testprogfile == NULL)
{
tmp2_len = strlen(testprogdir) + 1 + strlen(PROGRAM) + 1;
- if ((tmp2 = (char *)malloc(tmp2_len)) == NULL)
+ if ((tmp2 = malloc(tmp2_len)) == NULL)
{
fprintf(stderr, "ERROR: Out of memory.");
exit(1);
@@ -4083,7 +4100,7 @@ main(int argc, char **argv)
{
char *testprg;
- int testprg_len;
+ size_t testprg_len;
#if defined(_WIN32) && !defined(__CYGWIN__)
/* Command.com sometimes rejects '/' separators. */
testprg = strdup(testprogfile);
@@ -4129,16 +4146,16 @@ main(int argc, char **argv)
#endif
strftime(tmpdir_timestamp, sizeof(tmpdir_timestamp),
"%Y-%m-%dT%H.%M.%S", tmptr);
- if ((strlen(tmp) + 1 + strlen(progname) + 1 +
- strlen(tmpdir_timestamp) + 1 + 3) >
- (sizeof(tmpdir) / sizeof(char))) {
+ if (tmplen + 1 + strlen(progname) + 1 +
+ strlen(tmpdir_timestamp) + 1 + 3 >=
+ nitems(tmpdir)) {
fprintf(stderr,
"ERROR: Temp directory pathname too long\n");
exit(1);
}
- snprintf(tmpdir, sizeof(tmpdir), "%s/%s.%s-%03d", tmp,
- progname, tmpdir_timestamp, i);
- if (assertMakeDir(tmpdir,0755))
+ snprintf(tmpdir, sizeof(tmpdir), "%.*s/%s.%s-%03d",
+ (int)tmplen, tmp, progname, tmpdir_timestamp, i);
+ if (assertMakeDir(tmpdir, 0755))
break;
if (i >= 999) {
fprintf(stderr,
diff --git a/contrib/libarchive/unzip/bsdunzip.1 b/contrib/libarchive/unzip/bsdunzip.1
index a67ca2327066..932f947090f0 100644
--- a/contrib/libarchive/unzip/bsdunzip.1
+++ b/contrib/libarchive/unzip/bsdunzip.1
@@ -1,28 +1,9 @@
.\"-
+.\" SPDX-License-Identifier: BSD-2-Clause
+.\"
.\" Copyright (c) 2007-2008 Dag-Erling Smørgrav
.\" All rights reserved.
.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
.Dd June 27, 2023
.Dt BSDUNZIP 1
.Os
@@ -215,4 +196,4 @@ double-dash string used to separate options from arguments will need to
be repeated.
For example, to extract a "-a.jpg" from "-b.zip" with overwrite, one
would need to invoke
-.Dl bsdunzip -o -- -a.jpg -- -b.zip
+.Dl bsdunzip -o -- -a.jpg -- -b.zip
diff --git a/contrib/libarchive/unzip/bsdunzip.c b/contrib/libarchive/unzip/bsdunzip.c
index af3fb14c3636..5058e8798753 100644
--- a/contrib/libarchive/unzip/bsdunzip.c
+++ b/contrib/libarchive/unzip/bsdunzip.c
@@ -4,43 +4,11 @@
* Copyright (c) 2009, 2010 Joerg Sonnenberger <joerg@NetBSD.org>
* Copyright (c) 2007-2008 Dag-Erling Smørgrav
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * This file would be much shorter if we didn't care about command-line
- * compatibility with Info-ZIP's UnZip, which requires us to duplicate
- * parts of libarchive in order to gain more detailed control of its
- * behaviour for the purpose of implementing the -n, -o, -L and -a
- * options.
*/
#include "bsdunzip_platform.h"
-#ifdef HAVE_SYS_QUEUE_H
-#include <sys/queue.h>
-#else
#include "la_queue.h"
-#endif
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
@@ -484,13 +452,8 @@ handle_existing_file(char **path)
fprintf(stderr,
"replace %s? [y]es, [n]o, [A]ll, [N]one, [r]ename: ",
*path);
- if (fgets(buf, sizeof(buf), stdin) == NULL) {
- clearerr(stdin);
- printf("NULL\n(EOF or read error, "
- "treating as \"[N]one\"...)\n");
- n_opt = 1;
- return -1;
- }
+ if (fgets(buf, sizeof(buf), stdin) == NULL)
+ goto stdin_err;
switch (*buf) {
case 'A':
o_opt = 1;
@@ -512,6 +475,8 @@ handle_existing_file(char **path)
*path = NULL;
alen = 0;
len = getline(path, &alen, stdin);
+ if (len < 1)
+ goto stdin_err;
if ((*path)[len - 1] == '\n')
(*path)[len - 1] = '\0';
return 0;
@@ -519,6 +484,12 @@ handle_existing_file(char **path)
break;
}
}
+stdin_err:
+ clearerr(stdin);
+ printf("NULL\n(EOF or read error, "
+ "treating as \"[N]one\"...)\n");
+ n_opt = 1;
+ return -1;
}
/*
diff --git a/contrib/libarchive/unzip/bsdunzip.h b/contrib/libarchive/unzip/bsdunzip.h
index ab81e3930ec2..e2b7747e4419 100644
--- a/contrib/libarchive/unzip/bsdunzip.h
+++ b/contrib/libarchive/unzip/bsdunzip.h
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023, Martin Matuska
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef BSDUNZIP_H_INCLUDED
diff --git a/contrib/libarchive/unzip/bsdunzip_platform.h b/contrib/libarchive/unzip/bsdunzip_platform.h
index d4fcbb1aeab4..f00d57981db2 100644
--- a/contrib/libarchive/unzip/bsdunzip_platform.h
+++ b/contrib/libarchive/unzip/bsdunzip_platform.h
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
@@ -58,7 +40,7 @@
#define __LA_NORETURN __attribute__((__noreturn__))
#elif defined(_MSC_VER)
#define __LA_NORETURN __declspec(noreturn)
-#else
+#else
#define __LA_NORETURN
#endif
diff --git a/contrib/libarchive/unzip/cmdline.c b/contrib/libarchive/unzip/cmdline.c
index 4c6efc3e0694..8afddedd5ead 100644
--- a/contrib/libarchive/unzip/cmdline.c
+++ b/contrib/libarchive/unzip/cmdline.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2008 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
diff --git a/contrib/libarchive/unzip/la_getline.c b/contrib/libarchive/unzip/la_getline.c
index 79a6bc010214..40ab35cde842 100644
--- a/contrib/libarchive/unzip/la_getline.c
+++ b/contrib/libarchive/unzip/la_getline.c
@@ -1,32 +1,10 @@
/* $NetBSD: getline.c,v 1.2 2014/09/16 17:23:50 christos Exp $ */
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2011 The NetBSD Foundation, Inc.
* All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Christos Zoulas.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
*/
#include "bsdunzip_platform.h"
diff --git a/contrib/libarchive/unzip/test/test.h b/contrib/libarchive/unzip/test/test.h
index 822c3f08133f..03cd03921c9c 100644
--- a/contrib/libarchive/unzip/test/test.h
+++ b/contrib/libarchive/unzip/test/test.h
@@ -1,26 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2017 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/* Every test program should #include "test.h" as the first thing. */
diff --git a/contrib/libarchive/unzip/test/test_0.c b/contrib/libarchive/unzip/test/test_0.c
index 41279d388b1f..32f757c9b0c6 100644
--- a/contrib/libarchive/unzip/test/test_0.c
+++ b/contrib/libarchive/unzip/test/test_0.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/unzip/test/test_C.c b/contrib/libarchive/unzip/test/test_C.c
index fc11b970c2f3..66835c8406f3 100644
--- a/contrib/libarchive/unzip/test/test_C.c
+++ b/contrib/libarchive/unzip/test/test_C.c
@@ -1,27 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Adrian Vovk
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/unzip/test/test_I.c b/contrib/libarchive/unzip/test/test_I.c
index d189edca1a5c..2a656012f0a8 100644
--- a/contrib/libarchive/unzip/test/test_I.c
+++ b/contrib/libarchive/unzip/test/test_I.c
@@ -1,27 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Aaron Lindros
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
@@ -33,7 +14,12 @@
DEFINE_TEST(test_I)
{
const char *reffile = "test_I.zip";
- const char *lang;
+#if !defined(_WIN32) || defined(__CYGWIN__)
+ const char *envstr = "env LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 "
+ "LC_CTYPE=en_US.UTF-8";
+#else
+ const char *envstr = "";
+#endif
int r;
#if HAVE_SETLOCALE
@@ -45,18 +31,12 @@ DEFINE_TEST(test_I)
skipping("setlocale() not available on this system.");
#endif
- lang = getenv("LANG");
- setenv("LANG", "en_US.UTF-8", 1);
extract_reference_file(reffile);
- r = systemf("%s -I UTF-8 %s >test.out 2>test.err", testprog, reffile);
+ r = systemf("%s %s -I UTF-8 %s >test.out 2>test.err", envstr, testprog,
+ reffile);
assertEqualInt(0, r);
assertNonEmptyFile("test.out");
assertEmptyFile("test.err");
assertTextFileContents("Hello, World!\n", "Γειά σου Κόσμε.txt");
-
- if (lang == NULL)
- unsetenv("LANG");
- else
- setenv("LANG", lang, 1);
}
diff --git a/contrib/libarchive/unzip/test/test_L.c b/contrib/libarchive/unzip/test/test_L.c
index 4815cb2b139d..5b004d5d5707 100644
--- a/contrib/libarchive/unzip/test/test_L.c
+++ b/contrib/libarchive/unzip/test/test_L.c
@@ -1,27 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Adrian Vovk
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/unzip/test/test_P_encryption.c b/contrib/libarchive/unzip/test/test_P_encryption.c
index beabbaa646ee..e2cf3cda0ebd 100644
--- a/contrib/libarchive/unzip/test/test_P_encryption.c
+++ b/contrib/libarchive/unzip/test/test_P_encryption.c
@@ -1,32 +1,13 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Adrian Vovk
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
/* Test P arg - password protected */
-DEFINE_TEST(test_P)
+DEFINE_TEST(test_P_encryption)
{
const char *reffile = "test_encrypted.zip";
int r;
diff --git a/contrib/libarchive/unzip/test/test_Z1.c b/contrib/libarchive/unzip/test/test_Z1.c
index 58dc750030dd..2a3012b5bf8f 100644
--- a/contrib/libarchive/unzip/test/test_Z1.c
+++ b/contrib/libarchive/unzip/test/test_Z1.c
@@ -1,27 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Adrian Vovk
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/unzip/test/test_basic.c b/contrib/libarchive/unzip/test/test_basic.c
index e997755e7e57..1f37dcd416a3 100644
--- a/contrib/libarchive/unzip/test/test_basic.c
+++ b/contrib/libarchive/unzip/test/test_basic.c
@@ -1,27 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Adrian Vovk
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/unzip/test/test_d.c b/contrib/libarchive/unzip/test/test_d.c
index 01ab9b8caaa3..ea67246207f2 100644
--- a/contrib/libarchive/unzip/test/test_d.c
+++ b/contrib/libarchive/unzip/test/test_d.c
@@ -1,27 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Adrian Vovk
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/unzip/test/test_doubledash.c b/contrib/libarchive/unzip/test/test_doubledash.c
index eb7d34e4f6cc..4467213dbb89 100644
--- a/contrib/libarchive/unzip/test/test_doubledash.c
+++ b/contrib/libarchive/unzip/test/test_doubledash.c
@@ -1,27 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Adrian Vovk
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/unzip/test/test_glob.c b/contrib/libarchive/unzip/test/test_glob.c
index b334ce4bd37d..b53aa16fd85c 100644
--- a/contrib/libarchive/unzip/test/test_glob.c
+++ b/contrib/libarchive/unzip/test/test_glob.c
@@ -1,27 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Adrian Vovk
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/unzip/test/test_j.c b/contrib/libarchive/unzip/test/test_j.c
index a449e02644b5..b87229f42e25 100644
--- a/contrib/libarchive/unzip/test/test_j.c
+++ b/contrib/libarchive/unzip/test/test_j.c
@@ -1,27 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Adrian Vovk
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/unzip/test/test_n.c b/contrib/libarchive/unzip/test/test_n.c
index 4e893f04b7ae..bb75c5d7696d 100644
--- a/contrib/libarchive/unzip/test/test_n.c
+++ b/contrib/libarchive/unzip/test/test_n.c
@@ -1,31 +1,12 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Adrian Vovk
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-/* Test n arg - don't overrite existing files */
+/* Test n arg - don't overwrite existing files */
DEFINE_TEST(test_n)
{
const char *reffile = "test_basic.zip";
diff --git a/contrib/libarchive/unzip/test/test_not_exist.c b/contrib/libarchive/unzip/test/test_not_exist.c
index aa660dc646e5..6b206a74b261 100644
--- a/contrib/libarchive/unzip/test/test_not_exist.c
+++ b/contrib/libarchive/unzip/test/test_not_exist.c
@@ -1,31 +1,12 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Adrian Vovk
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-/* Test non existant file */
+/* Test non existent file */
DEFINE_TEST(test_not_exist)
{
int r;
diff --git a/contrib/libarchive/unzip/test/test_o.c b/contrib/libarchive/unzip/test/test_o.c
index af0c4128686f..64f946774440 100644
--- a/contrib/libarchive/unzip/test/test_o.c
+++ b/contrib/libarchive/unzip/test/test_o.c
@@ -1,31 +1,12 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Adrian Vovk
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-/* Test o arg - overrite existing files */
+/* Test o arg - overwrite existing files */
DEFINE_TEST(test_o)
{
const char *reffile = "test_basic.zip";
diff --git a/contrib/libarchive/unzip/test/test_p.c b/contrib/libarchive/unzip/test/test_p.c
index f34a5eae8e13..8bfffbe5dc39 100644
--- a/contrib/libarchive/unzip/test/test_p.c
+++ b/contrib/libarchive/unzip/test/test_p.c
@@ -1,27 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Adrian Vovk
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/unzip/test/test_q.c b/contrib/libarchive/unzip/test/test_q.c
index 9a532c888366..13222a483992 100644
--- a/contrib/libarchive/unzip/test/test_q.c
+++ b/contrib/libarchive/unzip/test/test_q.c
@@ -1,27 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Adrian Vovk
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/unzip/test/test_singlefile.c b/contrib/libarchive/unzip/test/test_singlefile.c
index 70c376eb3932..a72811f046d9 100644
--- a/contrib/libarchive/unzip/test/test_singlefile.c
+++ b/contrib/libarchive/unzip/test/test_singlefile.c
@@ -1,27 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Adrian Vovk
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/unzip/test/test_t.c b/contrib/libarchive/unzip/test/test_t.c
index 40d8d39e54d5..55a516fc636f 100644
--- a/contrib/libarchive/unzip/test/test_t.c
+++ b/contrib/libarchive/unzip/test/test_t.c
@@ -1,27 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Adrian Vovk
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/unzip/test/test_t_bad.c b/contrib/libarchive/unzip/test/test_t_bad.c
index f9afbb40dae2..a9535ca511e9 100644
--- a/contrib/libarchive/unzip/test/test_t_bad.c
+++ b/contrib/libarchive/unzip/test/test_t_bad.c
@@ -1,27 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Adrian Vovk
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/unzip/test/test_version.c b/contrib/libarchive/unzip/test/test_version.c
index efa797982d57..607a4f501363 100644
--- a/contrib/libarchive/unzip/test/test_version.c
+++ b/contrib/libarchive/unzip/test/test_version.c
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2017 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
diff --git a/contrib/libarchive/unzip/test/test_x.c b/contrib/libarchive/unzip/test/test_x.c
index d55376849ce9..959beb1950df 100644
--- a/contrib/libarchive/unzip/test/test_x.c
+++ b/contrib/libarchive/unzip/test/test_x.c
@@ -1,27 +1,8 @@
/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2023 Adrian Vovk
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"