aboutsummaryrefslogtreecommitdiff
path: root/contrib/libarchive
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/libarchive')
-rw-r--r--contrib/libarchive/FREEBSD-upgrade18
-rw-r--r--contrib/libarchive/NEWS20
-rw-r--r--contrib/libarchive/README.md21
-rw-r--r--contrib/libarchive/SECURITY.md19
-rw-r--r--contrib/libarchive/cat/bsdcat.12
-rw-r--r--contrib/libarchive/cat/bsdcat.c36
-rw-r--r--contrib/libarchive/cat/bsdcat.h7
-rw-r--r--contrib/libarchive/cat/bsdcat_platform.h24
-rw-r--r--contrib/libarchive/cat/cmdline.c29
-rw-r--r--contrib/libarchive/cat/test/test.h2
-rw-r--r--contrib/libarchive/cpio/bsdcpio.12
-rw-r--r--contrib/libarchive/cpio/cmdline.c17
-rw-r--r--contrib/libarchive/cpio/cpio.c43
-rw-r--r--contrib/libarchive/cpio/cpio.h2
-rw-r--r--contrib/libarchive/cpio/cpio_platform.h18
-rw-r--r--contrib/libarchive/cpio/test/test.h2
-rw-r--r--contrib/libarchive/cpio/test/test_0.c1
-rw-r--r--contrib/libarchive/cpio/test/test_basic.c1
-rw-r--r--contrib/libarchive/cpio/test/test_cmdline.c1
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_Z.c1
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_bz2.c1
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_grz.c1
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_gz.c1
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_lrz.c1
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_lz.c1
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_lz4.c1
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_lzma.c1
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_lzo.c1
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_xz.c1
-rw-r--r--contrib/libarchive/cpio/test/test_extract_cpio_zstd.c1
-rw-r--r--contrib/libarchive/cpio/test/test_format_newc.c1
-rw-r--r--contrib/libarchive/cpio/test/test_gcpio_compat.c1
-rw-r--r--contrib/libarchive/cpio/test/test_gcpio_compat_ref.bin.uu1
-rw-r--r--contrib/libarchive/cpio/test/test_gcpio_compat_ref.crc.uu1
-rw-r--r--contrib/libarchive/cpio/test/test_gcpio_compat_ref.newc.uu1
-rw-r--r--contrib/libarchive/cpio/test/test_gcpio_compat_ref.ustar.uu1
-rw-r--r--contrib/libarchive/cpio/test/test_missing_file.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_0.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_B_upper.c2
-rw-r--r--contrib/libarchive/cpio/test/test_option_C_upper.c2
-rw-r--r--contrib/libarchive/cpio/test/test_option_J_upper.c2
-rw-r--r--contrib/libarchive/cpio/test/test_option_L_upper.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_Z_upper.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_a.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_b64encode.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_c.c7
-rw-r--r--contrib/libarchive/cpio/test/test_option_d.c2
-rw-r--r--contrib/libarchive/cpio/test/test_option_f.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_f.cpio.uu1
-rw-r--r--contrib/libarchive/cpio/test/test_option_grzip.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_help.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_l.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_lrzip.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_lz4.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_lzma.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_lzop.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_m.c2
-rw-r--r--contrib/libarchive/cpio/test/test_option_m.cpio.uu1
-rw-r--r--contrib/libarchive/cpio/test/test_option_passphrase.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_t.c16
-rw-r--r--contrib/libarchive/cpio/test/test_option_t.cpio.uu1
-rw-r--r--contrib/libarchive/cpio/test/test_option_t.stdout.uu1
-rw-r--r--contrib/libarchive/cpio/test/test_option_tv.stdout.uu1
-rw-r--r--contrib/libarchive/cpio/test/test_option_u.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_uuencode.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_xz.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_y.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_z.c1
-rw-r--r--contrib/libarchive/cpio/test/test_option_zstd.c1
-rw-r--r--contrib/libarchive/cpio/test/test_owner_parse.c1
-rw-r--r--contrib/libarchive/cpio/test/test_passthrough_dotdot.c1
-rw-r--r--contrib/libarchive/cpio/test/test_passthrough_reverse.c1
-rw-r--r--contrib/libarchive/libarchive/archive.h18
-rw-r--r--contrib/libarchive/libarchive/archive_acl.c1
-rw-r--r--contrib/libarchive/libarchive/archive_acl_private.h2
-rw-r--r--contrib/libarchive/libarchive/archive_blake2.h4
-rw-r--r--contrib/libarchive/libarchive/archive_blake2_impl.h2
-rw-r--r--contrib/libarchive/libarchive/archive_blake2s_ref.c2
-rw-r--r--contrib/libarchive/libarchive/archive_blake2sp_ref.c2
-rw-r--r--contrib/libarchive/libarchive/archive_check_magic.c20
-rw-r--r--contrib/libarchive/libarchive/archive_cmdline.c2
-rw-r--r--contrib/libarchive/libarchive/archive_cmdline_private.h2
-rw-r--r--contrib/libarchive/libarchive/archive_crc32.h2
-rw-r--r--contrib/libarchive/libarchive/archive_cryptor.c12
-rw-r--r--contrib/libarchive/libarchive/archive_digest.c94
-rw-r--r--contrib/libarchive/libarchive/archive_digest_private.h10
-rw-r--r--contrib/libarchive/libarchive/archive_endian.h2
-rw-r--r--contrib/libarchive/libarchive/archive_entry.32
-rw-r--r--contrib/libarchive/libarchive/archive_entry.c44
-rw-r--r--contrib/libarchive/libarchive/archive_entry.h12
-rw-r--r--contrib/libarchive/libarchive/archive_entry_acl.32
-rw-r--r--contrib/libarchive/libarchive/archive_entry_copy_stat.c1
-rw-r--r--contrib/libarchive/libarchive/archive_entry_link_resolver.c1
-rw-r--r--contrib/libarchive/libarchive/archive_entry_locale.h2
-rw-r--r--contrib/libarchive/libarchive/archive_entry_private.h6
-rw-r--r--contrib/libarchive/libarchive/archive_entry_sparse.c1
-rw-r--r--contrib/libarchive/libarchive/archive_entry_stat.c1
-rw-r--r--contrib/libarchive/libarchive/archive_entry_strmode.c1
-rw-r--r--contrib/libarchive/libarchive/archive_entry_time.32
-rw-r--r--contrib/libarchive/libarchive/archive_entry_xattr.c1
-rw-r--r--contrib/libarchive/libarchive/archive_getdate.c125
-rw-r--r--contrib/libarchive/libarchive/archive_getdate.h2
-rw-r--r--contrib/libarchive/libarchive/archive_hmac.c34
-rw-r--r--contrib/libarchive/libarchive/archive_hmac_private.h9
-rw-r--r--contrib/libarchive/libarchive/archive_match.c1
-rw-r--r--contrib/libarchive/libarchive/archive_openssl_evp_private.h3
-rw-r--r--contrib/libarchive/libarchive/archive_options.c1
-rw-r--r--contrib/libarchive/libarchive/archive_options_private.h2
-rw-r--r--contrib/libarchive/libarchive/archive_pack_dev.c10
-rw-r--r--contrib/libarchive/libarchive/archive_pathmatch.c1
-rw-r--r--contrib/libarchive/libarchive/archive_pathmatch.h2
-rw-r--r--contrib/libarchive/libarchive/archive_platform.h48
-rw-r--r--contrib/libarchive/libarchive/archive_platform_acl.h2
-rw-r--r--contrib/libarchive/libarchive/archive_platform_xattr.h2
-rw-r--r--contrib/libarchive/libarchive/archive_private.h17
-rw-r--r--contrib/libarchive/libarchive/archive_random.c36
-rw-r--r--contrib/libarchive/libarchive/archive_read.32
-rw-r--r--contrib/libarchive/libarchive/archive_read.c151
-rw-r--r--contrib/libarchive/libarchive/archive_read_add_passphrase.32
-rw-r--r--contrib/libarchive/libarchive/archive_read_add_passphrase.c1
-rw-r--r--contrib/libarchive/libarchive/archive_read_append_filter.c5
-rw-r--r--contrib/libarchive/libarchive/archive_read_data.32
-rw-r--r--contrib/libarchive/libarchive/archive_read_data_into_fd.c8
-rw-r--r--contrib/libarchive/libarchive/archive_read_disk.382
-rw-r--r--contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c9
-rw-r--r--contrib/libarchive/libarchive/archive_read_disk_posix.c71
-rw-r--r--contrib/libarchive/libarchive/archive_read_disk_private.h2
-rw-r--r--contrib/libarchive/libarchive/archive_read_disk_set_standard_lookup.c1
-rw-r--r--contrib/libarchive/libarchive/archive_read_extract.32
-rw-r--r--contrib/libarchive/libarchive/archive_read_extract.c1
-rw-r--r--contrib/libarchive/libarchive/archive_read_extract2.c1
-rw-r--r--contrib/libarchive/libarchive/archive_read_filter.32
-rw-r--r--contrib/libarchive/libarchive/archive_read_format.32
-rw-r--r--contrib/libarchive/libarchive/archive_read_free.32
-rw-r--r--contrib/libarchive/libarchive/archive_read_header.32
-rw-r--r--contrib/libarchive/libarchive/archive_read_new.32
-rw-r--r--contrib/libarchive/libarchive/archive_read_open.32
-rw-r--r--contrib/libarchive/libarchive/archive_read_open_fd.c1
-rw-r--r--contrib/libarchive/libarchive/archive_read_open_file.c5
-rw-r--r--contrib/libarchive/libarchive/archive_read_open_filename.c112
-rw-r--r--contrib/libarchive/libarchive/archive_read_open_memory.c1
-rw-r--r--contrib/libarchive/libarchive/archive_read_private.h55
-rw-r--r--contrib/libarchive/libarchive/archive_read_set_format.c1
-rw-r--r--contrib/libarchive/libarchive/archive_read_set_options.323
-rw-r--r--contrib/libarchive/libarchive/archive_read_set_options.c33
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_all.c1
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_by_code.c1
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_bzip2.c44
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_compress.c46
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_grzip.c26
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_gzip.c40
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_lrzip.c27
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_lz4.c48
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_lzop.c35
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_none.c1
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_program.c64
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_rpm.c34
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_uu.c85
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_xz.c97
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_zstd.c47
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_7zip.c320
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_all.c3
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_ar.c5
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_by_code.c1
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_cab.c14
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_cpio.c7
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_empty.c1
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_iso9660.c23
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_lha.c33
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_mtree.c163
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_rar.c915
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_rar5.c270
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_raw.c1
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_tar.c37
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_warc.c17
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_xar.c22
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_zip.c667
-rw-r--r--contrib/libarchive/libarchive/archive_string.c28
-rw-r--r--contrib/libarchive/libarchive/archive_string.h3
-rw-r--r--contrib/libarchive/libarchive/archive_string_composition.h2
-rw-r--r--contrib/libarchive/libarchive/archive_string_sprintf.c1
-rw-r--r--contrib/libarchive/libarchive/archive_util.32
-rw-r--r--contrib/libarchive/libarchive/archive_util.c61
-rw-r--r--contrib/libarchive/libarchive/archive_version_details.c1
-rw-r--r--contrib/libarchive/libarchive/archive_virtual.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write.32
-rw-r--r--contrib/libarchive/libarchive/archive_write.c78
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_by_name.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c8
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_compress.c4
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_grzip.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_gzip.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_lrzip.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_lz4.c10
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_lzop.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_none.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_program.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_uuencode.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_xz.c6
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_zstd.c361
-rw-r--r--contrib/libarchive/libarchive/archive_write_blocksize.32
-rw-r--r--contrib/libarchive/libarchive/archive_write_data.32
-rw-r--r--contrib/libarchive/libarchive/archive_write_disk.310
-rw-r--r--contrib/libarchive/libarchive/archive_write_disk_posix.c113
-rw-r--r--contrib/libarchive/libarchive/archive_write_disk_private.h2
-rw-r--r--contrib/libarchive/libarchive/archive_write_disk_set_standard_lookup.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_filter.32
-rw-r--r--contrib/libarchive/libarchive/archive_write_finish_entry.32
-rw-r--r--contrib/libarchive/libarchive/archive_write_format.32
-rw-r--r--contrib/libarchive/libarchive/archive_write_free.32
-rw-r--r--contrib/libarchive/libarchive/archive_write_header.32
-rw-r--r--contrib/libarchive/libarchive/archive_write_new.32
-rw-r--r--contrib/libarchive/libarchive/archive_write_open.33
-rw-r--r--contrib/libarchive/libarchive/archive_write_open_fd.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_open_file.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_open_filename.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_open_memory.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_private.h5
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_7zip.c44
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_ar.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_by_name.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_cpio.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_cpio_binary.c33
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_cpio_newc.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_cpio_odc.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_filter_by_ext.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_gnutar.c4
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_iso9660.c34
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_mtree.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_pax.c75
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_private.h2
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_shar.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_ustar.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_v7tar.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_warc.c26
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_xar.c15
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_zip.c220
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_options.320
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_options.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_passphrase.32
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_passphrase.c36
-rw-r--r--contrib/libarchive/libarchive/cpio.54
-rw-r--r--contrib/libarchive/libarchive/filter_fork.h2
-rw-r--r--contrib/libarchive/libarchive/filter_fork_posix.c4
-rw-r--r--contrib/libarchive/libarchive/libarchive-formats.52
-rw-r--r--contrib/libarchive/libarchive/libarchive.342
-rw-r--r--contrib/libarchive/libarchive/libarchive_changes.32
-rw-r--r--contrib/libarchive/libarchive/libarchive_internals.34
-rw-r--r--contrib/libarchive/libarchive/tar.52
-rw-r--r--contrib/libarchive/libarchive/test/README2
-rw-r--r--contrib/libarchive/libarchive/test/read_open_memory.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_acl_nfs4.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_acl_pax.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_acl_platform_nfs4.c5
-rw-r--r--contrib/libarchive/libarchive/test/test_acl_platform_posix1e.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_acl_posix1e.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_acl_text.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_api_feature.c3
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_clear_error.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_cmdline.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_getdate.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_match_owner.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_match_path.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_match_time.c31
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_pathmatch.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_read_add_passphrase.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_read_close_twice.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_read_close_twice_open_fd.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_read_close_twice_open_filename.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_read_multiple_data_objects.c5
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_read_next_header_empty.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_read_next_header_raw.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_read_open2.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_read_set_filter_option.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_read_set_format_option.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_read_set_option.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_read_set_options.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_read_support.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_set_error.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_string.c3
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_string_conversion.c5
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_string_conversion.txt.Z.uu1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_write_add_filter_by_name.c16
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_write_set_filter_option.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_write_set_format_by_name.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_write_set_format_filter_by_ext.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_write_set_format_option.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_write_set_option.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_write_set_options.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_write_set_passphrase.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_bad_fd.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_bzip2.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_bzip2_1.tbz.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_bzip2_2.tbz.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_cpio.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_cpio_1.cpio.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_gtar.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_gtar_1.tar.uu1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_gtar_2.tar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_gzip.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_gzip_1.tgz.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_gzip_2.tgz.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_lz4.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_lzip.c84
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_lzip_3.lz.uu1461
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_lzip_4.tlz.uu1474
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_lzma.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_lzma_1.tlz.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_lzma_2.tlz.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_lzma_3.tlz.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_lzop.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_mac.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_perl_archive_tar.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_plexus_archiver_tar.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_solaris_pax_sparse.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_solaris_tar_acl.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_star_acl.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_tar_directory.c76
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_tar_directory_1.tar.uu49
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_tar_hardlink.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_tar_hardlink_1.tar.uu1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_uudecode.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_uudecode_large.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_xz.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_xz_1.txz.uu3
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_zip.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_zip_1.zip.uu1
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_zip_8.zip.uu12
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_zstd.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_empty_write.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_entry.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_entry_strmode.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_extattr_freebsd.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_filter_count.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_fuzz.c11
-rw-r--r--contrib/libarchive/libarchive/test/test_fuzz_1.iso.Z.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_gnutar_filename_encoding.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_link_resolver.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_open_failure.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_open_fd.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_open_file.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_open_filename.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_pax_filename_encoding.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_pax_filename_encoding.tar.uu1
-rw-r--r--contrib/libarchive/libarchive/test/test_pax_xattr_header.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_rar_multivolume_single_file.part1.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_rar_multivolume_single_file.part2.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_rar_multivolume_single_file.part3.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part01.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part02.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part03.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part04.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part05.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part06.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part07.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part08.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part09.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part10.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_data_large.c5
-rw-r--r--contrib/libarchive/libarchive/test/test_read_disk.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_disk_directory_traversals.c10
-rw-r--r--contrib/libarchive/libarchive/test/test_read_disk_entry_from_file.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_extract.c4
-rw-r--r--contrib/libarchive/libarchive/test/test_read_file_nonexistent.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_filter_lrzip.tar.lrz.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_filter_program.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_filter_program_signature.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_filter_uudecode.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_filter_uudecode_base64_raw.uu11
-rw-r--r--contrib/libarchive/libarchive/test/test_read_filter_uudecode_raw.c67
-rw-r--r--contrib/libarchive/libarchive/test/test_read_filter_uudecode_raw.uu14
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip.c427
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip_copy.7z.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip_deflate_arm64.7z.uu64
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip_encryption_data.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip_encryption_header.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip_encryption_partially.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip_lzma2_arm.7z.uu50
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip_lzma2_arm64.7z.uu54
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip_malformed.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip_packinfo_digests.c5
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip_solid_zstd.7z.uu9
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip_win_attrib.7z.uu10
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip_zstd.7z.uu12
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip_zstd_arm.7z.uu61
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip_zstd_bcj.7z.uu56
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip_zstd_nobcj.7z.uu56
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_ar.ar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_ar.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cab.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cab_filename.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cab_filename_cp932.cab.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_afio.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_bin.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_bin_Z.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_bin_be.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_bin_be.cpio.uu1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_bin_bz2.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_bin_gz.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_bin_le.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_bin_lzip.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_bin_lzma.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_bin_xz.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_filename.c13
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_filename_cp866.cpio.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_filename_eucjp.cpio.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_filename_koi8r.cpio.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_filename_utf8_jp.cpio.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_filename_utf8_ru.cpio.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_odc.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_svr4_gzip.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_svr4c_Z.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_empty.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_gtar_filename.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_gtar_filename_cp866.tar.Z.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_gtar_filename_eucjp.tar.Z.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_gtar_filename_koi8r.tar.Z.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_gtar_gz.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_gtar_lzma.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_gtar_sparse.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_13.tar.uu1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17.tar.uu1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix00.tar.uu1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix01.tar.uu1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix10.tar.uu1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix10_modified.tar.uu1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_skip_entry.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_skip_entry.tar.Z.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_iso.iso.Z.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_iso_Z.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_iso_joliet.iso.Z.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_iso_joliet_long.iso.Z.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_iso_joliet_rockridge.iso.Z.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_iso_multi_extent.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_iso_multi_extent.iso.Z.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_iso_rockridge.iso.Z.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_iso_rockridge_ce.iso.Z.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_iso_rockridge_new.iso.Z.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_iso_rockridge_rr_moved.iso.Z.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_iso_xorriso.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_iso_zisofs.iso.Z.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_isojoliet_bz2.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_isojoliet_long.c7
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_isojoliet_rr.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_isojoliet_versioned.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_isorr_bz2.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_isorr_ce.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_isorr_new_bz2.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_isorr_rr_moved.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_isozisofs_bz2.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_lha.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_lha_bugfix_0.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_lha_filename.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_lha_filename_cp932.lzh.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_lha_filename_utf16.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_lha_filename_utf16.lzh.uu38
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_mtree.c31
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_pax_bz2.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar.c85
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5.c149
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_bad_window_sz_in_mltarc_file.rar.uu7
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_compressed.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_decode_number_out_of_bounds_read.rar.uu10
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_different_winsize_on_merge.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part01.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part02.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part03.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part04.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part05.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part06.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part07.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part08.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_multiple_files.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_multiple_files_solid.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_sfx.exe.uu7048
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_stored.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_unicode.rar.uu9
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_window_buf_and_size_desync.rar.uu11
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_binary_data.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_compress_best.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_compress_normal.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_encryption_data.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_encryption_header.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_encryption_partially.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_filter.c56
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_filter.rar.uu2099
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_invalid1.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_multi_lzss_blocks.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0001.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0002.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0003.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0004.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_noeof.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_ppmd_lzss_conversion.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_sfx.exe.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_subblock.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_windows.rar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_raw.bufr.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_raw.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_raw.data.Z.uu1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_raw.data.uu1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_tar.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_tar_concatenated.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_tar_empty_filename.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_tar_empty_filename.tar.uu3
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_tar_empty_pax.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_tar_empty_pax.tar.Z.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_tar_empty_with_gnulabel.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_tar_filename.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_tar_invalid_pax_size.c52
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_tar_invalid_pax_size.tar.uu38
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_tbz.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_tgz.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_tlz.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_txz.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_tz.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_ustar_filename.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_warc.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_xar.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_xar_doublelink.c55
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_xar_doublelink.xar.uu12
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip.c163
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_7075_utf8_paths.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_bzip2.zipx.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_comment_stored.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_encryption_data.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_encryption_header.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_encryption_partially.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_filename.c7
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_filename_cp866.zip.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_filename_cp932.zip.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_filename_koi8r.zip.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_filename_utf8_jp.zip.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_filename_utf8_ru.zip.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_filename_utf8_ru2.zip.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_high_compression.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_jar.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_lzma.zipx.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_mac_metadata.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_malformed.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_nested.c3
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_nofiletype.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_padded.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_ppmd8.zipx.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_sfx.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_traditional_encryption_data.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes.c3
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes128.zip.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes256.zip.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes256_stored.zip.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes_large.c9
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.zip.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_zip64.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_zstd.zipx.uu18
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_zstd_multi.zipx.uu94
-rw-r--r--contrib/libarchive/libarchive/test/test_read_large.c5
-rw-r--r--contrib/libarchive/libarchive/test/test_read_large_splitted_rar_aa.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ab.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ac.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ad.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ae.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_pax_truncated.c5
-rw-r--r--contrib/libarchive/libarchive/test/test_read_pax_xattr_schily.tar.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_position.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_splitted_rar_aa.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_splitted_rar_ab.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_splitted_rar_ac.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_splitted_rar_ad.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_truncated.c4
-rw-r--r--contrib/libarchive/libarchive/test/test_read_truncated_filter.c27
-rw-r--r--contrib/libarchive/libarchive/test/test_short_writes.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_sparse_basic.c44
-rw-r--r--contrib/libarchive/libarchive/test/test_splitted_rar_seek_support_aa.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_splitted_rar_seek_support_ab.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_splitted_rar_seek_support_ac.uu2
-rw-r--r--contrib/libarchive/libarchive/test/test_tar_filenames.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_tar_large.c5
-rw-r--r--contrib/libarchive/libarchive/test/test_ustar_filename_encoding.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_ustar_filenames.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk_appledouble.c85
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk_appledouble_zip.zip.uu27
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk_failures.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk_hardlink.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk_hfs_compression.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk_lookup.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk_mac_metadata.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk_no_hfs_compression.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk_perms.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk_secure.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk_secure744.c3
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk_secure745.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk_secure746.c5
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk_sparse.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk_symlink.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk_times.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_b64encode.c9
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_bzip2.c13
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_compress.c5
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_gzip.c13
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_gzip_timestamp.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_lrzip.c4
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_lz4.c21
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_lzip.c13
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_lzma.c13
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_lzop.c16
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_program.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_uuencode.c9
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_xz.c13
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_zstd.c124
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_7zip.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_7zip_empty.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_7zip_large.c7
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_ar.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_cpio.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_cpio_empty.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_cpio_newc.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_cpio_odc.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_gnutar.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_gnutar_filenames.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_iso9660.c21
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_mtree.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_mtree_absolute_path.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_mtree_classic.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_mtree_classic_indent.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_mtree_fflags.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_mtree_no_separator.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_mtree_quoted_filename.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_pax.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_shar_empty.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_tar.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_tar_empty.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_tar_sparse.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_tar_ustar.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_tar_v7tar.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_warc.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_warc_empty.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_xar.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_xar_empty.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_zip.c50
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_zip64_stream.c276
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_zip_compression_store.c80
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_zip_empty.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_zip_empty_zip64.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_zip_entry_size_unset.c320
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_zip_file.c55
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_zip_file_zip64.c59
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_zip_large.c35
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_zip_stream.c247
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_zip_zip64.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_open_memory.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_read_format_zip.c56
-rw-r--r--contrib/libarchive/libarchive/test/test_xattr_platform.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_zip_filename_encoding.c4
-rw-r--r--contrib/libarchive/libarchive/xxhash.c4
-rw-r--r--contrib/libarchive/libarchive_fe/err.c2
-rw-r--r--contrib/libarchive/libarchive_fe/err.h11
-rw-r--r--contrib/libarchive/libarchive_fe/lafe_platform.h12
-rw-r--r--contrib/libarchive/libarchive_fe/line_reader.c2
-rw-r--r--contrib/libarchive/libarchive_fe/passphrase.c14
-rw-r--r--contrib/libarchive/tar/bsdtar.1108
-rw-r--r--contrib/libarchive/tar/bsdtar.c170
-rw-r--r--contrib/libarchive/tar/bsdtar.h12
-rw-r--r--contrib/libarchive/tar/bsdtar_platform.h24
-rw-r--r--contrib/libarchive/tar/cmdline.c21
-rw-r--r--contrib/libarchive/tar/creation_set.c3
-rw-r--r--contrib/libarchive/tar/read.c9
-rw-r--r--contrib/libarchive/tar/subst.c29
-rw-r--r--contrib/libarchive/tar/test/test.h2
-rw-r--r--contrib/libarchive/tar/test/test_0.c1
-rw-r--r--contrib/libarchive/tar/test/test_basic.c1
-rw-r--r--contrib/libarchive/tar/test/test_copy.c21
-rw-r--r--contrib/libarchive/tar/test/test_empty_mtree.c1
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_Z.c1
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_bz2.c1
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_grz.c1
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_gz.c1
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_lrz.c1
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_lz.c1
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_lz4.c1
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_lzma.c1
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_lzo.c1
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_xz.c1
-rw-r--r--contrib/libarchive/tar/test/test_extract_tar_zstd.c1
-rw-r--r--contrib/libarchive/tar/test/test_format_newc.c1
-rw-r--r--contrib/libarchive/tar/test/test_help.c1
-rw-r--r--contrib/libarchive/tar/test/test_leading_slash.c1
-rw-r--r--contrib/libarchive/tar/test/test_missing_file.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_C_mtree.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_C_upper.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_H_upper.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_L_upper.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_O_upper.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_T_upper.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_U_upper.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_X_upper.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_a.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_acls.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_b.c9
-rw-r--r--contrib/libarchive/tar/test/test_option_b64encode.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_exclude.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_exclude_vcs.c2
-rw-r--r--contrib/libarchive/tar/test/test_option_fflags.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_gid_gname.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_group.c84
-rw-r--r--contrib/libarchive/tar/test/test_option_grzip.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_ignore_zeros.c146
-rw-r--r--contrib/libarchive/tar/test/test_option_j.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_k.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_keep_newer_files.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_lrzip.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_lz4.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_lzma.c2
-rw-r--r--contrib/libarchive/tar/test/test_option_lzop.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_n.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_newer_than.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_nodump.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_older_than.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_owner.c84
-rw-r--r--contrib/libarchive/tar/test/test_option_passphrase.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_q.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_r.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_s.c12
-rw-r--r--contrib/libarchive/tar/test/test_option_safe_writes.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_uid_uname.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_uuencode.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_xattrs.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_xz.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_z.c1
-rw-r--r--contrib/libarchive/tar/test/test_option_zstd.c1
-rw-r--r--contrib/libarchive/tar/test/test_patterns.c1
-rw-r--r--contrib/libarchive/tar/test/test_print_longpath.c1
-rw-r--r--contrib/libarchive/tar/test/test_stdio.c1
-rw-r--r--contrib/libarchive/tar/test/test_strip_components.c1
-rw-r--r--contrib/libarchive/tar/test/test_symlink_dir.c1
-rw-r--r--contrib/libarchive/tar/util.c41
-rw-r--r--contrib/libarchive/tar/write.c7
-rw-r--r--contrib/libarchive/test_utils/test_common.h17
-rw-r--r--contrib/libarchive/test_utils/test_main.c210
-rw-r--r--contrib/libarchive/test_utils/test_utils.c151
-rw-r--r--contrib/libarchive/test_utils/test_utils.h11
-rw-r--r--contrib/libarchive/unzip/bsdunzip.1218
-rw-r--r--contrib/libarchive/unzip/bsdunzip.c1290
-rw-r--r--contrib/libarchive/unzip/bsdunzip.h60
-rw-r--r--contrib/libarchive/unzip/bsdunzip_platform.h65
-rw-r--r--contrib/libarchive/unzip/cmdline.c253
-rw-r--r--contrib/libarchive/unzip/la_getline.c99
-rw-r--r--contrib/libarchive/unzip/la_queue.h840
-rw-r--r--contrib/libarchive/unzip/test/test.h38
-rw-r--r--contrib/libarchive/unzip/test/test_0.c58
-rw-r--r--contrib/libarchive/unzip/test/test_C.c41
-rw-r--r--contrib/libarchive/unzip/test/test_I.c54
-rw-r--r--contrib/libarchive/unzip/test/test_I.zip.uu8
-rw-r--r--contrib/libarchive/unzip/test/test_L.c44
-rw-r--r--contrib/libarchive/unzip/test/test_P_encryption.c41
-rw-r--r--contrib/libarchive/unzip/test/test_Z1.c40
-rw-r--r--contrib/libarchive/unzip/test/test_basic.c44
-rw-r--r--contrib/libarchive/unzip/test/test_basic.zip.uu25
-rw-r--r--contrib/libarchive/unzip/test/test_d.c62
-rw-r--r--contrib/libarchive/unzip/test/test_doubledash.c44
-rw-r--r--contrib/libarchive/unzip/test/test_encrypted.zip.uu13
-rw-r--r--contrib/libarchive/unzip/test/test_glob.c44
-rw-r--r--contrib/libarchive/unzip/test/test_j.c44
-rw-r--r--contrib/libarchive/unzip/test/test_n.c48
-rw-r--r--contrib/libarchive/unzip/test/test_not_exist.c36
-rw-r--r--contrib/libarchive/unzip/test/test_o.c47
-rw-r--r--contrib/libarchive/unzip/test/test_p.c39
-rw-r--r--contrib/libarchive/unzip/test/test_q.c44
-rw-r--r--contrib/libarchive/unzip/test/test_singlefile.c41
-rw-r--r--contrib/libarchive/unzip/test/test_singlefile.zip.uu8
-rw-r--r--contrib/libarchive/unzip/test/test_t.c39
-rw-r--r--contrib/libarchive/unzip/test/test_t_bad.c39
-rw-r--r--contrib/libarchive/unzip/test/test_t_bad.zip.uu25
-rw-r--r--contrib/libarchive/unzip/test/test_version.c34
-rw-r--r--contrib/libarchive/unzip/test/test_x.c80
780 files changed, 24371 insertions, 2988 deletions
diff --git a/contrib/libarchive/FREEBSD-upgrade b/contrib/libarchive/FREEBSD-upgrade
index 0689acff2599..0b5d4e921f49 100644
--- a/contrib/libarchive/FREEBSD-upgrade
+++ b/contrib/libarchive/FREEBSD-upgrade
@@ -1,25 +1,25 @@
-$FreeBSD$
-
libarchive
The source code is pulled with git:
git clone git://github.com/libarchive/libarchive.git
+The git branch for imports is named vendor/libarchive.
+
For the contrib directory files and directories were pruned by:
-
+
sh -c 'for F in `cat FREEBSD-Xlist | grep -v FreeBSD`; do rm -rf ./$F ; done'
You may check if there are any new files that we don't need and add them to
FREEBSD-Xlist.
-The instructions for importing new release and merging to HEAD can be found
-at FreeBSD wiki:
+The instructions for importing new release and merging to main can be found
+in the Committers' Guide:
- http://wiki.freebsd.org/SubversionPrimer/VendorImports
+ https://docs.freebsd.org/en/articles/committers-guide/#vendor-import-git
-To make local changes to libarchive, simply patch and commit to the trunk
-branch (aka HEAD). Never make local changes on the vendor branch.
+To make local changes to libarchive, simply patch and commit to the main
+branch. Never make local changes on the vendor branch.
mm@FreeBSD.org
-27-July-2012
+19-October-2023
diff --git a/contrib/libarchive/NEWS b/contrib/libarchive/NEWS
index 096410620d6b..ebdbb2a978ec 100644
--- a/contrib/libarchive/NEWS
+++ b/contrib/libarchive/NEWS
@@ -1,3 +1,23 @@
+Apr 26, 2024: libarchive 3.7.4 released
+
+Apr 08, 2024: libarchive 3.7.3 released
+
+Sep 12, 2023: libarchive 3.7.2 released
+
+Jul 29, 2023: libarchive 3.7.1 released
+
+Jul 18, 2023: libarchive 3.7.0 released
+
+Jul 14, 2023: bsdunzip port from FreeBSD
+
+Dec 07, 2022: libarchive 3.6.2 released
+
+Apr 08, 2022: libarchive 3.6.1 released
+
+Feb 09, 2022: libarchive 3.6.0 released
+
+Feb 08, 2022: libarchive 3.5.3 released
+
Aug 22, 2021: libarchive 3.5.2 released
Dec 26, 2020: libarchive 3.5.1 released
diff --git a/contrib/libarchive/README.md b/contrib/libarchive/README.md
index d5ef70c2191d..933de6986425 100644
--- a/contrib/libarchive/README.md
+++ b/contrib/libarchive/README.md
@@ -7,7 +7,7 @@ command-line tools that use the libarchive library.
## Questions? Issues?
-* http://www.libarchive.org is the home for ongoing
+* https://www.libarchive.org is the home for ongoing
libarchive development, including documentation,
and links to the libarchive mailing lists.
* To report an issue, use the issue tracker at
@@ -23,6 +23,7 @@ This distribution bundle includes the following major components:
* **tar**: the 'bsdtar' program is a full-featured 'tar' implementation built on libarchive
* **cpio**: the 'bsdcpio' program is a different interface to essentially the same functionality
* **cat**: the 'bsdcat' program is a simple replacement tool for zcat, bzcat, xzcat, and such
+* **unzip**: the 'bsdunzip' program is a simple replacement tool for Info-ZIP's unzip
* **examples**: Some small example programs that you may find useful.
* **examples/minitar**: a compact sample demonstrating use of libarchive.
* **contrib**: Various items sent to me by third parties; please contact the authors with any questions.
@@ -37,6 +38,7 @@ The top-level directory contains the following information files:
* **configure** - configuration script, see INSTALL for details. If your copy of the source lacks a `configure` script, you can try to construct it by running the script in `build/autogen.sh` (or use `cmake`).
The following files in the top-level directory are used by the 'configure' script:
+
* `Makefile.am`, `aclocal.m4`, `configure.ac` - used to build this distribution, only needed by maintainers
* `Makefile.in`, `config.h.in` - templates used by configure script
@@ -71,6 +73,7 @@ know about any errors or omissions you find.
## Supported Formats
Currently, the library automatically detects and reads the following formats:
+
* Old V7 tar archives
* POSIX ustar
* GNU tar format (including GNU long filenames, long link names, and sparse files)
@@ -85,13 +88,14 @@ Currently, the library automatically detects and reads the following formats:
* ZIPX archives (with support for bzip2, ppmd8, lzma and xz compressed entries)
* GNU and BSD 'ar' archives
* 'mtree' format
- * 7-Zip archives
+ * 7-Zip archives (including archives that use zstandard compression)
* Microsoft CAB format
* LHA and LZH archives
* RAR and RAR 5.0 archives (with some limitations due to RAR's proprietary status)
* XAR archives
The library also detects and handles any of the following before evaluating the archive:
+
* uuencoded files
* files with RPM wrapper
* gzip compression
@@ -103,6 +107,7 @@ The library also detects and handles any of the following before evaluating the
* zstandard compression
The library can create archives in any of the following formats:
+
* POSIX ustar
* POSIX pax interchange format
* "restricted" pax format, which will create ustar archives except for
@@ -122,6 +127,7 @@ The library can create archives in any of the following formats:
* XAR archives
When creating archives, the result can be filtered with any of the following:
+
* uuencode
* gzip compression
* bzip2 compression
@@ -187,6 +193,17 @@ questions we are asked about libarchive:
functions. On those platforms, libarchive will use the non-thread-safe
functions. Patches to improve this are of great interest to us.
+* The function `archive_write_disk_header()` is _not_ thread safe on
+ POSIX machines and could lead to security issue resulting in world
+ writeable directories. Thus it must be mutexed by the calling code.
+ This is due to calling `umask(oldumask = umask(0))`, which sets the
+ umask for the whole process to 0 for a short time frame.
+ In case other thread calls the same function in parallel, it might
+ get interrupted by it and cause the executable to use umask=0 for the
+ remaining execution.
+ This will then lead to implicitly created directories to have 777
+ permissions without sticky bit.
+
* In particular, libarchive's modules to read or write a directory
tree do use `chdir()` to optimize the directory traversals. This
can cause problems for programs that expect to do disk access from
diff --git a/contrib/libarchive/SECURITY.md b/contrib/libarchive/SECURITY.md
new file mode 100644
index 000000000000..6ca188b603fe
--- /dev/null
+++ b/contrib/libarchive/SECURITY.md
@@ -0,0 +1,19 @@
+# Security Policy
+
+If you have discovered a security vulnerability in this project, please report it
+privately. **Do not disclose it as a public issue.** This gives us time to work with you
+to fix the issue before public exposure, reducing the chance that the exploit will be
+used before a patch is released.
+
+You may submit the report in the following ways:
+
+- send an email to security@libarchive.de; and/or
+- send us a [private vulnerability report](https://github.com/libarchive/libarchive/security/advisories/new)
+
+Please provide the following information in your report:
+
+- A description of the vulnerability and its impact
+- How to reproduce the issue
+
+This project is maintained by volunteers on a reasonable-effort basis. As such, we ask
+that you give me 90 days to work on a fix before public exposure.
diff --git a/contrib/libarchive/cat/bsdcat.1 b/contrib/libarchive/cat/bsdcat.1
index 036623e4e4d6..9fa66d60e1e6 100644
--- a/contrib/libarchive/cat/bsdcat.1
+++ b/contrib/libarchive/cat/bsdcat.1
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd March 1, 2014
.Dt BSDCAT 1
.Os
diff --git a/contrib/libarchive/cat/bsdcat.c b/contrib/libarchive/cat/bsdcat.c
index bdb9c40b9150..19d3de65cea4 100644
--- a/contrib/libarchive/cat/bsdcat.c
+++ b/contrib/libarchive/cat/bsdcat.c
@@ -24,7 +24,6 @@
*/
#include "bsdcat_platform.h"
-__FBSDID("$FreeBSD$");
#include <stdio.h>
#ifdef HAVE_STDLIB_H
@@ -37,6 +36,9 @@ __FBSDID("$FreeBSD$");
#include <string.h>
#endif
+#include <archive.h>
+#include <archive_entry.h>
+
#include "bsdcat.h"
#include "err.h"
@@ -48,7 +50,7 @@ static const char *bsdcat_current_path;
static int exit_status = 0;
-void
+static __LA_NORETURN void
usage(FILE *stream, int eval)
{
const char *p;
@@ -58,7 +60,7 @@ usage(FILE *stream, int eval)
exit(eval);
}
-static void
+static __LA_NORETURN void
version(void)
{
printf("bsdcat %s - %s \n",
@@ -67,7 +69,15 @@ version(void)
exit(0);
}
-void
+static void
+bsdcat_print_error(void)
+{
+ lafe_warnc(0, "%s: %s",
+ bsdcat_current_path, archive_error_string(a));
+ exit_status = 1;
+}
+
+static void
bsdcat_next(void)
{
if (a != NULL) {
@@ -82,15 +92,7 @@ bsdcat_next(void)
archive_read_support_format_raw(a);
}
-void
-bsdcat_print_error(void)
-{
- lafe_warnc(0, "%s: %s",
- bsdcat_current_path, archive_error_string(a));
- exit_status = 1;
-}
-
-void
+static void
bsdcat_read_to_stdout(const char* filename)
{
int r;
@@ -130,12 +132,16 @@ main(int argc, char **argv)
switch (c) {
case 'h':
usage(stdout, 0);
- break;
+ /* NOTREACHED */
+ /* Fallthrough */
case OPTION_VERSION:
version();
- break;
+ /* NOTREACHED */
+ /* Fallthrough */
default:
usage(stderr, 1);
+ /* Fallthrough */
+ /* NOTREACHED */
}
}
diff --git a/contrib/libarchive/cat/bsdcat.h b/contrib/libarchive/cat/bsdcat.h
index 6467d6e3d310..504757a44040 100644
--- a/contrib/libarchive/cat/bsdcat.h
+++ b/contrib/libarchive/cat/bsdcat.h
@@ -34,9 +34,6 @@
#include "config.h"
#endif
-#include <archive.h>
-#include <archive_entry.h>
-
struct bsdcat {
/* Option parser state */
int getopt_state;
@@ -53,9 +50,5 @@ enum {
};
int bsdcat_getopt(struct bsdcat *);
-void usage(FILE *stream, int eval);
-void bsdcat_next(void);
-void bsdcat_print_error(void);
-void bsdcat_read_to_stdout(const char* filename);
#endif
diff --git a/contrib/libarchive/cat/bsdcat_platform.h b/contrib/libarchive/cat/bsdcat_platform.h
index 10b711322c37..78a6113e6f01 100644
--- a/contrib/libarchive/cat/bsdcat_platform.h
+++ b/contrib/libarchive/cat/bsdcat_platform.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD: src/usr.bin/tar/bsdtar_platform.h,v 1.26 2008/12/06 07:37:14 kientzle Exp $
*/
/*
@@ -42,16 +40,6 @@
#include "config.h"
#endif
-/* Get a real definition for __FBSDID if we can */
-#if HAVE_SYS_CDEFS_H
-#include <sys/cdefs.h>
-#endif
-
-/* If not, define it so as to avoid dangling semicolons. */
-#ifndef __FBSDID
-#define __FBSDID(a) struct _undefined_hack
-#endif
-
#ifdef HAVE_LIBARCHIVE
/* If we're using the platform libarchive, include system headers. */
#include <archive.h>
@@ -64,12 +52,14 @@
/* How to mark functions that don't return. */
/* This facilitates use of some newer static code analysis tools. */
-#undef __LA_DEAD
+#undef __LA_NORETURN
#if defined(__GNUC__) && (__GNUC__ > 2 || \
- (__GNUC__ == 2 && __GNUC_MINOR__ >= 5))
-#define __LA_DEAD __attribute__((__noreturn__))
-#else
-#define __LA_DEAD
+ (__GNUC__ == 2 && __GNUC_MINOR__ >= 5))
+#define __LA_NORETURN __attribute__((__noreturn__))
+#elif defined(_MSC_VER)
+#define __LA_NORETURN __declspec(noreturn)
+#else
+#define __LA_NORETURN
#endif
#endif /* !BSDCAT_PLATFORM_H_INCLUDED */
diff --git a/contrib/libarchive/cat/cmdline.c b/contrib/libarchive/cat/cmdline.c
index cae19beb7d4c..851b63de06e5 100644
--- a/contrib/libarchive/cat/cmdline.c
+++ b/contrib/libarchive/cat/cmdline.c
@@ -24,11 +24,10 @@
*/
/*
- * Command line parser for tar.
+ * Command line parser for bsdcat.
*/
#include "bsdcat_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -44,12 +43,12 @@ __FBSDID("$FreeBSD$");
#include "err.h"
/*
- * Short options for tar. Please keep this sorted.
+ * Short options for bsdcat. Please keep this sorted.
*/
static const char *short_options = "h";
/*
- * Long options for tar. Please keep this list sorted.
+ * Long options for bsdcat. Please keep this list sorted.
*
* The symbolic names for options that lack a short equivalent are
* defined in bsdcat.h. Also note that so far I've found no need
@@ -61,7 +60,7 @@ static const struct bsdcat_option {
const char *name;
int required; /* 1 if this option requires an argument. */
int equivalent; /* Equivalent short option. */
-} tar_longopts[] = {
+} bsdcat_longopts[] = {
{ "help", 0, 'h' },
{ "version", 0, OPTION_VERSION },
{ NULL, 0, 0 }
@@ -90,7 +89,7 @@ static const struct bsdcat_option {
* -W long options: There's an obscure GNU convention (only rarely
* supported even there) that allows "-W option=argument" as an
* alternative way to support long options. This was supported in
- * early bsdcat as a way to access long options on platforms that did
+ * early bsdtar as a way to access long options on platforms that did
* not support getopt_long() and is preserved here for backwards
* compatibility. (Of course, if I'd started with a custom
* command-line parser from the beginning, I would have had normal
@@ -115,12 +114,18 @@ bsdcat_getopt(struct bsdcat *bsdcat)
enum { state_start = 0, state_old_tar, state_next_word,
state_short, state_long };
- const struct bsdcat_option *popt, *match = NULL, *match2 = NULL;
- const char *p, *long_prefix = "--";
+ const struct bsdcat_option *popt, *match, *match2;
+ const char *p, *long_prefix;
size_t optlength;
- int opt = '?';
- int required = 0;
+ int opt;
+ int required;
+again:
+ match = NULL;
+ match2 = NULL;
+ long_prefix = "--";
+ opt = '?';
+ required = 0;
bsdcat->argument = NULL;
/* First time through, initialize everything. */
@@ -173,7 +178,7 @@ bsdcat_getopt(struct bsdcat *bsdcat)
if (opt == '\0') {
/* End of this group; recurse to get next option. */
bsdcat->getopt_state = state_next_word;
- return bsdcat_getopt(bsdcat);
+ goto again;
}
/* Does this option take an argument? */
@@ -223,7 +228,7 @@ bsdcat_getopt(struct bsdcat *bsdcat)
}
/* Search the table for an unambiguous match. */
- for (popt = tar_longopts; popt->name != NULL; popt++) {
+ for (popt = bsdcat_longopts; popt->name != NULL; popt++) {
/* Short-circuit if first chars don't match. */
if (popt->name[0] != bsdcat->getopt_word[0])
continue;
diff --git a/contrib/libarchive/cat/test/test.h b/contrib/libarchive/cat/test/test.h
index 350bcad63464..ec83d476b6b8 100644
--- a/contrib/libarchive/cat/test/test.h
+++ b/contrib/libarchive/cat/test/test.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
/* Every test program should #include "test.h" as the first thing. */
diff --git a/contrib/libarchive/cpio/bsdcpio.1 b/contrib/libarchive/cpio/bsdcpio.1
index 01b508e122f8..c52764a8c4f7 100644
--- a/contrib/libarchive/cpio/bsdcpio.1
+++ b/contrib/libarchive/cpio/bsdcpio.1
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd September 16, 2014
.Dt CPIO 1
.Os
diff --git a/contrib/libarchive/cpio/cmdline.c b/contrib/libarchive/cpio/cmdline.c
index 3d5a0ecad7f7..ab25492ede48 100644
--- a/contrib/libarchive/cpio/cmdline.c
+++ b/contrib/libarchive/cpio/cmdline.c
@@ -26,7 +26,6 @@
#include "cpio_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -115,12 +114,18 @@ cpio_getopt(struct cpio *cpio)
static int state = state_start;
static char *opt_word;
- const struct option *popt, *match = NULL, *match2 = NULL;
- const char *p, *long_prefix = "--";
+ const struct option *popt, *match, *match2;
+ const char *p, *long_prefix;
size_t optlength;
- int opt = '?';
- int required = 0;
+ int opt;
+ int required;
+again:
+ match = NULL;
+ match2 = NULL;
+ long_prefix = "--";
+ opt = '?';
+ required = 0;
cpio->argument = NULL;
/* First time through, initialize everything. */
@@ -170,7 +175,7 @@ cpio_getopt(struct cpio *cpio)
if (opt == '\0') {
/* End of this group; recurse to get next option. */
state = state_next_word;
- return cpio_getopt(cpio);
+ goto again;
}
/* Does this option take an argument? */
diff --git a/contrib/libarchive/cpio/cpio.c b/contrib/libarchive/cpio/cpio.c
index 847c92d31449..c9af535f6d0a 100644
--- a/contrib/libarchive/cpio/cpio.c
+++ b/contrib/libarchive/cpio/cpio.c
@@ -26,7 +26,6 @@
#include "cpio_platform.h"
-__FBSDID("$FreeBSD$");
#include <sys/types.h>
#include <archive.h>
@@ -108,22 +107,22 @@ static int entry_to_archive(struct cpio *, struct archive_entry *);
static int file_to_archive(struct cpio *, const char *);
static void free_cache(struct name_cache *cache);
static void list_item_verbose(struct cpio *, struct archive_entry *);
-static void long_help(void) __LA_DEAD;
+static __LA_NORETURN void long_help(void);
static const char *lookup_gname(struct cpio *, gid_t gid);
static int lookup_gname_helper(struct cpio *,
const char **name, id_t gid);
static const char *lookup_uname(struct cpio *, uid_t uid);
static int lookup_uname_helper(struct cpio *,
const char **name, id_t uid);
-static void mode_in(struct cpio *) __LA_DEAD;
-static void mode_list(struct cpio *) __LA_DEAD;
+static __LA_NORETURN void mode_in(struct cpio *);
+static __LA_NORETURN void mode_list(struct cpio *);
static void mode_out(struct cpio *);
static void mode_pass(struct cpio *, const char *);
static const char *remove_leading_slash(const char *);
static int restore_time(struct cpio *, struct archive_entry *,
const char *, int fd);
-static void usage(void) __LA_DEAD;
-static void version(void) __LA_DEAD;
+static __LA_NORETURN void usage(void);
+static __LA_NORETURN void version(void);
static const char * passphrase_callback(struct archive *, void *);
static void passphrase_free(char *);
@@ -251,7 +250,7 @@ main(int argc, char *argv[])
break;
case 'h':
long_help();
- break;
+ /* NOTREACHED */
case 'I': /* NetBSD/OpenBSD */
cpio->filename = cpio->argument;
break;
@@ -358,7 +357,7 @@ main(int argc, char *argv[])
break;
case OPTION_VERSION: /* GNU convention */
version();
- break;
+ /* NOTREACHED */
#if 0
/*
* cpio_getopt() handles -W specially, so it's not
@@ -427,7 +426,7 @@ main(int argc, char *argv[])
mode_list(cpio);
else
mode_in(cpio);
- break;
+ /* NOTREACHED */
case 'p':
if (*cpio->argv == NULL || **cpio->argv == '\0')
lafe_errc(1, 0,
@@ -442,6 +441,8 @@ main(int argc, char *argv[])
archive_match_free(cpio->matching);
free_cache(cpio->gname_cache);
free_cache(cpio->uname_cache);
+ 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);
@@ -1144,20 +1145,16 @@ list_item_verbose(struct cpio *cpio, struct archive_entry *entry)
{
char size[32];
char date[32];
- char uids[16], gids[16];
+ char uids[22], gids[22];
const char *uname, *gname;
FILE *out = stdout;
const char *fmt;
time_t mtime;
static time_t now;
struct tm *ltime;
-#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S)
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
struct tm tmbuf;
#endif
-#if defined(HAVE__LOCALTIME64_S)
- errno_t terr;
- __time64_t tmptime;
-#endif
if (!now)
time(&now);
@@ -1205,19 +1202,17 @@ list_item_verbose(struct cpio *cpio, struct archive_entry *entry)
else
fmt = cpio->day_first ? "%e %b %H:%M" : "%b %e %H:%M";
#endif
-#if defined(HAVE_LOCALTIME_R)
+#if defined(HAVE_LOCALTIME_S)
+ ltime = localtime_s(&tmbuf, &mtime) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
ltime = localtime_r(&mtime, &tmbuf);
-#elif defined(HAVE__LOCALTIME64_S)
- tmptime = mtime;
- terr = _localtime64_s(&tmbuf, &tmptime);
- if (terr)
- ltime = NULL;
- else
- ltime = &tmbuf;
#else
ltime = localtime(&mtime);
#endif
- strftime(date, sizeof(date), fmt, ltime);
+ if (ltime != NULL)
+ strftime(date, sizeof(date), fmt, ltime);
+ else
+ strcpy(date, "invalid mtime");
fprintf(out, "%s%3d %-8s %-8s %8s %12s %s",
archive_entry_strmode(entry),
diff --git a/contrib/libarchive/cpio/cpio.h b/contrib/libarchive/cpio/cpio.h
index 6ab55e474c81..3e97c0900b73 100644
--- a/contrib/libarchive/cpio/cpio.h
+++ b/contrib/libarchive/cpio/cpio.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef CPIO_H_INCLUDED
diff --git a/contrib/libarchive/cpio/cpio_platform.h b/contrib/libarchive/cpio/cpio_platform.h
index 333848970496..263404b40dab 100644
--- a/contrib/libarchive/cpio/cpio_platform.h
+++ b/contrib/libarchive/cpio/cpio_platform.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
@@ -46,16 +44,6 @@
#include "cpio_windows.h"
#endif
-/* Get a real definition for __FBSDID if we can */
-#if HAVE_SYS_CDEFS_H
-#include <sys/cdefs.h>
-#endif
-
-/* If not, define it so as to avoid dangling semicolons. */
-#ifndef __FBSDID
-#define __FBSDID(a) struct _undefined_hack
-#endif
-
#ifdef HAVE_LIBARCHIVE
/* If we're using the platform libarchive, include system headers. */
#include <archive.h>
@@ -69,9 +57,11 @@
/* How to mark functions that don't return. */
#if defined(__GNUC__) && (__GNUC__ > 2 || \
(__GNUC__ == 2 && __GNUC_MINOR__ >= 5))
-#define __LA_DEAD __attribute__((__noreturn__))
+#define __LA_NORETURN __attribute__((__noreturn__))
+#elif defined(_MSC_VER)
+#define __LA_NORETURN __declspec(noreturn)
#else
-#define __LA_DEAD
+#define __LA_NORETURN
#endif
#endif /* !CPIO_PLATFORM_H_INCLUDED */
diff --git a/contrib/libarchive/cpio/test/test.h b/contrib/libarchive/cpio/test/test.h
index 1dadf68890bf..f8f3a4038b57 100644
--- a/contrib/libarchive/cpio/test/test.h
+++ b/contrib/libarchive/cpio/test/test.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
/* 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 fa52def7eaf3..c09df5e137c4 100644
--- a/contrib/libarchive/cpio/test/test_0.c
+++ b/contrib/libarchive/cpio/test/test_0.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* This first test does basic sanity checks on the environment. For
diff --git a/contrib/libarchive/cpio/test/test_basic.c b/contrib/libarchive/cpio/test/test_basic.c
index 3662b529e235..993d555b831c 100644
--- a/contrib/libarchive/cpio/test/test_basic.c
+++ b/contrib/libarchive/cpio/test/test_basic.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
verify_files(const char *msg)
diff --git a/contrib/libarchive/cpio/test/test_cmdline.c b/contrib/libarchive/cpio/test/test_cmdline.c
index 2dd7d651dc57..f4e05ee58599 100644
--- a/contrib/libarchive/cpio/test/test_cmdline.c
+++ b/contrib/libarchive/cpio/test/test_cmdline.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Test the command-line parsing.
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_Z.c b/contrib/libarchive/cpio/test/test_extract_cpio_Z.c
index f908fc5b84f5..257d70d04211 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_Z.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_Z.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_cpio_Z)
{
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_bz2.c b/contrib/libarchive/cpio/test/test_extract_cpio_bz2.c
index 9525e63ae906..08fe1fe53468 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_bz2.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_bz2.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_cpio_bz2)
{
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_grz.c b/contrib/libarchive/cpio/test/test_extract_cpio_grz.c
index f1a080597e34..969b30e44de5 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_grz.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_grz.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_cpio_grz)
{
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_gz.c b/contrib/libarchive/cpio/test/test_extract_cpio_gz.c
index 19cee510c857..16296146f87e 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_gz.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_gz.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_cpio_gz)
{
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_lrz.c b/contrib/libarchive/cpio/test/test_extract_cpio_lrz.c
index 67667585e431..7ef213f74aac 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_lrz.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_lrz.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_cpio_lrz)
{
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_lz.c b/contrib/libarchive/cpio/test/test_extract_cpio_lz.c
index 4454e7b191e9..bfdf87869b37 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_lz.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_lz.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_cpio_lz)
{
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_lz4.c b/contrib/libarchive/cpio/test/test_extract_cpio_lz4.c
index c16247be2bef..f8cf5f8fab0d 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_lz4.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_lz4.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_cpio_lz4)
{
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_lzma.c b/contrib/libarchive/cpio/test/test_extract_cpio_lzma.c
index ae630d6119d8..81fc3c236ab5 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_lzma.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_lzma.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_cpio_lzma)
{
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_lzo.c b/contrib/libarchive/cpio/test/test_extract_cpio_lzo.c
index 99476af95318..d54d4f712374 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_lzo.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_lzo.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_cpio_lzo)
{
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_xz.c b/contrib/libarchive/cpio/test/test_extract_cpio_xz.c
index 60f1b5a9de84..faeea202e050 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_xz.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_xz.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_cpio_xz)
{
diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_zstd.c b/contrib/libarchive/cpio/test/test_extract_cpio_zstd.c
index 289f33d0583c..31421c3b60d7 100644
--- a/contrib/libarchive/cpio/test/test_extract_cpio_zstd.c
+++ b/contrib/libarchive/cpio/test/test_extract_cpio_zstd.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_cpio_zstd)
{
diff --git a/contrib/libarchive/cpio/test/test_format_newc.c b/contrib/libarchive/cpio/test/test_format_newc.c
index 6b9ba47cfe1a..ee0087d4ca94 100644
--- a/contrib/libarchive/cpio/test/test_format_newc.c
+++ b/contrib/libarchive/cpio/test/test_format_newc.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/* Number of bytes needed to pad 'n' to multiple of 'block', assuming
* that 'block' is a power of two. This trick can be more easily
diff --git a/contrib/libarchive/cpio/test/test_gcpio_compat.c b/contrib/libarchive/cpio/test/test_gcpio_compat.c
index 0a6894fa8214..82c71ec3cd21 100644
--- a/contrib/libarchive/cpio/test/test_gcpio_compat.c
+++ b/contrib/libarchive/cpio/test/test_gcpio_compat.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
unpack_test(const char *from, const char *options, const char *se)
diff --git a/contrib/libarchive/cpio/test/test_gcpio_compat_ref.bin.uu b/contrib/libarchive/cpio/test/test_gcpio_compat_ref.bin.uu
index 745d8ab7851a..f2ffad975644 100644
--- a/contrib/libarchive/cpio/test/test_gcpio_compat_ref.bin.uu
+++ b/contrib/libarchive/cpio/test/test_gcpio_compat_ref.bin.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_gcpio_compat_ref.bin
MQW%9`*IWI('H`^@#`@````U'=YD%````"@!F:6QE```Q,C,T-38W.#D*QW%9
M`*IWI('H`^@#`@````U'=YD)````"@!L:6YK9FEL90``,3(S-#4V-S@Y"L=Q
diff --git a/contrib/libarchive/cpio/test/test_gcpio_compat_ref.crc.uu b/contrib/libarchive/cpio/test/test_gcpio_compat_ref.crc.uu
index df8dde05bd82..56ba62c9ed1f 100644
--- a/contrib/libarchive/cpio/test/test_gcpio_compat_ref.crc.uu
+++ b/contrib/libarchive/cpio/test/test_gcpio_compat_ref.crc.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_gcpio_compat_ref.crc
M,#<P-S`R,#`S,S<W86$P,#`P.#%A-#`P,#`P,V4X,#`P,#`S93@P,#`P,#`P
M,C0W,&0Y.3<W,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#4Y,#`P,#`P,#`P,#`P
diff --git a/contrib/libarchive/cpio/test/test_gcpio_compat_ref.newc.uu b/contrib/libarchive/cpio/test/test_gcpio_compat_ref.newc.uu
index 1e29ba907bb4..449c083c311c 100644
--- a/contrib/libarchive/cpio/test/test_gcpio_compat_ref.newc.uu
+++ b/contrib/libarchive/cpio/test/test_gcpio_compat_ref.newc.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_gcpio_compat_ref.newc
M,#<P-S`Q,#`S,S<W86$P,#`P.#%A-#`P,#`P,V4X,#`P,#`S93@P,#`P,#`P
M,C0W,&0Y.3<W,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#4Y,#`P,#`P,#`P,#`P
diff --git a/contrib/libarchive/cpio/test/test_gcpio_compat_ref.ustar.uu b/contrib/libarchive/cpio/test/test_gcpio_compat_ref.ustar.uu
index 77989f4aed06..2f6a44057eac 100644
--- a/contrib/libarchive/cpio/test/test_gcpio_compat_ref.ustar.uu
+++ b/contrib/libarchive/cpio/test/test_gcpio_compat_ref.ustar.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_gcpio_compat_ref.ustar
M9FEL90``````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
diff --git a/contrib/libarchive/cpio/test/test_missing_file.c b/contrib/libarchive/cpio/test/test_missing_file.c
index a908f5301bc6..784d53cfe141 100644
--- a/contrib/libarchive/cpio/test/test_missing_file.c
+++ b/contrib/libarchive/cpio/test/test_missing_file.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_missing_file)
{
diff --git a/contrib/libarchive/cpio/test/test_option_0.c b/contrib/libarchive/cpio/test/test_option_0.c
index bc4aecd2afc2..fbe6f7ac4a85 100644
--- a/contrib/libarchive/cpio/test/test_option_0.c
+++ b/contrib/libarchive/cpio/test/test_option_0.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_0)
{
diff --git a/contrib/libarchive/cpio/test/test_option_B_upper.c b/contrib/libarchive/cpio/test/test_option_B_upper.c
index b040354b6053..79dc91efb5ba 100644
--- a/contrib/libarchive/cpio/test/test_option_B_upper.c
+++ b/contrib/libarchive/cpio/test/test_option_B_upper.c
@@ -23,8 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
-
DEFINE_TEST(test_option_B_upper)
{
diff --git a/contrib/libarchive/cpio/test/test_option_C_upper.c b/contrib/libarchive/cpio/test/test_option_C_upper.c
index c8e63fd34fb5..f9fd7e159339 100644
--- a/contrib/libarchive/cpio/test/test_option_C_upper.c
+++ b/contrib/libarchive/cpio/test/test_option_C_upper.c
@@ -23,8 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
-
DEFINE_TEST(test_option_C_upper)
{
diff --git a/contrib/libarchive/cpio/test/test_option_J_upper.c b/contrib/libarchive/cpio/test/test_option_J_upper.c
index 1d7d05131b3d..f76d3b236913 100644
--- a/contrib/libarchive/cpio/test/test_option_J_upper.c
+++ b/contrib/libarchive/cpio/test/test_option_J_upper.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_J_upper)
{
@@ -43,6 +42,7 @@ DEFINE_TEST(test_option_J_upper)
if (strstr(p, "compression not available") != NULL) {
skipping("This version of bsdcpio was compiled "
"without xz support");
+ free(p);
return;
}
failure("-J option is broken");
diff --git a/contrib/libarchive/cpio/test/test_option_L_upper.c b/contrib/libarchive/cpio/test/test_option_L_upper.c
index 1b0ae7c3e956..b6fb713f110f 100644
--- a/contrib/libarchive/cpio/test/test_option_L_upper.c
+++ b/contrib/libarchive/cpio/test/test_option_L_upper.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/* This is a little pointless, as Windows doesn't support symlinks
* (except for the seriously crippled CreateSymbolicLink API) so these
diff --git a/contrib/libarchive/cpio/test/test_option_Z_upper.c b/contrib/libarchive/cpio/test/test_option_Z_upper.c
index ff388427e372..aa408e4e548c 100644
--- a/contrib/libarchive/cpio/test/test_option_Z_upper.c
+++ b/contrib/libarchive/cpio/test/test_option_Z_upper.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_Z_upper)
{
diff --git a/contrib/libarchive/cpio/test/test_option_a.c b/contrib/libarchive/cpio/test/test_option_a.c
index 71345d62abe5..885eb12c80f5 100644
--- a/contrib/libarchive/cpio/test/test_option_a.c
+++ b/contrib/libarchive/cpio/test/test_option_a.c
@@ -28,7 +28,6 @@
#elif defined(HAVE_SYS_UTIME_H)
#include <sys/utime.h>
#endif
-__FBSDID("$FreeBSD$");
static struct {
const char *name;
diff --git a/contrib/libarchive/cpio/test/test_option_b64encode.c b/contrib/libarchive/cpio/test/test_option_b64encode.c
index 7c15a8230606..501976c202a1 100644
--- a/contrib/libarchive/cpio/test/test_option_b64encode.c
+++ b/contrib/libarchive/cpio/test/test_option_b64encode.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_b64encode)
{
diff --git a/contrib/libarchive/cpio/test/test_option_c.c b/contrib/libarchive/cpio/test/test_option_c.c
index 013caed56030..0b6bed2fac93 100644
--- a/contrib/libarchive/cpio/test/test_option_c.c
+++ b/contrib/libarchive/cpio/test/test_option_c.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static int
is_octal(const char *p, size_t l)
@@ -37,10 +36,10 @@ is_octal(const char *p, size_t l)
return (1);
}
-static int
+static long long int
from_octal(const char *p, size_t l)
{
- int r = 0;
+ long long int r = 0;
while (l > 0) {
r *= 8;
@@ -161,7 +160,7 @@ DEFINE_TEST(test_option_c)
assertEqualInt(from_octal(e + 24, 6), uid); /* uid */
assertEqualInt(gid, from_octal(e + 30, 6)); /* gid */
assertEqualMem(e + 36, "000001", 6); /* nlink */
- failure("file entries should have rdev == 0 (dev was 0%o)",
+ failure("file entries should have rdev == 0 (dev was 0%llo)",
from_octal(e + 6, 6));
assertEqualMem(e + 42, "000000", 6); /* rdev */
t = from_octal(e + 48, 11); /* mtime */
diff --git a/contrib/libarchive/cpio/test/test_option_d.c b/contrib/libarchive/cpio/test/test_option_d.c
index 9ff14539698f..b96430e4f37a 100644
--- a/contrib/libarchive/cpio/test/test_option_d.c
+++ b/contrib/libarchive/cpio/test/test_option_d.c
@@ -23,8 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
-
DEFINE_TEST(test_option_d)
{
diff --git a/contrib/libarchive/cpio/test/test_option_f.c b/contrib/libarchive/cpio/test/test_option_f.c
index 784e0858431b..72383884ac1e 100644
--- a/contrib/libarchive/cpio/test/test_option_f.c
+++ b/contrib/libarchive/cpio/test/test_option_f.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Unpack the archive in a new dir.
diff --git a/contrib/libarchive/cpio/test/test_option_f.cpio.uu b/contrib/libarchive/cpio/test/test_option_f.cpio.uu
index 42c63c39685e..60b74173f413 100644
--- a/contrib/libarchive/cpio/test/test_option_f.cpio.uu
+++ b/contrib/libarchive/cpio/test/test_option_f.cpio.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_option_f.cpio
M,#<P-S`W,#`P,3,Q-C(Q-38Q,3`P-C0T,#`Q-S4P,#`Q-S4P,#`P,#`Q,#`P
M,#`P,3`W,S4Q,3(U,C8P,#`P,#4P,#`P,#`P,#`P,&$Q,C,`,#<P-S`W,#`P
diff --git a/contrib/libarchive/cpio/test/test_option_grzip.c b/contrib/libarchive/cpio/test/test_option_grzip.c
index 7e7dd2c8e6f3..cd898cd9228f 100644
--- a/contrib/libarchive/cpio/test/test_option_grzip.c
+++ b/contrib/libarchive/cpio/test/test_option_grzip.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_grzip)
{
diff --git a/contrib/libarchive/cpio/test/test_option_help.c b/contrib/libarchive/cpio/test/test_option_help.c
index 56234306f539..cf69c76496d5 100644
--- a/contrib/libarchive/cpio/test/test_option_help.c
+++ b/contrib/libarchive/cpio/test/test_option_help.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Test that "--help", "-h", and "-W help" options all work and
diff --git a/contrib/libarchive/cpio/test/test_option_l.c b/contrib/libarchive/cpio/test/test_option_l.c
index 5c76e688e6e9..3f4390a6ff22 100644
--- a/contrib/libarchive/cpio/test/test_option_l.c
+++ b/contrib/libarchive/cpio/test/test_option_l.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_l)
{
diff --git a/contrib/libarchive/cpio/test/test_option_lrzip.c b/contrib/libarchive/cpio/test/test_option_lrzip.c
index 8d9c0d576cc3..4c46f1c65bba 100644
--- a/contrib/libarchive/cpio/test/test_option_lrzip.c
+++ b/contrib/libarchive/cpio/test/test_option_lrzip.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_lrzip)
{
diff --git a/contrib/libarchive/cpio/test/test_option_lz4.c b/contrib/libarchive/cpio/test/test_option_lz4.c
index ebd376736f42..4c5186d55ccc 100644
--- a/contrib/libarchive/cpio/test/test_option_lz4.c
+++ b/contrib/libarchive/cpio/test/test_option_lz4.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_lz4)
{
diff --git a/contrib/libarchive/cpio/test/test_option_lzma.c b/contrib/libarchive/cpio/test/test_option_lzma.c
index b7cad3d1e99a..3c2648b827cd 100644
--- a/contrib/libarchive/cpio/test/test_option_lzma.c
+++ b/contrib/libarchive/cpio/test/test_option_lzma.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_lzma)
{
diff --git a/contrib/libarchive/cpio/test/test_option_lzop.c b/contrib/libarchive/cpio/test/test_option_lzop.c
index aa40ef5b6392..b787b720a878 100644
--- a/contrib/libarchive/cpio/test/test_option_lzop.c
+++ b/contrib/libarchive/cpio/test/test_option_lzop.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_lzop)
{
diff --git a/contrib/libarchive/cpio/test/test_option_m.c b/contrib/libarchive/cpio/test/test_option_m.c
index de880b2883e1..f2f297e10572 100644
--- a/contrib/libarchive/cpio/test/test_option_m.c
+++ b/contrib/libarchive/cpio/test/test_option_m.c
@@ -23,8 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
-
DEFINE_TEST(test_option_m)
{
diff --git a/contrib/libarchive/cpio/test/test_option_m.cpio.uu b/contrib/libarchive/cpio/test/test_option_m.cpio.uu
index 3d2002355e55..0c36ac4fdfd5 100644
--- a/contrib/libarchive/cpio/test/test_option_m.cpio.uu
+++ b/contrib/libarchive/cpio/test/test_option_m.cpio.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_option_m.cpio
M,#<P-S`W,#`P,3,Q-#4P,#8T,3`P-C0T,#`Q-S4P,#`Q-S4P,#`P,#`Q,#`P
M,#`P,#`P,#`P,#`P,#$P,#`P,#4P,#`P,#`P,#`P,&9I;&4`,#<P-S`W,#`P
diff --git a/contrib/libarchive/cpio/test/test_option_passphrase.c b/contrib/libarchive/cpio/test/test_option_passphrase.c
index ae77a23fcb74..d409b30c81cf 100644
--- a/contrib/libarchive/cpio/test/test_option_passphrase.c
+++ b/contrib/libarchive/cpio/test/test_option_passphrase.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_passphrase)
{
diff --git a/contrib/libarchive/cpio/test/test_option_t.c b/contrib/libarchive/cpio/test/test_option_t.c
index eaa73fa3a016..953e4a80651e 100644
--- a/contrib/libarchive/cpio/test/test_option_t.c
+++ b/contrib/libarchive/cpio/test/test_option_t.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_LOCALE_H
#include <locale.h>
@@ -36,6 +35,10 @@ DEFINE_TEST(test_option_t)
time_t mtime;
char date[32];
char date2[32];
+ struct tm *tmptr;
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
+ struct tm tmbuf;
+#endif
/* List reference archive, make sure the TOC is correct. */
extract_reference_file("test_option_t.cpio");
@@ -87,11 +90,18 @@ DEFINE_TEST(test_option_t)
#ifdef HAVE_LOCALE_H
setlocale(LC_ALL, "");
#endif
+#if defined(HAVE_LOCALTIME_S)
+ tmptr = localtime_s(&tmbuf, &mtime) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
+ tmptr = localtime_r(&mtime, &tmbuf);
+#else
+ tmptr = localtime(&mtime);
+#endif
#if defined(_WIN32) && !defined(__CYGWIN__)
- strftime(date2, sizeof(date2)-1, "%b %d %Y", localtime(&mtime));
+ strftime(date2, sizeof(date2)-1, "%b %d %Y", tmptr);
_snprintf(date, sizeof(date)-1, "%12.12s file", date2);
#else
- strftime(date2, sizeof(date2)-1, "%b %e %Y", localtime(&mtime));
+ strftime(date2, sizeof(date2)-1, "%b %e %Y", tmptr);
snprintf(date, sizeof(date)-1, "%12.12s file", date2);
#endif
assertEqualMem(p + 42, date, strlen(date));
diff --git a/contrib/libarchive/cpio/test/test_option_t.cpio.uu b/contrib/libarchive/cpio/test/test_option_t.cpio.uu
index 055fe747d06f..d0bf60bf7d9d 100644
--- a/contrib/libarchive/cpio/test/test_option_t.cpio.uu
+++ b/contrib/libarchive/cpio/test/test_option_t.cpio.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_option_t.cpio
M,#<P-S`W,#`P,3,Q-#4P,#8T,3`P-C0T,#`Q-S4P,#`Q-S4P,#`P,#`Q,#`P
M,#`P,#`P,#`P,#`P,#$P,#`P,#4P,#`P,#`P,#`P,&9I;&4`,#<P-S`W,#`P
diff --git a/contrib/libarchive/cpio/test/test_option_t.stdout.uu b/contrib/libarchive/cpio/test/test_option_t.stdout.uu
index 2457706eceed..c5144bb68029 100644
--- a/contrib/libarchive/cpio/test/test_option_t.stdout.uu
+++ b/contrib/libarchive/cpio/test/test_option_t.stdout.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_option_t.stdout
%9FEL90H`
`
diff --git a/contrib/libarchive/cpio/test/test_option_tv.stdout.uu b/contrib/libarchive/cpio/test/test_option_tv.stdout.uu
index 7f1879c80b16..ad9481360f35 100644
--- a/contrib/libarchive/cpio/test/test_option_tv.stdout.uu
+++ b/contrib/libarchive/cpio/test/test_option_tv.stdout.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_option_tv.stdout
M+7)W+7(M+7(M+2`@(#$@=&EM("`@("`@=&EM("`@("`@("`@("`@(#`@1&5C
/(#,Q("`Q.38Y(&9I;&4*
diff --git a/contrib/libarchive/cpio/test/test_option_u.c b/contrib/libarchive/cpio/test/test_option_u.c
index cc790b1c0af2..fe5b863af0e2 100644
--- a/contrib/libarchive/cpio/test/test_option_u.c
+++ b/contrib/libarchive/cpio/test/test_option_u.c
@@ -28,7 +28,6 @@
#elif defined(HAVE_SYS_UTIME_H)
#include <sys/utime.h>
#endif
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_u)
{
diff --git a/contrib/libarchive/cpio/test/test_option_uuencode.c b/contrib/libarchive/cpio/test/test_option_uuencode.c
index a42a0e03096f..28662ddfb659 100644
--- a/contrib/libarchive/cpio/test/test_option_uuencode.c
+++ b/contrib/libarchive/cpio/test/test_option_uuencode.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_uuencode)
{
diff --git a/contrib/libarchive/cpio/test/test_option_xz.c b/contrib/libarchive/cpio/test/test_option_xz.c
index f0d3b33d45b8..9116ecace3a7 100644
--- a/contrib/libarchive/cpio/test/test_option_xz.c
+++ b/contrib/libarchive/cpio/test/test_option_xz.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_xz)
{
diff --git a/contrib/libarchive/cpio/test/test_option_y.c b/contrib/libarchive/cpio/test/test_option_y.c
index ddb498ffc12f..a78dff8cf4ea 100644
--- a/contrib/libarchive/cpio/test/test_option_y.c
+++ b/contrib/libarchive/cpio/test/test_option_y.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_y)
{
diff --git a/contrib/libarchive/cpio/test/test_option_z.c b/contrib/libarchive/cpio/test/test_option_z.c
index 803232d045c2..9a1500d77f32 100644
--- a/contrib/libarchive/cpio/test/test_option_z.c
+++ b/contrib/libarchive/cpio/test/test_option_z.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_z)
{
diff --git a/contrib/libarchive/cpio/test/test_option_zstd.c b/contrib/libarchive/cpio/test/test_option_zstd.c
index 29b8c78b94aa..10c3ed9784e8 100644
--- a/contrib/libarchive/cpio/test/test_option_zstd.c
+++ b/contrib/libarchive/cpio/test/test_option_zstd.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_zstd)
{
diff --git a/contrib/libarchive/cpio/test/test_owner_parse.c b/contrib/libarchive/cpio/test/test_owner_parse.c
index bef02da7badf..fc6f18943f5d 100644
--- a/contrib/libarchive/cpio/test/test_owner_parse.c
+++ b/contrib/libarchive/cpio/test/test_owner_parse.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#include "../cpio.h"
#include "err.h"
diff --git a/contrib/libarchive/cpio/test/test_passthrough_dotdot.c b/contrib/libarchive/cpio/test/test_passthrough_dotdot.c
index 58d82349acad..831c1f81c1cb 100644
--- a/contrib/libarchive/cpio/test/test_passthrough_dotdot.c
+++ b/contrib/libarchive/cpio/test/test_passthrough_dotdot.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Verify that "cpio -p .." works.
diff --git a/contrib/libarchive/cpio/test/test_passthrough_reverse.c b/contrib/libarchive/cpio/test/test_passthrough_reverse.c
index 42df75abd4ce..7ae0e6602a34 100644
--- a/contrib/libarchive/cpio/test/test_passthrough_reverse.c
+++ b/contrib/libarchive/cpio/test/test_passthrough_reverse.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* As reported by Bernd Walter: Some people are in the habit of
diff --git a/contrib/libarchive/libarchive/archive.h b/contrib/libarchive/libarchive/archive.h
index a44da908ad90..fd4dd20fad13 100644
--- a/contrib/libarchive/libarchive/archive.h
+++ b/contrib/libarchive/libarchive/archive.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef ARCHIVE_H_INCLUDED
@@ -36,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 3005002
+#define ARCHIVE_VERSION_NUMBER 3007004
#include <sys/stat.h>
#include <stddef.h> /* for wchar_t */
@@ -97,7 +95,7 @@ typedef ssize_t la_ssize_t;
#endif
/* Large file support for Android */
-#ifdef __ANDROID__
+#if defined(__LIBARCHIVE_BUILD) && defined(__ANDROID__)
#include "android_lf.h"
#endif
@@ -120,6 +118,8 @@ typedef ssize_t la_ssize_t;
# define __LA_DECL __declspec(dllimport)
# endif
# endif
+#elif defined __LIBARCHIVE_ENABLE_VISIBILITY
+# define __LA_DECL __attribute__((visibility("default")))
#else
/* Static libraries or non-Windows needs no special declaration. */
# define __LA_DECL
@@ -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.5.2"
+#define ARCHIVE_VERSION_ONLY_STRING "3.7.4"
#define ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING
__LA_DECL const char * archive_version_string(void);
@@ -533,6 +533,10 @@ __LA_DECL int archive_read_open_filenames(struct archive *,
const char **_filenames, size_t _block_size);
__LA_DECL int archive_read_open_filename_w(struct archive *,
const wchar_t *_filename, size_t _block_size);
+#if defined(_WIN32) && !defined(__CYGWIN__)
+__LA_DECL int archive_read_open_filenames_w(struct archive *,
+ const wchar_t **_filenames, size_t _block_size);
+#endif
/* archive_read_open_file() is a deprecated synonym for ..._open_filename(). */
__LA_DECL int archive_read_open_file(struct archive *,
const char *_filename, size_t _block_size) __LA_DEPRECATED;
@@ -891,7 +895,7 @@ __LA_DECL int archive_write_set_options(struct archive *_a,
const char *opts);
/*
- * Set a encryption passphrase.
+ * Set an encryption passphrase.
*/
__LA_DECL int archive_write_set_passphrase(struct archive *_a, const char *p);
__LA_DECL int archive_write_set_passphrase_callback(struct archive *,
@@ -1024,6 +1028,8 @@ __LA_DECL int archive_read_disk_set_atime_restored(struct archive *);
#define ARCHIVE_READDISK_NO_ACL (0x0020)
/* Default: File flags are read from disk. */
#define ARCHIVE_READDISK_NO_FFLAGS (0x0040)
+/* Default: Sparse file information is read from disk. */
+#define ARCHIVE_READDISK_NO_SPARSE (0x0080)
__LA_DECL int archive_read_disk_set_behavior(struct archive *,
int flags);
diff --git a/contrib/libarchive/libarchive/archive_acl.c b/contrib/libarchive/libarchive/archive_acl.c
index ead7e36e49ec..254324c71309 100644
--- a/contrib/libarchive/libarchive/archive_acl.c
+++ b/contrib/libarchive/libarchive/archive_acl.c
@@ -25,7 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
diff --git a/contrib/libarchive/libarchive/archive_acl_private.h b/contrib/libarchive/libarchive/archive_acl_private.h
index af108162c664..750b4dd7d898 100644
--- a/contrib/libarchive/libarchive/archive_acl_private.h
+++ b/contrib/libarchive/libarchive/archive_acl_private.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef ARCHIVE_ACL_PRIVATE_H_INCLUDED
diff --git a/contrib/libarchive/libarchive/archive_blake2.h b/contrib/libarchive/libarchive/archive_blake2.h
index dd6fe6fe5a98..8f6b5e9221f4 100644
--- a/contrib/libarchive/libarchive/archive_blake2.h
+++ b/contrib/libarchive/libarchive/archive_blake2.h
@@ -21,8 +21,10 @@
#if defined(_MSC_VER)
#define BLAKE2_PACKED(x) __pragma(pack(push, 1)) x __pragma(pack(pop))
-#else
+#elif defined(__GNUC__)
#define BLAKE2_PACKED(x) x __attribute__((packed))
+#else
+#define BLAKE2_PACKED(x) _Pragma("pack 1") x _Pragma("pack 0")
#endif
#if defined(__cplusplus)
diff --git a/contrib/libarchive/libarchive/archive_blake2_impl.h b/contrib/libarchive/libarchive/archive_blake2_impl.h
index 0f05defea36f..eb8619ca7c98 100644
--- a/contrib/libarchive/libarchive/archive_blake2_impl.h
+++ b/contrib/libarchive/libarchive/archive_blake2_impl.h
@@ -154,7 +154,7 @@ static BLAKE2_INLINE uint64_t rotr64( const uint64_t w, const unsigned c )
/* prevents compiler optimizing out memset() */
static BLAKE2_INLINE void secure_zero_memory(void *v, size_t n)
{
- static void *(*const volatile memset_v)(void *, int, size_t) = &memset;
+ static void *(__LA_LIBC_CC *const volatile memset_v)(void *, int, size_t) = &memset;
memset_v(v, 0, n);
}
diff --git a/contrib/libarchive/libarchive/archive_blake2s_ref.c b/contrib/libarchive/libarchive/archive_blake2s_ref.c
index d92ffd0fc56a..93d3281189d7 100644
--- a/contrib/libarchive/libarchive/archive_blake2s_ref.c
+++ b/contrib/libarchive/libarchive/archive_blake2s_ref.c
@@ -13,6 +13,8 @@
https://blake2.net.
*/
+#include "archive_platform.h"
+
#include <stdint.h>
#include <string.h>
#include <stdio.h>
diff --git a/contrib/libarchive/libarchive/archive_blake2sp_ref.c b/contrib/libarchive/libarchive/archive_blake2sp_ref.c
index aef101084a8b..b913a4db65e4 100644
--- a/contrib/libarchive/libarchive/archive_blake2sp_ref.c
+++ b/contrib/libarchive/libarchive/archive_blake2sp_ref.c
@@ -13,6 +13,8 @@
https://blake2.net.
*/
+#include "archive_platform.h"
+
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
diff --git a/contrib/libarchive/libarchive/archive_check_magic.c b/contrib/libarchive/libarchive/archive_check_magic.c
index 9a69bd92b641..d12f0c496e27 100644
--- a/contrib/libarchive/libarchive/archive_check_magic.c
+++ b/contrib/libarchive/libarchive/archive_check_magic.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -62,7 +61,7 @@ errmsg(const char *m)
}
}
-static __LA_DEAD void
+static __LA_NORETURN void
diediedie(void)
{
#if defined(_WIN32) && !defined(__CYGWIN__) && defined(_DEBUG)
@@ -99,13 +98,12 @@ archive_handle_type_name(unsigned m)
}
}
-
-static char *
+static void
write_all_states(char *buff, unsigned int states)
{
unsigned int lowbit;
- buff[0] = '\0';
+ *buff = '\0';
/* A trick for computing the lowest set bit. */
while ((lowbit = states & (1 + ~states)) != 0) {
@@ -114,7 +112,6 @@ write_all_states(char *buff, unsigned int states)
if (states != 0)
strcat(buff, "/");
}
- return buff;
}
/*
@@ -160,16 +157,19 @@ __archive_check_magic(struct archive *a, unsigned int magic,
if ((a->state & state) == 0) {
/* If we're already FATAL, don't overwrite the error. */
- if (a->state != ARCHIVE_STATE_FATAL)
+ if (a->state != ARCHIVE_STATE_FATAL) {
+ write_all_states(states1, a->state);
+ write_all_states(states2, state);
archive_set_error(a, -1,
"INTERNAL ERROR: Function '%s' invoked with"
" archive structure in state '%s',"
" should be in state '%s'",
function,
- write_all_states(states1, a->state),
- write_all_states(states2, state));
+ states1,
+ states2);
+ }
a->state = ARCHIVE_STATE_FATAL;
return (ARCHIVE_FATAL);
}
- return ARCHIVE_OK;
+ return (ARCHIVE_OK);
}
diff --git a/contrib/libarchive/libarchive/archive_cmdline.c b/contrib/libarchive/libarchive/archive_cmdline.c
index 5c519cd17f1b..2e5428cae516 100644
--- a/contrib/libarchive/libarchive/archive_cmdline.c
+++ b/contrib/libarchive/libarchive/archive_cmdline.c
@@ -25,8 +25,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
-
#ifdef HAVE_STRING_H
# include <string.h>
#endif
diff --git a/contrib/libarchive/libarchive/archive_cmdline_private.h b/contrib/libarchive/libarchive/archive_cmdline_private.h
index 57a19494fd7a..7495dfed55dd 100644
--- a/contrib/libarchive/libarchive/archive_cmdline_private.h
+++ b/contrib/libarchive/libarchive/archive_cmdline_private.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef ARCHIVE_CMDLINE_PRIVATE_H
diff --git a/contrib/libarchive/libarchive/archive_crc32.h b/contrib/libarchive/libarchive/archive_crc32.h
index c0456acc742f..98a4e2cf8f7f 100644
--- a/contrib/libarchive/libarchive/archive_crc32.h
+++ b/contrib/libarchive/libarchive/archive_crc32.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef ARCHIVE_CRC32_H
diff --git a/contrib/libarchive/libarchive/archive_cryptor.c b/contrib/libarchive/libarchive/archive_cryptor.c
index d4bca906b6ee..437dba06be62 100644
--- a/contrib/libarchive/libarchive/archive_cryptor.c
+++ b/contrib/libarchive/libarchive/archive_cryptor.c
@@ -401,14 +401,6 @@ aes_ctr_init(archive_crypto_ctx *ctx, const uint8_t *key, size_t key_len)
memcpy(ctx->key, key, key_len);
memset(ctx->nonce, 0, sizeof(ctx->nonce));
ctx->encr_pos = AES_BLOCK_SIZE;
-#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
- if (!EVP_CIPHER_CTX_reset(ctx->ctx)) {
- EVP_CIPHER_CTX_free(ctx->ctx);
- ctx->ctx = NULL;
- }
-#else
- EVP_CIPHER_CTX_init(ctx->ctx);
-#endif
return 0;
}
@@ -432,8 +424,8 @@ static int
aes_ctr_release(archive_crypto_ctx *ctx)
{
EVP_CIPHER_CTX_free(ctx->ctx);
- memset(ctx->key, 0, ctx->key_len);
- memset(ctx->nonce, 0, sizeof(ctx->nonce));
+ OPENSSL_cleanse(ctx->key, ctx->key_len);
+ OPENSSL_cleanse(ctx->nonce, sizeof(ctx->nonce));
return 0;
}
diff --git a/contrib/libarchive/libarchive/archive_digest.c b/contrib/libarchive/libarchive/archive_digest.c
index 410df01563df..3776831b21c9 100644
--- a/contrib/libarchive/libarchive/archive_digest.c
+++ b/contrib/libarchive/libarchive/archive_digest.c
@@ -36,6 +36,11 @@
#error Cannot use both OpenSSL and libmd.
#endif
+/* Common in other bcrypt implementations, but missing from VS2008. */
+#ifndef BCRYPT_SUCCESS
+#define BCRYPT_SUCCESS(r) ((NTSTATUS)(r) == STATUS_SUCCESS)
+#endif
+
/*
* Message digest functions for Windows platform.
*/
@@ -48,17 +53,37 @@
/*
* Initialize a Message digest.
*/
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+static int
+win_crypto_init(Digest_CTX *ctx, const WCHAR *algo)
+{
+ NTSTATUS status;
+ ctx->valid = 0;
+
+ status = BCryptOpenAlgorithmProvider(&ctx->hAlg, algo, NULL, 0);
+ if (!BCRYPT_SUCCESS(status))
+ return (ARCHIVE_FAILED);
+ status = BCryptCreateHash(ctx->hAlg, &ctx->hHash, NULL, 0, NULL, 0, 0);
+ if (!BCRYPT_SUCCESS(status)) {
+ BCryptCloseAlgorithmProvider(ctx->hAlg, 0);
+ return (ARCHIVE_FAILED);
+ }
+
+ ctx->valid = 1;
+ return (ARCHIVE_OK);
+}
+#else
static int
-win_crypto_init(Digest_CTX *ctx, ALG_ID algId)
+win_crypto_init(Digest_CTX *ctx, DWORD prov, ALG_ID algId)
{
ctx->valid = 0;
if (!CryptAcquireContext(&ctx->cryptProv, NULL, NULL,
- PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
+ prov, CRYPT_VERIFYCONTEXT)) {
if (GetLastError() != (DWORD)NTE_BAD_KEYSET)
return (ARCHIVE_FAILED);
if (!CryptAcquireContext(&ctx->cryptProv, NULL, NULL,
- PROV_RSA_FULL, CRYPT_NEWKEYSET))
+ prov, CRYPT_NEWKEYSET))
return (ARCHIVE_FAILED);
}
@@ -70,6 +95,7 @@ win_crypto_init(Digest_CTX *ctx, ALG_ID algId)
ctx->valid = 1;
return (ARCHIVE_OK);
}
+#endif
/*
* Update a Message digest.
@@ -81,23 +107,37 @@ win_crypto_Update(Digest_CTX *ctx, const unsigned char *buf, size_t len)
if (!ctx->valid)
return (ARCHIVE_FAILED);
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ BCryptHashData(ctx->hHash,
+ (PUCHAR)(uintptr_t)buf,
+ (ULONG)len, 0);
+#else
CryptHashData(ctx->hash,
(unsigned char *)(uintptr_t)buf,
(DWORD)len, 0);
+#endif
return (ARCHIVE_OK);
}
static int
win_crypto_Final(unsigned char *buf, size_t bufsize, Digest_CTX *ctx)
{
+#if !(defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA)
DWORD siglen = (DWORD)bufsize;
+#endif
if (!ctx->valid)
return (ARCHIVE_FAILED);
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ BCryptFinishHash(ctx->hHash, buf, (ULONG)bufsize, 0);
+ BCryptDestroyHash(ctx->hHash);
+ BCryptCloseAlgorithmProvider(ctx->hAlg, 0);
+#else
CryptGetHashParam(ctx->hash, HP_HASHVAL, buf, &siglen, 0);
CryptDestroyHash(ctx->hash);
CryptReleaseContext(ctx->cryptProv, 0);
+#endif
ctx->valid = 0;
return (ARCHIVE_OK);
}
@@ -243,7 +283,8 @@ __archive_md5init(archive_md5_ctx *ctx)
{
if ((*ctx = EVP_MD_CTX_new()) == NULL)
return (ARCHIVE_FAILED);
- EVP_DigestInit(*ctx, EVP_md5());
+ if (!EVP_DigestInit(*ctx, EVP_md5()))
+ return (ARCHIVE_FAILED);
return (ARCHIVE_OK);
}
@@ -275,7 +316,11 @@ __archive_md5final(archive_md5_ctx *ctx, void *md)
static int
__archive_md5init(archive_md5_ctx *ctx)
{
- return (win_crypto_init(ctx, CALG_MD5));
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ return (win_crypto_init(ctx, BCRYPT_MD5_ALGORITHM));
+#else
+ return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_MD5));
+#endif
}
static int
@@ -434,7 +479,8 @@ __archive_ripemd160init(archive_rmd160_ctx *ctx)
{
if ((*ctx = EVP_MD_CTX_new()) == NULL)
return (ARCHIVE_FAILED);
- EVP_DigestInit(*ctx, EVP_ripemd160());
+ if (!EVP_DigestInit(*ctx, EVP_ripemd160()))
+ return (ARCHIVE_FAILED);
return (ARCHIVE_OK);
}
@@ -624,7 +670,8 @@ __archive_sha1init(archive_sha1_ctx *ctx)
{
if ((*ctx = EVP_MD_CTX_new()) == NULL)
return (ARCHIVE_FAILED);
- EVP_DigestInit(*ctx, EVP_sha1());
+ if (!EVP_DigestInit(*ctx, EVP_sha1()))
+ return (ARCHIVE_FAILED);
return (ARCHIVE_OK);
}
@@ -656,7 +703,11 @@ __archive_sha1final(archive_sha1_ctx *ctx, void *md)
static int
__archive_sha1init(archive_sha1_ctx *ctx)
{
- return (win_crypto_init(ctx, CALG_SHA1));
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ return (win_crypto_init(ctx, BCRYPT_SHA1_ALGORITHM));
+#else
+ return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_SHA1));
+#endif
}
static int
@@ -887,7 +938,8 @@ __archive_sha256init(archive_sha256_ctx *ctx)
{
if ((*ctx = EVP_MD_CTX_new()) == NULL)
return (ARCHIVE_FAILED);
- EVP_DigestInit(*ctx, EVP_sha256());
+ if (!EVP_DigestInit(*ctx, EVP_sha256()))
+ return (ARCHIVE_FAILED);
return (ARCHIVE_OK);
}
@@ -915,7 +967,11 @@ __archive_sha256final(archive_sha256_ctx *ctx, void *md)
static int
__archive_sha256init(archive_sha256_ctx *ctx)
{
- return (win_crypto_init(ctx, CALG_SHA_256));
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ return (win_crypto_init(ctx, BCRYPT_SHA256_ALGORITHM));
+#else
+ return (win_crypto_init(ctx, PROV_RSA_AES, CALG_SHA_256));
+#endif
}
static int
@@ -1122,7 +1178,8 @@ __archive_sha384init(archive_sha384_ctx *ctx)
{
if ((*ctx = EVP_MD_CTX_new()) == NULL)
return (ARCHIVE_FAILED);
- EVP_DigestInit(*ctx, EVP_sha384());
+ if (!EVP_DigestInit(*ctx, EVP_sha384()))
+ return (ARCHIVE_FAILED);
return (ARCHIVE_OK);
}
@@ -1150,7 +1207,11 @@ __archive_sha384final(archive_sha384_ctx *ctx, void *md)
static int
__archive_sha384init(archive_sha384_ctx *ctx)
{
- return (win_crypto_init(ctx, CALG_SHA_384));
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ return (win_crypto_init(ctx, BCRYPT_SHA384_ALGORITHM));
+#else
+ return (win_crypto_init(ctx, PROV_RSA_AES, CALG_SHA_384));
+#endif
}
static int
@@ -1381,7 +1442,8 @@ __archive_sha512init(archive_sha512_ctx *ctx)
{
if ((*ctx = EVP_MD_CTX_new()) == NULL)
return (ARCHIVE_FAILED);
- EVP_DigestInit(*ctx, EVP_sha512());
+ if (!EVP_DigestInit(*ctx, EVP_sha512()))
+ return (ARCHIVE_FAILED);
return (ARCHIVE_OK);
}
@@ -1409,7 +1471,11 @@ __archive_sha512final(archive_sha512_ctx *ctx, void *md)
static int
__archive_sha512init(archive_sha512_ctx *ctx)
{
- return (win_crypto_init(ctx, CALG_SHA_512));
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ return (win_crypto_init(ctx, BCRYPT_SHA512_ALGORITHM));
+#else
+ return (win_crypto_init(ctx, PROV_RSA_AES, CALG_SHA_512));
+#endif
}
static int
diff --git a/contrib/libarchive/libarchive/archive_digest_private.h b/contrib/libarchive/libarchive/archive_digest_private.h
index 9b3bd6621bf3..339b4edca48d 100644
--- a/contrib/libarchive/libarchive/archive_digest_private.h
+++ b/contrib/libarchive/libarchive/archive_digest_private.h
@@ -164,6 +164,15 @@
defined(ARCHIVE_CRYPTO_SHA256_WIN) ||\
defined(ARCHIVE_CRYPTO_SHA384_WIN) ||\
defined(ARCHIVE_CRYPTO_SHA512_WIN)
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+/* don't use bcrypt when XP needs to be supported */
+#include <bcrypt.h>
+typedef struct {
+ int valid;
+ BCRYPT_ALG_HANDLE hAlg;
+ BCRYPT_HASH_HANDLE hHash;
+} Digest_CTX;
+#else
#include <windows.h>
#include <wincrypt.h>
typedef struct {
@@ -172,6 +181,7 @@ typedef struct {
HCRYPTHASH hash;
} Digest_CTX;
#endif
+#endif
/* typedefs */
#if defined(ARCHIVE_CRYPTO_MD5_LIBC)
diff --git a/contrib/libarchive/libarchive/archive_endian.h b/contrib/libarchive/libarchive/archive_endian.h
index 77c987031022..83b2efa531ef 100644
--- a/contrib/libarchive/libarchive/archive_endian.h
+++ b/contrib/libarchive/libarchive/archive_endian.h
@@ -23,8 +23,6 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
- *
* Borrowed from FreeBSD's <sys/endian.h>
*/
diff --git a/contrib/libarchive/libarchive/archive_entry.3 b/contrib/libarchive/libarchive/archive_entry.3
index 2f62a4be233e..0fc0f8cc2fe6 100644
--- a/contrib/libarchive/libarchive/archive_entry.3
+++ b/contrib/libarchive/libarchive/archive_entry.3
@@ -23,8 +23,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 2, 2012
.Dt ARCHIVE_ENTRY 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_entry.c b/contrib/libarchive/libarchive/archive_entry.c
index ba536dcdffe2..e017b0fd1ebc 100644
--- a/contrib/libarchive/libarchive/archive_entry.c
+++ b/contrib/libarchive/libarchive/archive_entry.c
@@ -25,7 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
@@ -372,6 +371,12 @@ archive_entry_filetype(struct archive_entry *entry)
return (AE_IFMT & entry->acl.mode);
}
+int
+archive_entry_filetype_is_set(struct archive_entry *entry)
+{
+ return (entry->ae_set & AE_SET_FILETYPE);
+}
+
void
archive_entry_fflags(struct archive_entry *entry,
unsigned long *set, unsigned long *clear)
@@ -425,6 +430,12 @@ archive_entry_gid(struct archive_entry *entry)
return (entry->ae_stat.aest_gid);
}
+int
+archive_entry_gid_is_set(struct archive_entry *entry)
+{
+ return (entry->ae_set & AE_SET_GID);
+}
+
const char *
archive_entry_gname(struct archive_entry *entry)
{
@@ -568,6 +579,13 @@ archive_entry_nlink(struct archive_entry *entry)
return (entry->ae_stat.aest_nlink);
}
+/* Instead, our caller could have chosen a specific encoding
+ * (archive_mstring_get_mbs, archive_mstring_get_utf8,
+ * archive_mstring_get_wcs). So we should try multiple
+ * encodings. Try mbs first because of history, even though
+ * utf8 might be better for pathname portability.
+ * Also omit wcs because of type mismatch (char * versus wchar *)
+ */
const char *
archive_entry_pathname(struct archive_entry *entry)
{
@@ -575,6 +593,13 @@ archive_entry_pathname(struct archive_entry *entry)
if (archive_mstring_get_mbs(
entry->archive, &entry->ae_pathname, &p) == 0)
return (p);
+#if HAVE_EILSEQ /*{*/
+ if (errno == EILSEQ) {
+ if (archive_mstring_get_utf8(
+ entry->archive, &entry->ae_pathname, &p) == 0)
+ return (p);
+ }
+#endif /*}*/
if (errno == ENOMEM)
__archive_errx(1, "No memory");
return (NULL);
@@ -617,6 +642,12 @@ archive_entry_perm(struct archive_entry *entry)
return (~AE_IFMT & entry->acl.mode);
}
+int
+archive_entry_perm_is_set(struct archive_entry *entry)
+{
+ return (entry->ae_set & AE_SET_PERM);
+}
+
dev_t
archive_entry_rdev(struct archive_entry *entry)
{
@@ -745,6 +776,12 @@ archive_entry_uid(struct archive_entry *entry)
return (entry->ae_stat.aest_uid);
}
+int
+archive_entry_uid_is_set(struct archive_entry *entry)
+{
+ return (entry->ae_set & AE_SET_UID);
+}
+
const char *
archive_entry_uname(struct archive_entry *entry)
{
@@ -813,6 +850,7 @@ archive_entry_set_filetype(struct archive_entry *entry, unsigned int type)
entry->stat_valid = 0;
entry->acl.mode &= ~AE_IFMT;
entry->acl.mode |= AE_IFMT & type;
+ entry->ae_set |= AE_SET_FILETYPE;
}
void
@@ -847,6 +885,7 @@ archive_entry_set_gid(struct archive_entry *entry, la_int64_t g)
{
entry->stat_valid = 0;
entry->ae_stat.aest_gid = g;
+ entry->ae_set |= AE_SET_GID;
}
void
@@ -1131,6 +1170,7 @@ archive_entry_set_mode(struct archive_entry *entry, mode_t m)
{
entry->stat_valid = 0;
entry->acl.mode = m;
+ entry->ae_set |= AE_SET_PERM | AE_SET_FILETYPE;
}
void
@@ -1206,6 +1246,7 @@ archive_entry_set_perm(struct archive_entry *entry, mode_t p)
entry->stat_valid = 0;
entry->acl.mode &= AE_IFMT;
entry->acl.mode |= ~AE_IFMT & p;
+ entry->ae_set |= AE_SET_PERM;
}
void
@@ -1340,6 +1381,7 @@ archive_entry_set_uid(struct archive_entry *entry, la_int64_t u)
{
entry->stat_valid = 0;
entry->ae_stat.aest_uid = u;
+ entry->ae_set |= AE_SET_UID;
}
void
diff --git a/contrib/libarchive/libarchive/archive_entry.h b/contrib/libarchive/libarchive/archive_entry.h
index 90372b4d8f90..1c59ded7c911 100644
--- a/contrib/libarchive/libarchive/archive_entry.h
+++ b/contrib/libarchive/libarchive/archive_entry.h
@@ -22,15 +22,13 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef ARCHIVE_ENTRY_H_INCLUDED
#define ARCHIVE_ENTRY_H_INCLUDED
/* Note: Compiler will complain if this does not match archive.h! */
-#define ARCHIVE_VERSION_NUMBER 3005002
+#define ARCHIVE_VERSION_NUMBER 3007004
/*
* Note: archive_entry.h is for use outside of libarchive; the
@@ -99,7 +97,7 @@ typedef ssize_t la_ssize_t;
#endif
/* Large file support for Android */
-#ifdef __ANDROID__
+#if defined(__LIBARCHIVE_BUILD) && defined(__ANDROID__)
#include "android_lf.h"
#endif
@@ -122,6 +120,8 @@ typedef ssize_t la_ssize_t;
# define __LA_DECL __declspec(dllimport)
# endif
# endif
+#elif defined __LIBARCHIVE_ENABLE_VISIBILITY
+# define __LA_DECL __attribute__((visibility("default")))
#else
/* Static libraries on all platforms and shared libraries on non-Windows. */
# define __LA_DECL
@@ -249,11 +249,13 @@ __LA_DECL int archive_entry_dev_is_set(struct archive_entry *);
__LA_DECL dev_t archive_entry_devmajor(struct archive_entry *);
__LA_DECL dev_t archive_entry_devminor(struct archive_entry *);
__LA_DECL __LA_MODE_T archive_entry_filetype(struct archive_entry *);
+__LA_DECL int archive_entry_filetype_is_set(struct archive_entry *);
__LA_DECL void archive_entry_fflags(struct archive_entry *,
unsigned long * /* set */,
unsigned long * /* clear */);
__LA_DECL const char *archive_entry_fflags_text(struct archive_entry *);
__LA_DECL la_int64_t archive_entry_gid(struct archive_entry *);
+__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 *);
@@ -272,6 +274,7 @@ __LA_DECL const char *archive_entry_pathname(struct archive_entry *);
__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 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 *);
@@ -285,6 +288,7 @@ __LA_DECL const char *archive_entry_symlink_utf8(struct archive_entry *);
__LA_DECL int archive_entry_symlink_type(struct archive_entry *);
__LA_DECL const wchar_t *archive_entry_symlink_w(struct archive_entry *);
__LA_DECL la_int64_t archive_entry_uid(struct archive_entry *);
+__LA_DECL int archive_entry_uid_is_set(struct archive_entry *);
__LA_DECL const char *archive_entry_uname(struct archive_entry *);
__LA_DECL const char *archive_entry_uname_utf8(struct archive_entry *);
__LA_DECL const wchar_t *archive_entry_uname_w(struct archive_entry *);
diff --git a/contrib/libarchive/libarchive/archive_entry_acl.3 b/contrib/libarchive/libarchive/archive_entry_acl.3
index 50dd642c20c6..4d0d8b50ed07 100644
--- a/contrib/libarchive/libarchive/archive_entry_acl.3
+++ b/contrib/libarchive/libarchive/archive_entry_acl.3
@@ -383,7 +383,7 @@ Prefix each default ACL entry with the word
The mask and other ACLs don not contain a double colon.
.El
.Pp
-The following flags are effecive only on NFSv4 ACL:
+The following flags are effective only on NFSv4 ACL:
.Bl -tag -offset indent -compact -width ARCHIV
.It Dv ARCHIVE_ENTRY_ACL_STYLE_COMPACT
Do not output minus characters for unset permissions and flags in NFSv4 ACL
diff --git a/contrib/libarchive/libarchive/archive_entry_copy_stat.c b/contrib/libarchive/libarchive/archive_entry_copy_stat.c
index 0f3592906949..f9c2e8469b1e 100644
--- a/contrib/libarchive/libarchive/archive_entry_copy_stat.c
+++ b/contrib/libarchive/libarchive/archive_entry_copy_stat.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
diff --git a/contrib/libarchive/libarchive/archive_entry_link_resolver.c b/contrib/libarchive/libarchive/archive_entry_link_resolver.c
index 5a22374c0d94..6c6173430250 100644
--- a/contrib/libarchive/libarchive/archive_entry_link_resolver.c
+++ b/contrib/libarchive/libarchive/archive_entry_link_resolver.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
diff --git a/contrib/libarchive/libarchive/archive_entry_locale.h b/contrib/libarchive/libarchive/archive_entry_locale.h
index 803c0368bb69..1b90c57eabf2 100644
--- a/contrib/libarchive/libarchive/archive_entry_locale.h
+++ b/contrib/libarchive/libarchive/archive_entry_locale.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef ARCHIVE_ENTRY_LOCALE_H_INCLUDED
diff --git a/contrib/libarchive/libarchive/archive_entry_private.h b/contrib/libarchive/libarchive/archive_entry_private.h
index 52a36799940b..3423966c60f3 100644
--- a/contrib/libarchive/libarchive/archive_entry_private.h
+++ b/contrib/libarchive/libarchive/archive_entry_private.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef ARCHIVE_ENTRY_PRIVATE_H_INCLUDED
@@ -147,6 +145,10 @@ struct archive_entry {
#define AE_SET_SIZE 64
#define AE_SET_INO 128
#define AE_SET_DEV 256
+#define AE_SET_PERM 512
+#define AE_SET_FILETYPE 1024
+#define AE_SET_UID 2048
+#define AE_SET_GID 4096
/*
* Use aes here so that we get transparent mbs<->wcs conversions.
diff --git a/contrib/libarchive/libarchive/archive_entry_sparse.c b/contrib/libarchive/libarchive/archive_entry_sparse.c
index 74917b37b804..b81684d18730 100644
--- a/contrib/libarchive/libarchive/archive_entry_sparse.c
+++ b/contrib/libarchive/libarchive/archive_entry_sparse.c
@@ -25,7 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#include "archive.h"
#include "archive_entry.h"
diff --git a/contrib/libarchive/libarchive/archive_entry_stat.c b/contrib/libarchive/libarchive/archive_entry_stat.c
index 8ae5c87e3551..c4906838ed0f 100644
--- a/contrib/libarchive/libarchive/archive_entry_stat.c
+++ b/contrib/libarchive/libarchive/archive_entry_stat.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
diff --git a/contrib/libarchive/libarchive/archive_entry_strmode.c b/contrib/libarchive/libarchive/archive_entry_strmode.c
index d80a7d431cb7..5faa2faeefa0 100644
--- a/contrib/libarchive/libarchive/archive_entry_strmode.c
+++ b/contrib/libarchive/libarchive/archive_entry_strmode.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
diff --git a/contrib/libarchive/libarchive/archive_entry_time.3 b/contrib/libarchive/libarchive/archive_entry_time.3
index d0563eaef43a..0f1dbb025127 100644
--- a/contrib/libarchive/libarchive/archive_entry_time.3
+++ b/contrib/libarchive/libarchive/archive_entry_time.3
@@ -23,8 +23,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 2, 2012
.Dt ARCHIVE_ENTRY_TIME 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_entry_xattr.c b/contrib/libarchive/libarchive/archive_entry_xattr.c
index f9e7236d0cb5..14848a5ab2c4 100644
--- a/contrib/libarchive/libarchive/archive_entry_xattr.c
+++ b/contrib/libarchive/libarchive/archive_entry_xattr.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
diff --git a/contrib/libarchive/libarchive/archive_getdate.c b/contrib/libarchive/libarchive/archive_getdate.c
index 3ec5bba88896..69eebb0a079f 100644
--- a/contrib/libarchive/libarchive/archive_getdate.c
+++ b/contrib/libarchive/libarchive/archive_getdate.c
@@ -28,10 +28,6 @@
*/
#include "archive_platform.h"
-#ifdef __FreeBSD__
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-#endif
#include <ctype.h>
#include <stdio.h>
@@ -698,13 +694,9 @@ Convert(time_t Month, time_t Day, time_t Year,
time_t Julian;
int i;
struct tm *ltime;
-#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S)
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
struct tm tmbuf;
#endif
-#if defined(HAVE__LOCALTIME64_S)
- errno_t terr;
- __time64_t tmptime;
-#endif
if (Year < 69)
Year += 2000;
@@ -714,7 +706,7 @@ Convert(time_t Month, time_t Day, time_t Year,
? 29 : 28;
/* Checking for 2038 bogusly assumes that time_t is 32 bits. But
I'm too lazy to try to check for time_t overflow in another way. */
- if (Year < EPOCH || Year > 2038
+ if (Year < EPOCH || Year >= 2038
|| Month < 1 || Month > 12
/* Lint fluff: "conversion from long may lose accuracy" */
|| Day < 1 || Day > DaysInMonth[(int)--Month]
@@ -731,15 +723,10 @@ Convert(time_t Month, time_t Day, time_t Year,
Julian *= DAY;
Julian += Timezone;
Julian += Hours * HOUR + Minutes * MINUTE + Seconds;
-#if defined(HAVE_LOCALTIME_R)
+#if defined(HAVE_LOCALTIME_S)
+ ltime = localtime_s(&tmbuf, &Julian) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
ltime = localtime_r(&Julian, &tmbuf);
-#elif defined(HAVE__LOCALTIME64_S)
- tmptime = Julian;
- terr = _localtime64_s(&tmbuf, &tmptime);
- if (terr)
- ltime = NULL;
- else
- ltime = &tmbuf;
#else
ltime = localtime(&Julian);
#endif
@@ -755,36 +742,21 @@ DSTcorrect(time_t Start, time_t Future)
time_t StartDay;
time_t FutureDay;
struct tm *ltime;
-#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S)
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
struct tm tmbuf;
#endif
-#if defined(HAVE__LOCALTIME64_S)
- errno_t terr;
- __time64_t tmptime;
-#endif
-
-#if defined(HAVE_LOCALTIME_R)
+#if defined(HAVE_LOCALTIME_S)
+ ltime = localtime_s(&tmbuf, &Start) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
ltime = localtime_r(&Start, &tmbuf);
-#elif defined(HAVE__LOCALTIME64_S)
- tmptime = Start;
- terr = _localtime64_s(&tmbuf, &tmptime);
- if (terr)
- ltime = NULL;
- else
- ltime = &tmbuf;
#else
ltime = localtime(&Start);
#endif
StartDay = (ltime->tm_hour + 1) % 24;
-#if defined(HAVE_LOCALTIME_R)
+#if defined(HAVE_LOCALTIME_S)
+ ltime = localtime_s(&tmbuf, &Future) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
ltime = localtime_r(&Future, &tmbuf);
-#elif defined(HAVE__LOCALTIME64_S)
- tmptime = Future;
- terr = _localtime64_s(&tmbuf, &tmptime);
- if (terr)
- ltime = NULL;
- else
- ltime = &tmbuf;
#else
ltime = localtime(&Future);
#endif
@@ -799,24 +771,15 @@ RelativeDate(time_t Start, time_t zone, int dstmode,
{
struct tm *tm;
time_t t, now;
-#if defined(HAVE_GMTIME_R) || defined(HAVE__GMTIME64_S)
+#if defined(HAVE_GMTIME_R) || defined(HAVE_GMTIME_S)
struct tm tmbuf;
#endif
-#if defined(HAVE__GMTIME64_S)
- errno_t terr;
- __time64_t tmptime;
-#endif
t = Start - zone;
-#if defined(HAVE_GMTIME_R)
+#if defined(HAVE_GMTIME_S)
+ tm = gmtime_s(&tmbuf, &t) ? NULL : &tmbuf;
+#elif defined(HAVE_GMTIME_R)
tm = gmtime_r(&t, &tmbuf);
-#elif defined(HAVE__GMTIME64_S)
- tmptime = t;
- terr = _gmtime64_s(&tmbuf, &tmptime);
- if (terr)
- tm = NULL;
- else
- tm = &tmbuf;
#else
tm = gmtime(&t);
#endif
@@ -835,25 +798,16 @@ RelativeMonth(time_t Start, time_t Timezone, time_t RelMonth)
struct tm *tm;
time_t Month;
time_t Year;
-#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S)
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
struct tm tmbuf;
#endif
-#if defined(HAVE__LOCALTIME64_S)
- errno_t terr;
- __time64_t tmptime;
-#endif
if (RelMonth == 0)
return 0;
-#if defined(HAVE_LOCALTIME_R)
+#if defined(HAVE_LOCALTIME_S)
+ tm = localtime_s(&tmbuf, &Start) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
tm = localtime_r(&Start, &tmbuf);
-#elif defined(HAVE__LOCALTIME64_S)
- tmptime = Start;
- terr = _localtime64_s(&tmbuf, &tmptime);
- if (terr)
- tm = NULL;
- else
- tm = &tmbuf;
#else
tm = localtime(&Start);
#endif
@@ -993,10 +947,6 @@ __archive_get_date(time_t now, const char *p)
time_t Start;
time_t tod;
long tzone;
-#if defined(HAVE__LOCALTIME64_S) || defined(HAVE__GMTIME64_S)
- errno_t terr;
- __time64_t tmptime;
-#endif
/* Clear out the parsed token array. */
memset(tokens, 0, sizeof(tokens));
@@ -1005,36 +955,26 @@ __archive_get_date(time_t now, const char *p)
gds = &_gds;
/* Look up the current time. */
-#if defined(HAVE_LOCALTIME_R)
+#if defined(HAVE_LOCALTIME_S)
+ tm = localtime_s(&local, &now) ? NULL : &local;
+#elif defined(HAVE_LOCALTIME_R)
tm = localtime_r(&now, &local);
-#elif defined(HAVE__LOCALTIME64_S)
- tmptime = now;
- terr = _localtime64_s(&local, &tmptime);
- if (terr)
- tm = NULL;
- else
- tm = &local;
#else
memset(&local, 0, sizeof(local));
tm = localtime(&now);
#endif
if (tm == NULL)
return -1;
-#if !defined(HAVE_LOCALTIME_R) && !defined(HAVE__LOCALTIME64_S)
+#if !defined(HAVE_LOCALTIME_R) && !defined(HAVE_LOCALTIME_S)
local = *tm;
#endif
/* Look up UTC if we can and use that to determine the current
* timezone offset. */
-#if defined(HAVE_GMTIME_R)
+#if defined(HAVE_GMTIME_S)
+ gmt_ptr = gmtime_s(&gmt, &now) ? NULL : &gmt;
+#elif defined(HAVE_GMTIME_R)
gmt_ptr = gmtime_r(&now, &gmt);
-#elif defined(HAVE__GMTIME64_S)
- tmptime = now;
- terr = _gmtime64_s(&gmt, &tmptime);
- if (terr)
- gmt_ptr = NULL;
- else
- gmt_ptr = &gmt;
#else
memset(&gmt, 0, sizeof(gmt));
gmt_ptr = gmtime(&now);
@@ -1076,15 +1016,10 @@ __archive_get_date(time_t now, const char *p)
* time components instead of the local timezone. */
if (gds->HaveZone && gmt_ptr != NULL) {
now -= gds->Timezone;
-#if defined(HAVE_GMTIME_R)
+#if defined(HAVE_GMTIME_S)
+ gmt_ptr = gmtime_s(&gmt, &now) ? NULL : &gmt;
+#elif defined(HAVE_GMTIME_R)
gmt_ptr = gmtime_r(&now, &gmt);
-#elif defined(HAVE__GMTIME64_S)
- tmptime = now;
- terr = _gmtime64_s(&gmt, &tmptime);
- if (terr)
- gmt_ptr = NULL;
- else
- gmt_ptr = &gmt;
#else
gmt_ptr = gmtime(&now);
#endif
diff --git a/contrib/libarchive/libarchive/archive_getdate.h b/contrib/libarchive/libarchive/archive_getdate.h
index 900a8f692e98..cfd49ddf7ebb 100644
--- a/contrib/libarchive/libarchive/archive_getdate.h
+++ b/contrib/libarchive/libarchive/archive_getdate.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef ARCHIVE_GETDATE_H_INCLUDED
diff --git a/contrib/libarchive/libarchive/archive_hmac.c b/contrib/libarchive/libarchive/archive_hmac.c
index 2a9d04c8d8f1..edb3bf5abd42 100644
--- a/contrib/libarchive/libarchive/archive_hmac.c
+++ b/contrib/libarchive/libarchive/archive_hmac.c
@@ -230,10 +230,28 @@ __hmac_sha1_cleanup(archive_hmac_sha1_ctx *ctx)
static int
__hmac_sha1_init(archive_hmac_sha1_ctx *ctx, const uint8_t *key, size_t key_len)
{
+#if OPENSSL_VERSION_NUMBER >= 0x30000000L
+ EVP_MAC *mac;
+
+ char sha1[] = "SHA1";
+ OSSL_PARAM params[] = {
+ OSSL_PARAM_utf8_string("digest", sha1, sizeof(sha1) - 1),
+ OSSL_PARAM_END
+ };
+
+ mac = EVP_MAC_fetch(NULL, "HMAC", NULL);
+ *ctx = EVP_MAC_CTX_new(mac);
+ EVP_MAC_free(mac);
+ if (*ctx == NULL)
+ return -1;
+
+ EVP_MAC_init(*ctx, key, key_len, params);
+#else
*ctx = HMAC_CTX_new();
if (*ctx == NULL)
return -1;
HMAC_Init_ex(*ctx, key, key_len, EVP_sha1(), NULL);
+#endif
return 0;
}
@@ -241,22 +259,38 @@ static void
__hmac_sha1_update(archive_hmac_sha1_ctx *ctx, const uint8_t *data,
size_t data_len)
{
+#if OPENSSL_VERSION_NUMBER >= 0x30000000L
+ EVP_MAC_update(*ctx, data, data_len);
+#else
HMAC_Update(*ctx, data, data_len);
+#endif
}
static void
__hmac_sha1_final(archive_hmac_sha1_ctx *ctx, uint8_t *out, size_t *out_len)
{
+#if OPENSSL_VERSION_NUMBER >= 0x30000000L
+ size_t len = *out_len;
+#else
unsigned int len = (unsigned int)*out_len;
+#endif
+#if OPENSSL_VERSION_NUMBER >= 0x30000000L
+ EVP_MAC_final(*ctx, out, &len, *out_len);
+#else
HMAC_Final(*ctx, out, &len);
+#endif
*out_len = len;
}
static void
__hmac_sha1_cleanup(archive_hmac_sha1_ctx *ctx)
{
+#if OPENSSL_VERSION_NUMBER >= 0x30000000L
+ EVP_MAC_CTX_free(*ctx);
+#else
HMAC_CTX_free(*ctx);
+#endif
*ctx = NULL;
}
diff --git a/contrib/libarchive/libarchive/archive_hmac_private.h b/contrib/libarchive/libarchive/archive_hmac_private.h
index 13a67d4955a5..d0fda7f9667a 100644
--- a/contrib/libarchive/libarchive/archive_hmac_private.h
+++ b/contrib/libarchive/libarchive/archive_hmac_private.h
@@ -74,9 +74,18 @@ typedef mbedtls_md_context_t archive_hmac_sha1_ctx;
typedef struct hmac_sha1_ctx archive_hmac_sha1_ctx;
#elif defined(HAVE_LIBCRYPTO)
+#include <openssl/opensslv.h>
+#include <openssl/hmac.h>
+#if OPENSSL_VERSION_NUMBER >= 0x30000000L
+#include <openssl/params.h>
+
+typedef EVP_MAC_CTX *archive_hmac_sha1_ctx;
+
+#else
#include "archive_openssl_hmac_private.h"
typedef HMAC_CTX* archive_hmac_sha1_ctx;
+#endif
#else
diff --git a/contrib/libarchive/libarchive/archive_match.c b/contrib/libarchive/libarchive/archive_match.c
index 04747b1f6663..fc8a4ce8127b 100644
--- a/contrib/libarchive/libarchive/archive_match.c
+++ b/contrib/libarchive/libarchive/archive_match.c
@@ -25,7 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
diff --git a/contrib/libarchive/libarchive/archive_openssl_evp_private.h b/contrib/libarchive/libarchive/archive_openssl_evp_private.h
index ebb06702d0c5..8ac4772808e6 100644
--- a/contrib/libarchive/libarchive/archive_openssl_evp_private.h
+++ b/contrib/libarchive/libarchive/archive_openssl_evp_private.h
@@ -33,7 +33,8 @@
#include <openssl/evp.h>
#include <openssl/opensslv.h>
-#if OPENSSL_VERSION_NUMBER < 0x10100000L
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || \
+ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL)
#include <stdlib.h> /* malloc, free */
#include <string.h> /* memset */
static inline EVP_MD_CTX *EVP_MD_CTX_new(void)
diff --git a/contrib/libarchive/libarchive/archive_options.c b/contrib/libarchive/libarchive/archive_options.c
index 6496025a5f6b..92647c9b41c1 100644
--- a/contrib/libarchive/libarchive/archive_options.c
+++ b/contrib/libarchive/libarchive/archive_options.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
diff --git a/contrib/libarchive/libarchive/archive_options_private.h b/contrib/libarchive/libarchive/archive_options_private.h
index 9a7f8080d2f6..3e49222dabdf 100644
--- a/contrib/libarchive/libarchive/archive_options_private.h
+++ b/contrib/libarchive/libarchive/archive_options_private.h
@@ -27,8 +27,6 @@
#define ARCHIVE_OPTIONS_PRIVATE_H_INCLUDED
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
-
#include "archive_private.h"
typedef int (*option_handler)(struct archive *a,
diff --git a/contrib/libarchive/libarchive/archive_pack_dev.c b/contrib/libarchive/libarchive/archive_pack_dev.c
index f8286d82183f..3c6209b98405 100644
--- a/contrib/libarchive/libarchive/archive_pack_dev.c
+++ b/contrib/libarchive/libarchive/archive_pack_dev.c
@@ -33,13 +33,6 @@
#include "archive_platform.h"
-#if HAVE_SYS_CDEFS_H
-#include <sys/cdefs.h>
-#endif
-#if !defined(lint)
-__RCSID("$NetBSD$");
-#endif /* not lint */
-
#ifdef HAVE_LIMITS_H
#include <limits.h>
#endif
@@ -77,7 +70,7 @@ static pack_t pack_12_20;
static pack_t pack_14_18;
static pack_t pack_8_24;
static pack_t pack_bsdos;
-static int compare_format(const void *, const void *);
+static int __LA_LIBC_CC compare_format(const void *, const void *);
static const char iMajorError[] = "invalid major number";
static const char iMinorError[] = "invalid minor number";
@@ -310,6 +303,7 @@ static const struct format {
};
static int
+__LA_LIBC_CC
compare_format(const void *key, const void *element)
{
const char *name;
diff --git a/contrib/libarchive/libarchive/archive_pathmatch.c b/contrib/libarchive/libarchive/archive_pathmatch.c
index 0867a268eefe..19e0889ffe55 100644
--- a/contrib/libarchive/libarchive/archive_pathmatch.c
+++ b/contrib/libarchive/libarchive/archive_pathmatch.c
@@ -25,7 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_STRING_H
#include <string.h>
diff --git a/contrib/libarchive/libarchive/archive_pathmatch.h b/contrib/libarchive/libarchive/archive_pathmatch.h
index 9995142921e5..3f406ff7435f 100644
--- a/contrib/libarchive/libarchive/archive_pathmatch.h
+++ b/contrib/libarchive/libarchive/archive_pathmatch.h
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef ARCHIVE_PATHMATCH_H
diff --git a/contrib/libarchive/libarchive/archive_platform.h b/contrib/libarchive/libarchive/archive_platform.h
index e7e6466b2e4e..24e8b50323d0 100644
--- a/contrib/libarchive/libarchive/archive_platform.h
+++ b/contrib/libarchive/libarchive/archive_platform.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
/* !!ONLY FOR USE INTERNALLY TO LIBARCHIVE!! */
@@ -69,8 +67,16 @@
* either Windows or Posix APIs. */
#if (defined(__WIN32__) || defined(_WIN32) || defined(__WIN32)) && !defined(__CYGWIN__)
#include "archive_windows.h"
+/* The C library on Windows specifies a calling convention for callback
+ * functions and exports; when we interact with them (capture pointers,
+ * call and pass function pointers) we need to match their calling
+ * convention.
+ * This only matters when libarchive is built with /Gr, /Gz or /Gv
+ * (which change the default calling convention.) */
+#define __LA_LIBC_CC __cdecl
#else
#define la_stat(path,stref) stat(path,stref)
+#define __LA_LIBC_CC
#endif
/*
@@ -79,19 +85,6 @@
* headers as required.
*/
-/* Get a real definition for __FBSDID or __RCSID if we can */
-#if HAVE_SYS_CDEFS_H
-#include <sys/cdefs.h>
-#endif
-
-/* If not, define them so as to avoid dangling semicolons. */
-#ifndef __FBSDID
-#define __FBSDID(a) struct _undefined_hack
-#endif
-#ifndef __RCSID
-#define __RCSID(a) struct _undefined_hack
-#endif
-
/* Try to get standard C99-style integer type definitions. */
#if HAVE_INTTYPES_H
#include <inttypes.h>
@@ -155,6 +148,28 @@
#define INTMAX_MIN ((intmax_t)(~INTMAX_MAX))
#endif
+/* Some platforms lack the standard PRIxN/PRIdN definitions. */
+#if !HAVE_INTTYPES_H || !defined(PRIx32) || !defined(PRId32)
+#ifndef PRIx32
+#if SIZEOF_INT == 4
+#define PRIx32 "x"
+#elif SIZEOF_LONG == 4
+#define PRIx32 "lx"
+#else
+#error No suitable 32-bit unsigned integer type found for this platform
+#endif
+#endif // PRIx32
+#ifndef PRId32
+#if SIZEOF_INT == 4
+#define PRId32 "d"
+#elif SIZEOF_LONG == 4
+#define PRId32 "ld"
+#else
+#error No suitable 32-bit signed integer type found for this platform
+#endif
+#endif // PRId32
+#endif // !HAVE_INTTYPES_H || !defined(PRIx32) || !defined(PRId32)
+
/*
* If we can't restore metadata using a file descriptor, then
* for compatibility's sake, close files before trying to restore metadata.
@@ -165,8 +180,9 @@
/*
* glibc 2.24 deprecates readdir_r
+ * bionic c deprecates readdir_r too
*/
-#if defined(HAVE_READDIR_R) && (!defined(__GLIBC__) || !defined(__GLIBC_MINOR__) || __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 24))
+#if defined(HAVE_READDIR_R) && (!defined(__GLIBC__) || !defined(__GLIBC_MINOR__) || __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 24)) && (!defined(__ANDROID__))
#define USE_READDIR_R 1
#else
#undef USE_READDIR_R
diff --git a/contrib/libarchive/libarchive/archive_platform_acl.h b/contrib/libarchive/libarchive/archive_platform_acl.h
index 264e6de375a1..48556f87feed 100644
--- a/contrib/libarchive/libarchive/archive_platform_acl.h
+++ b/contrib/libarchive/libarchive/archive_platform_acl.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
/* !!ONLY FOR USE INTERNALLY TO LIBARCHIVE!! */
diff --git a/contrib/libarchive/libarchive/archive_platform_xattr.h b/contrib/libarchive/libarchive/archive_platform_xattr.h
index ad4b90ab7b2a..2ae222f61ef8 100644
--- a/contrib/libarchive/libarchive/archive_platform_xattr.h
+++ b/contrib/libarchive/libarchive/archive_platform_xattr.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
/* !!ONLY FOR USE INTERNALLY TO LIBARCHIVE!! */
diff --git a/contrib/libarchive/libarchive/archive_private.h b/contrib/libarchive/libarchive/archive_private.h
index 1b769e8452dc..0f05169b7d25 100644
--- a/contrib/libarchive/libarchive/archive_private.h
+++ b/contrib/libarchive/libarchive/archive_private.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef ARCHIVE_PRIVATE_H_INCLUDED
@@ -40,10 +38,12 @@
#include "archive_string.h"
#if defined(__GNUC__) && (__GNUC__ > 2 || \
- (__GNUC__ == 2 && __GNUC_MINOR__ >= 5))
-#define __LA_DEAD __attribute__((__noreturn__))
+ (__GNUC__ == 2 && __GNUC_MINOR__ >= 5))
+#define __LA_NORETURN __attribute__((__noreturn__))
+#elif defined(_MSC_VER)
+#define __LA_NORETURN __declspec(noreturn)
#else
-#define __LA_DEAD
+#define __LA_NORETURN
#endif
#if defined(__GNUC__) && (__GNUC__ > 2 || \
@@ -107,14 +107,11 @@ struct archive {
* Some public API functions depend on the "real" type of the
* archive object.
*/
- struct archive_vtable *vtable;
+ const struct archive_vtable *vtable;
int archive_format;
const char *archive_format_name;
- int compression_code; /* Currently active compression. */
- const char *compression_name;
-
/* Number of file entries processed. */
int file_count;
@@ -156,7 +153,7 @@ int __archive_check_magic(struct archive *, unsigned int magic,
return ARCHIVE_FATAL; \
} while (0)
-void __archive_errx(int retvalue, const char *msg) __LA_DEAD;
+__LA_NORETURN void __archive_errx(int retvalue, const char *msg);
void __archive_ensure_cloexec_flag(int fd);
int __archive_mktemp(const char *tmpdir);
diff --git a/contrib/libarchive/libarchive/archive_random.c b/contrib/libarchive/libarchive/archive_random.c
index 9d1aa493f0c8..8c48d2d3b5a9 100644
--- a/contrib/libarchive/libarchive/archive_random.c
+++ b/contrib/libarchive/libarchive/archive_random.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
@@ -51,16 +50,27 @@ __FBSDID("$FreeBSD$");
#include <pthread.h>
#endif
-static void arc4random_buf(void *, size_t);
+static void la_arc4random_buf(void *, size_t);
#endif /* HAVE_ARC4RANDOM_BUF */
#include "archive.h"
#include "archive_random_private.h"
-#if defined(HAVE_WINCRYPT_H) && !defined(__CYGWIN__)
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+/* don't use bcrypt when XP needs to be supported */
+#include <bcrypt.h>
+
+/* Common in other bcrypt implementations, but missing from VS2008. */
+#ifndef BCRYPT_SUCCESS
+#define BCRYPT_SUCCESS(r) ((NTSTATUS)(r) == STATUS_SUCCESS)
+#endif
+
+#elif defined(HAVE_WINCRYPT_H)
#include <wincrypt.h>
#endif
+#endif
#ifndef O_CLOEXEC
#define O_CLOEXEC 0
@@ -75,6 +85,20 @@ int
archive_random(void *buf, size_t nbytes)
{
#if defined(_WIN32) && !defined(__CYGWIN__)
+# if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ NTSTATUS status;
+ BCRYPT_ALG_HANDLE hAlg;
+
+ status = BCryptOpenAlgorithmProvider(&hAlg, BCRYPT_RNG_ALGORITHM, NULL, 0);
+ if (!BCRYPT_SUCCESS(status))
+ return ARCHIVE_FAILED;
+ status = BCryptGenRandom(hAlg, buf, (ULONG)nbytes, 0);
+ BCryptCloseAlgorithmProvider(hAlg, 0);
+ if (!BCRYPT_SUCCESS(status))
+ return ARCHIVE_FAILED;
+
+ return ARCHIVE_OK;
+# else
HCRYPTPROV hProv;
BOOL success;
@@ -92,6 +116,10 @@ archive_random(void *buf, size_t nbytes)
}
/* TODO: Does this case really happen? */
return ARCHIVE_FAILED;
+# endif
+#elif !defined(HAVE_ARC4RANDOM_BUF) && (!defined(_WIN32) || defined(__CYGWIN__))
+ la_arc4random_buf(buf, nbytes);
+ return ARCHIVE_OK;
#else
arc4random_buf(buf, nbytes);
return ARCHIVE_OK;
@@ -256,7 +284,7 @@ arc4_getbyte(void)
}
static void
-arc4random_buf(void *_buf, size_t n)
+la_arc4random_buf(void *_buf, size_t n)
{
uint8_t *buf = (uint8_t *)_buf;
_ARC4_LOCK();
diff --git a/contrib/libarchive/libarchive/archive_read.3 b/contrib/libarchive/libarchive/archive_read.3
index cbedd0a19129..c81c98be2759 100644
--- a/contrib/libarchive/libarchive/archive_read.3
+++ b/contrib/libarchive/libarchive/archive_read.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 2, 2012
.Dt ARCHIVE_READ 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_read.c b/contrib/libarchive/libarchive/archive_read.c
index c32526762708..d71fc2b7cc04 100644
--- a/contrib/libarchive/libarchive/archive_read.c
+++ b/contrib/libarchive/libarchive/archive_read.c
@@ -32,7 +32,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -58,7 +57,6 @@ __FBSDID("$FreeBSD$");
static int choose_filters(struct archive_read *);
static int choose_format(struct archive_read *);
static int close_filters(struct archive_read *);
-static struct archive_vtable *archive_read_vtable(void);
static int64_t _archive_filter_bytes(struct archive *, int);
static int _archive_filter_code(struct archive *, int);
static const char *_archive_filter_name(struct archive *, int);
@@ -73,26 +71,18 @@ static int _archive_read_next_header2(struct archive *,
struct archive_entry *);
static int64_t advance_file_pointer(struct archive_read_filter *, int64_t);
-static struct archive_vtable *
-archive_read_vtable(void)
-{
- static struct archive_vtable av;
- static int inited = 0;
-
- if (!inited) {
- av.archive_filter_bytes = _archive_filter_bytes;
- av.archive_filter_code = _archive_filter_code;
- av.archive_filter_name = _archive_filter_name;
- av.archive_filter_count = _archive_filter_count;
- av.archive_read_data_block = _archive_read_data_block;
- av.archive_read_next_header = _archive_read_next_header;
- av.archive_read_next_header2 = _archive_read_next_header2;
- av.archive_free = _archive_read_free;
- av.archive_close = _archive_read_close;
- inited = 1;
- }
- return (&av);
-}
+static const struct archive_vtable
+archive_read_vtable = {
+ .archive_filter_bytes = _archive_filter_bytes,
+ .archive_filter_code = _archive_filter_code,
+ .archive_filter_name = _archive_filter_name,
+ .archive_filter_count = _archive_filter_count,
+ .archive_read_data_block = _archive_read_data_block,
+ .archive_read_next_header = _archive_read_next_header,
+ .archive_read_next_header2 = _archive_read_next_header2,
+ .archive_free = _archive_read_free,
+ .archive_close = _archive_read_close,
+};
/*
* Allocate, initialize and return a struct archive object.
@@ -109,7 +99,7 @@ archive_read_new(void)
a->archive.state = ARCHIVE_STATE_NEW;
a->entry = archive_entry_new2(&a->archive);
- a->archive.vtable = archive_read_vtable();
+ a->archive.vtable = &archive_read_vtable;
a->passphrases.last = &a->passphrases.first;
@@ -245,18 +235,17 @@ client_seek_proxy(struct archive_read_filter *self, int64_t offset, int whence)
}
static int
-client_close_proxy(struct archive_read_filter *self)
+read_client_close_proxy(struct archive_read *a)
{
int r = ARCHIVE_OK, r2;
unsigned int i;
- if (self->archive->client.closer == NULL)
+ if (a->client.closer == NULL)
return (r);
- for (i = 0; i < self->archive->client.nodes; i++)
+ for (i = 0; i < a->client.nodes; i++)
{
- r2 = (self->archive->client.closer)
- ((struct archive *)self->archive,
- self->archive->client.dataset[i].data);
+ r2 = (a->client.closer)
+ ((struct archive *)a, a->client.dataset[i].data);
if (r > r2)
r = r2;
}
@@ -264,6 +253,12 @@ client_close_proxy(struct archive_read_filter *self)
}
static int
+client_close_proxy(struct archive_read_filter *self)
+{
+ return read_client_close_proxy(self->archive);
+}
+
+static int
client_open_proxy(struct archive_read_filter *self)
{
int r = ARCHIVE_OK;
@@ -298,9 +293,7 @@ client_switch_proxy(struct archive_read_filter *self, unsigned int iindex)
r1 = (self->archive->client.closer)
((struct archive *)self->archive, self->data);
self->data = data2;
- if (self->archive->client.opener != NULL)
- r2 = (self->archive->client.opener)
- ((struct archive *)self->archive, self->data);
+ r2 = client_open_proxy(self);
}
return (r1 < r2) ? r1 : r2;
}
@@ -457,13 +450,18 @@ archive_read_prepend_callback_data(struct archive *_a, void *client_data)
return archive_read_add_callback_data(_a, client_data, 0);
}
+static const struct archive_read_filter_vtable
+none_reader_vtable = {
+ .read = client_read_proxy,
+ .close = client_close_proxy,
+};
+
int
archive_read_open1(struct archive *_a)
{
struct archive_read *a = (struct archive_read *)_a;
struct archive_read_filter *filter, *tmp;
int slot, e = ARCHIVE_OK;
- unsigned int i;
archive_check_magic(_a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW,
"archive_read_open");
@@ -481,11 +479,7 @@ archive_read_open1(struct archive *_a)
e = (a->client.opener)(&a->archive, a->client.dataset[0].data);
if (e != 0) {
/* If the open failed, call the closer to clean up. */
- if (a->client.closer) {
- for (i = 0; i < a->client.nodes; i++)
- (a->client.closer)(&a->archive,
- a->client.dataset[i].data);
- }
+ read_client_close_proxy(a);
return (e);
}
}
@@ -497,14 +491,11 @@ archive_read_open1(struct archive *_a)
filter->upstream = NULL;
filter->archive = a;
filter->data = a->client.dataset[0].data;
- filter->open = client_open_proxy;
- filter->read = client_read_proxy;
- filter->skip = client_skip_proxy;
- filter->seek = client_seek_proxy;
- filter->close = client_close_proxy;
- filter->sswitch = client_switch_proxy;
+ filter->vtable = &none_reader_vtable;
filter->name = "none";
filter->code = ARCHIVE_FILTER_NONE;
+ filter->can_skip = 1;
+ filter->can_seek = 1;
a->client.dataset[0].begin_position = 0;
if (!a->filter || !a->bypass_filter_bidding)
@@ -570,12 +561,12 @@ choose_filters(struct archive_read *a)
bidder = a->bidders;
for (i = 0; i < number_bidders; i++, bidder++) {
- if (bidder->bid != NULL) {
- bid = (bidder->bid)(bidder, a->filter);
- if (bid > best_bid) {
- best_bid = bid;
- best_bidder = bidder;
- }
+ if (bidder->vtable == NULL)
+ continue;
+ bid = (bidder->vtable->bid)(bidder, a->filter);
+ if (bid > best_bid) {
+ best_bid = bid;
+ best_bidder = bidder;
}
}
@@ -587,8 +578,6 @@ choose_filters(struct archive_read *a)
__archive_read_free_filters(a);
return (ARCHIVE_FATAL);
}
- a->archive.compression_name = a->filter->name;
- a->archive.compression_code = a->filter->code;
return (ARCHIVE_OK);
}
@@ -600,7 +589,7 @@ choose_filters(struct archive_read *a)
filter->archive = a;
filter->upstream = a->filter;
a->filter = filter;
- r = (best_bidder->init)(a->filter);
+ r = (best_bidder->vtable->init)(a->filter);
if (r != ARCHIVE_OK) {
__archive_read_free_filters(a);
return (ARCHIVE_FATAL);
@@ -614,10 +603,9 @@ choose_filters(struct archive_read *a)
int
__archive_read_header(struct archive_read *a, struct archive_entry *entry)
{
- if (a->filter->read_header)
- return a->filter->read_header(a->filter, entry);
- else
+ if (!a->filter->vtable->read_header)
return (ARCHIVE_OK);
+ return a->filter->vtable->read_header(a->filter, entry);
}
/*
@@ -1006,8 +994,8 @@ close_filters(struct archive_read *a)
/* Close each filter in the pipeline. */
while (f != NULL) {
struct archive_read_filter *t = f->upstream;
- if (!f->closed && f->close != NULL) {
- int r1 = (f->close)(f);
+ if (!f->closed && f->vtable != NULL) {
+ int r1 = (f->vtable->close)(f);
f->closed = 1;
if (r1 < r)
r = r1;
@@ -1112,11 +1100,10 @@ _archive_read_free(struct archive *_a)
/* Release the bidder objects. */
n = sizeof(a->bidders)/sizeof(a->bidders[0]);
for (i = 0; i < n; i++) {
- if (a->bidders[i].free != NULL) {
- int r1 = (a->bidders[i].free)(&a->bidders[i]);
- if (r1 < r)
- r = r1;
- }
+ if (a->bidders[i].vtable == NULL ||
+ a->bidders[i].vtable->free == NULL)
+ continue;
+ (a->bidders[i].vtable->free)(&a->bidders[i]);
}
/* Release passphrase list. */
@@ -1241,19 +1228,35 @@ __archive_read_register_format(struct archive_read *a,
* initialization functions.
*/
int
-__archive_read_get_bidder(struct archive_read *a,
- struct archive_read_filter_bidder **bidder)
+__archive_read_register_bidder(struct archive_read *a,
+ void *bidder_data,
+ const char *name,
+ const struct archive_read_filter_bidder_vtable *vtable)
{
+ struct archive_read_filter_bidder *bidder;
int i, number_slots;
+ archive_check_magic(&a->archive, ARCHIVE_READ_MAGIC,
+ ARCHIVE_STATE_NEW, "__archive_read_register_bidder");
+
number_slots = sizeof(a->bidders) / sizeof(a->bidders[0]);
for (i = 0; i < number_slots; i++) {
- if (a->bidders[i].bid == NULL) {
- memset(a->bidders + i, 0, sizeof(a->bidders[0]));
- *bidder = (a->bidders + i);
- return (ARCHIVE_OK);
+ if (a->bidders[i].vtable != NULL)
+ continue;
+ memset(a->bidders + i, 0, sizeof(a->bidders[0]));
+ bidder = (a->bidders + i);
+ bidder->data = bidder_data;
+ bidder->name = name;
+ bidder->vtable = vtable;
+ if (bidder->vtable->bid == NULL || bidder->vtable->init == NULL) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
+ "Internal error: "
+ "no bid/init for filter bidder");
+ return (ARCHIVE_FATAL);
}
+
+ return (ARCHIVE_OK);
}
archive_set_error(&a->archive, ENOMEM,
@@ -1382,7 +1385,7 @@ __archive_read_filter_ahead(struct archive_read_filter *filter,
*avail = 0;
return (NULL);
}
- bytes_read = (filter->read)(filter,
+ bytes_read = (filter->vtable->read)(filter,
&filter->client_buff);
if (bytes_read < 0) { /* Read error. */
filter->client_total = filter->client_avail = 0;
@@ -1561,8 +1564,8 @@ advance_file_pointer(struct archive_read_filter *filter, int64_t request)
return (total_bytes_skipped);
/* If there's an optimized skip function, use it. */
- if (filter->skip != NULL) {
- bytes_skipped = (filter->skip)(filter, request);
+ if (filter->can_skip != 0) {
+ bytes_skipped = client_skip_proxy(filter, request);
if (bytes_skipped < 0) { /* error */
filter->fatal = 1;
return (bytes_skipped);
@@ -1576,7 +1579,7 @@ advance_file_pointer(struct archive_read_filter *filter, int64_t request)
/* Use ordinary reads as necessary to complete the request. */
for (;;) {
- bytes_read = (filter->read)(filter, &filter->client_buff);
+ bytes_read = (filter->vtable->read)(filter, &filter->client_buff);
if (bytes_read < 0) {
filter->client_buff = NULL;
filter->fatal = 1;
@@ -1631,7 +1634,7 @@ __archive_read_filter_seek(struct archive_read_filter *filter, int64_t offset,
if (filter->closed || filter->fatal)
return (ARCHIVE_FATAL);
- if (filter->seek == NULL)
+ if (filter->can_seek == 0)
return (ARCHIVE_FAILED);
client = &(filter->archive->client);
diff --git a/contrib/libarchive/libarchive/archive_read_add_passphrase.3 b/contrib/libarchive/libarchive/archive_read_add_passphrase.3
index ca60d4fc62f7..c35cfeb34cd5 100644
--- a/contrib/libarchive/libarchive/archive_read_add_passphrase.3
+++ b/contrib/libarchive/libarchive/archive_read_add_passphrase.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd September 14, 2014
.Dt ARCHIVE_READ_ADD_PASSPHRASE 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_read_add_passphrase.c b/contrib/libarchive/libarchive/archive_read_add_passphrase.c
index f0b1ab93300f..c67d1df3d1b8 100644
--- a/contrib/libarchive/libarchive/archive_read_add_passphrase.c
+++ b/contrib/libarchive/libarchive/archive_read_add_passphrase.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
diff --git a/contrib/libarchive/libarchive/archive_read_append_filter.c b/contrib/libarchive/libarchive/archive_read_append_filter.c
index da7c55b9b088..74eead83e0e7 100644
--- a/contrib/libarchive/libarchive/archive_read_append_filter.c
+++ b/contrib/libarchive/libarchive/archive_read_append_filter.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -135,7 +134,7 @@ archive_read_append_filter(struct archive *_a, int code)
filter->archive = a;
filter->upstream = a->filter;
a->filter = filter;
- r2 = (bidder->init)(a->filter);
+ r2 = (bidder->vtable->init)(a->filter);
if (r2 != ARCHIVE_OK) {
__archive_read_free_filters(a);
return (ARCHIVE_FATAL);
@@ -192,7 +191,7 @@ archive_read_append_filter_program_signature(struct archive *_a,
filter->archive = a;
filter->upstream = a->filter;
a->filter = filter;
- r = (bidder->init)(a->filter);
+ r = (bidder->vtable->init)(a->filter);
if (r != ARCHIVE_OK) {
__archive_read_free_filters(a);
return (ARCHIVE_FATAL);
diff --git a/contrib/libarchive/libarchive/archive_read_data.3 b/contrib/libarchive/libarchive/archive_read_data.3
index 78c0c9000419..694f29264ec1 100644
--- a/contrib/libarchive/libarchive/archive_read_data.3
+++ b/contrib/libarchive/libarchive/archive_read_data.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 2, 2012
.Dt ARCHIVE_READ_DATA 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_read_data_into_fd.c b/contrib/libarchive/libarchive/archive_read_data_into_fd.c
index 1f210fce146f..8fd5e12442bc 100644
--- a/contrib/libarchive/libarchive/archive_read_data_into_fd.c
+++ b/contrib/libarchive/libarchive/archive_read_data_into_fd.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -95,8 +94,13 @@ archive_read_data_into_fd(struct archive *a, int fd)
"archive_read_data_into_fd");
can_lseek = (fstat(fd, &st) == 0) && S_ISREG(st.st_mode);
- if (!can_lseek)
+ if (!can_lseek) {
nulls = calloc(1, nulls_size);
+ if (!nulls) {
+ r = ARCHIVE_FATAL;
+ goto cleanup;
+ }
+ }
while ((r = archive_read_data_block(a, &buff, &size, &target_offset)) ==
ARCHIVE_OK) {
diff --git a/contrib/libarchive/libarchive/archive_read_disk.3 b/contrib/libarchive/libarchive/archive_read_disk.3
index 82d6a5c8562c..990c1514c4d5 100644
--- a/contrib/libarchive/libarchive/archive_read_disk.3
+++ b/contrib/libarchive/libarchive/archive_read_disk.3
@@ -22,13 +22,13 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd April 3, 2017
.Dt ARCHIVE_READ_DISK 3
.Os
.Sh NAME
.Nm archive_read_disk_new ,
+.Nm archive_read_disk_open ,
+.Nm archive_read_disk_open_w ,
.Nm archive_read_disk_set_behavior ,
.Nm archive_read_disk_set_symlink_logical ,
.Nm archive_read_disk_set_symlink_physical ,
@@ -38,7 +38,14 @@
.Nm archive_read_disk_uname ,
.Nm archive_read_disk_set_uname_lookup ,
.Nm archive_read_disk_set_gname_lookup ,
-.Nm archive_read_disk_set_standard_lookup
+.Nm archive_read_disk_set_standard_lookup ,
+.Nm archive_read_disk_descend ,
+.Nm archive_read_disk_can_descend ,
+.Nm archive_read_disk_current_filesystem ,
+.Nm archive_read_disk_current_filesystem_is_synthetic ,
+.Nm archive_read_disk_current_filesystem_is_remote ,
+.Nm archive_read_disk_set_matching ,
+.Nm archive_read_disk_set_metadata_filter_callback ,
.Nd functions for reading objects from disk
.Sh LIBRARY
Streaming Archive Library (libarchive, -larchive)
@@ -47,6 +54,10 @@ Streaming Archive Library (libarchive, -larchive)
.Ft struct archive *
.Fn archive_read_disk_new "void"
.Ft int
+.Fn archive_read_disk_open "struct archive *" "const char *"
+.Ft int
+.Fn archive_read_disk_open_w "struct archive *" "const wchar_t *"
+.Ft int
.Fn archive_read_disk_set_behavior "struct archive *" "int"
.Ft int
.Fn archive_read_disk_set_symlink_logical "struct archive *"
@@ -81,6 +92,29 @@ Streaming Archive Library (libarchive, -larchive)
.Fa "int fd"
.Fa "const struct stat *"
.Fc
+.Ft int
+.Fn archive_read_disk_descend "struct archive *"
+.Ft int
+.Fn archive_read_disk_can_descend "struct archive *"
+.Ft int
+.Fn archive_read_disk_current_filesystem "struct archive *"
+.Ft int
+.Fn archive_read_disk_current_filesystem_is_synthetic "struct archive *"
+.Ft int
+.Fn archive_read_disk_current_filesystem_is_remote "struct archive *"
+.Ft int
+.Fo archive_read_disk_set_matching
+.Fa "struct archive *"
+.Fa "struct archive *"
+.Fa "void (*excluded_func)(struct archive *, void *, struct archive entry *)"
+.Fa "void *"
+.Fc
+.Ft int
+.Fo archive_read_disk_set_metadata_filter_callback
+.Fa "struct archive *"
+.Fa "int (*metadata_filter_func)(struct archive *, void*, struct archive_entry *)"
+.Fa "void *"
+.Fc
.Sh DESCRIPTION
These functions provide an API for reading information about
objects on disk.
@@ -92,6 +126,14 @@ objects.
Allocates and initializes a
.Tn struct archive
object suitable for reading object information from disk.
+.It Fn archive_read_disk_open
+Opens the file or directory from the given path and prepares the
+.Tn struct archive
+to read it from disk.
+.It Fn archive_read_disk_open_w
+Opens the file or directory from the given path as a wide character string and prepares the
+.Tn struct archive
+to read it from disk.
.It Fn archive_read_disk_set_behavior
Configures various behavior options when reading entries from disk.
The flags field consists of a bitwise OR of one or more of the
@@ -137,6 +179,9 @@ for more information on extended file attributes.
.It Cm ARCHIVE_READDISK_RESTORE_ATIME
Restore access time of traversed files.
By default, access time of traversed files is not restored.
+.It Cm ARCHIVE_READDISK_NO_SPARSE
+Do not read sparse file information.
+By default, sparse file information is read from disk.
.El
.It Xo
.Fn archive_read_disk_set_symlink_logical ,
@@ -221,6 +266,37 @@ using the currently-registered lookup functions above.
This affects the file ownership fields and ACL values in the
.Tn struct archive_entry
object.
+.It Fn archive_read_disk_descend
+If the current entry can be descended, this function will mark the directory as the next entry for
+.Xr archive_read_header 3
+to visit.
+.It Fn archive_read_disk_can_descend
+Returns 1 if the current entry is an unvisited directory and 0 otherwise.
+.It Fn archive_read_disk_current_filesystem
+Returns the index of the most recent filesystem entry that has been visited through archive_read_disk
+.It Fn archive_read_disk_current_filesystem_is_synthetic
+Returns 1 if the current filesystem is a virtual filesystem. Returns 0 if the current filesystem is not a virtual filesystem. Returns -1 if it is unknown.
+.It Fn archive_read_disk_current_filesystem_is_remote
+Returns 1 if the current filesystem is a remote filesystem. Returns 0 if the current filesystem is not a remote filesystem. Returns -1 if it is unknown.
+.It Fn archive_read_disk_set_matching
+Allows the caller to set
+.Tn struct archive
+*_ma to compare each entry during
+.Xr archive_read_header 3
+calls. If matched based on calls to
+.Tn archive_match_path_excluded ,
+.Tn archive_match_time_excluded ,
+or
+.Tn archive_match_owner_excluded ,
+then the callback function specified by the _excluded_func parameter will execute. This function will receive data provided to the fourth parameter, void *_client_data.
+.It Fn archive_read_disk_set_metadata_filter_callback
+Allows the caller to set a callback function during calls to
+.Xr archive_read_header 3
+to filter out metadata for each entry. The callback function receives the
+.Tn struct archive
+object, void* custom filter data, and the
+.Tn struct archive_entry .
+If the callback function returns an error, ARCHIVE_RETRY will be returned and the entry will not be further processed.
.El
More information about the
.Va struct archive
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 9c9cf38ee9f1..d89f435554f6 100644
--- a/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c
+++ b/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c
@@ -26,7 +26,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD");
/* This is the tree-walking code for POSIX systems. */
#if !defined(_WIN32) || defined(__CYGWIN__)
@@ -303,9 +302,11 @@ archive_read_disk_entry_from_file(struct archive *_a,
if (r1 < r)
r = r1;
}
- r1 = setup_sparse(a, entry, &fd);
- if (r1 < r)
- r = r1;
+ if ((a->flags & ARCHIVE_READDISK_NO_SPARSE) == 0) {
+ r1 = setup_sparse(a, entry, &fd);
+ if (r1 < r)
+ r = r1;
+ }
/* If we opened the file earlier in this function, close it. */
if (initial_fd != fd)
diff --git a/contrib/libarchive/libarchive/archive_read_disk_posix.c b/contrib/libarchive/libarchive/archive_read_disk_posix.c
index 3ee6269ff3ce..76a4fa44de72 100644
--- a/contrib/libarchive/libarchive/archive_read_disk_posix.c
+++ b/contrib/libarchive/libarchive/archive_read_disk_posix.c
@@ -29,14 +29,10 @@
#if !defined(_WIN32) || defined(__CYGWIN__)
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
-#ifdef HAVE_SYS_MOUNT_H
-#include <sys/mount.h>
-#endif
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
@@ -54,6 +50,8 @@ __FBSDID("$FreeBSD$");
#endif
#ifdef HAVE_LINUX_FS_H
#include <linux/fs.h>
+#elif HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
#endif
/*
* Some Linux distributions have both linux/ext2_fs.h and ext2fs/ext2_fs.h.
@@ -109,6 +107,11 @@ __FBSDID("$FreeBSD$");
#define O_CLOEXEC 0
#endif
+#if defined(__hpux) && !defined(HAVE_DIRFD)
+#define dirfd(x) ((x)->__dd_fd)
+#define HAVE_DIRFD
+#endif
+
/*-
* This is a new directory-walking system that addresses a number
* of problems I've had with fts(3). In particular, it has no
@@ -369,22 +372,14 @@ static int open_on_current_dir(struct tree *, const char *, int);
static int tree_dup(int);
-static struct archive_vtable *
-archive_read_disk_vtable(void)
-{
- static struct archive_vtable av;
- static int inited = 0;
-
- if (!inited) {
- av.archive_free = _archive_read_free;
- av.archive_close = _archive_read_close;
- av.archive_read_data_block = _archive_read_data_block;
- av.archive_read_next_header = _archive_read_next_header;
- av.archive_read_next_header2 = _archive_read_next_header2;
- inited = 1;
- }
- return (&av);
-}
+static const struct archive_vtable
+archive_read_disk_vtable = {
+ .archive_free = _archive_read_free,
+ .archive_close = _archive_read_close,
+ .archive_read_data_block = _archive_read_data_block,
+ .archive_read_next_header = _archive_read_next_header,
+ .archive_read_next_header2 = _archive_read_next_header2,
+};
const char *
archive_read_disk_gname(struct archive *_a, la_int64_t gid)
@@ -461,7 +456,7 @@ archive_read_disk_new(void)
return (NULL);
a->archive.magic = ARCHIVE_READ_DISK_MAGIC;
a->archive.state = ARCHIVE_STATE_NEW;
- a->archive.vtable = archive_read_disk_vtable();
+ a->archive.vtable = &archive_read_disk_vtable;
a->entry = archive_entry_new2(&a->archive);
a->lookup_uname = trivial_lookup_uname;
a->lookup_gname = trivial_lookup_gname;
@@ -1290,7 +1285,7 @@ archive_read_disk_descend(struct archive *_a)
ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA,
"archive_read_disk_descend");
- if (t->visit_type != TREE_REGULAR || !t->descend)
+ if (!archive_read_disk_can_descend(_a))
return (ARCHIVE_OK);
/*
@@ -1674,6 +1669,11 @@ setup_current_filesystem(struct archive_read_disk *a)
else
t->current_filesystem->name_max = nm;
#endif
+ if (t->current_filesystem->name_max == 0) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Cannot determine name_max");
+ return (ARCHIVE_FAILED);
+ }
#endif /* USE_READDIR_R */
return (ARCHIVE_OK);
}
@@ -1864,8 +1864,17 @@ setup_current_filesystem(struct archive_read_disk *a)
#if defined(USE_READDIR_R)
/* Set maximum filename length. */
+#if defined(HAVE_STATVFS)
+ t->current_filesystem->name_max = svfs.f_namemax;
+#else
t->current_filesystem->name_max = sfs.f_namelen;
#endif
+ if (t->current_filesystem->name_max == 0) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Cannot determine name_max");
+ return (ARCHIVE_FAILED);
+ }
+#endif
return (ARCHIVE_OK);
}
@@ -1946,6 +1955,11 @@ setup_current_filesystem(struct archive_read_disk *a)
#if defined(USE_READDIR_R)
/* Set maximum filename length. */
t->current_filesystem->name_max = svfs.f_namemax;
+ if (t->current_filesystem->name_max == 0) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Cannot determine name_max");
+ return (ARCHIVE_FAILED);
+ }
#endif
return (ARCHIVE_OK);
}
@@ -2000,6 +2014,11 @@ setup_current_filesystem(struct archive_read_disk *a)
else
t->current_filesystem->name_max = nm;
# endif /* _PC_NAME_MAX */
+ if (t->current_filesystem->name_max == 0) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Cannot determine name_max");
+ return (ARCHIVE_FAILED);
+ }
#endif /* USE_READDIR_R */
return (ARCHIVE_OK);
}
@@ -2106,6 +2125,8 @@ tree_push(struct tree *t, const char *path, int filesystem_id,
struct tree_entry *te;
te = calloc(1, sizeof(*te));
+ if (te == NULL)
+ __archive_errx(1, "Out of memory");
te->next = t->stack;
te->parent = t->current;
if (te->parent)
@@ -2436,7 +2457,7 @@ tree_dir_next_posix(struct tree *t)
#else /* HAVE_FDOPENDIR */
if (tree_enter_working_dir(t) == 0) {
t->d = opendir(".");
-#if HAVE_DIRFD || defined(dirfd)
+#ifdef HAVE_DIRFD
__archive_ensure_cloexec_flag(dirfd(t->d));
#endif
}
@@ -2545,7 +2566,11 @@ tree_current_lstat(struct tree *t)
#else
if (tree_enter_working_dir(t) != 0)
return NULL;
+#ifdef HAVE_LSTAT
if (lstat(tree_current_access_path(t), &t->lst) != 0)
+#else
+ if (la_stat(tree_current_access_path(t), &t->lst) != 0)
+#endif
#endif
return NULL;
t->flags |= hasLstat;
diff --git a/contrib/libarchive/libarchive/archive_read_disk_private.h b/contrib/libarchive/libarchive/archive_read_disk_private.h
index 15c2864c58ce..cf8da99a029b 100644
--- a/contrib/libarchive/libarchive/archive_read_disk_private.h
+++ b/contrib/libarchive/libarchive/archive_read_disk_private.h
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef ARCHIVE_READ_DISK_PRIVATE_H_INCLUDED
diff --git a/contrib/libarchive/libarchive/archive_read_disk_set_standard_lookup.c b/contrib/libarchive/libarchive/archive_read_disk_set_standard_lookup.c
index 719196985878..3512d343f65b 100644
--- a/contrib/libarchive/libarchive/archive_read_disk_set_standard_lookup.c
+++ b/contrib/libarchive/libarchive/archive_read_disk_set_standard_lookup.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
diff --git a/contrib/libarchive/libarchive/archive_read_extract.3 b/contrib/libarchive/libarchive/archive_read_extract.3
index 858f39742553..f3feb5ad551b 100644
--- a/contrib/libarchive/libarchive/archive_read_extract.3
+++ b/contrib/libarchive/libarchive/archive_read_extract.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 2, 2012
.Dt ARCHIVE_READ_EXTRACT 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_read_extract.c b/contrib/libarchive/libarchive/archive_read_extract.c
index 7388b7bc1661..d2159c64cd83 100644
--- a/contrib/libarchive/libarchive/archive_read_extract.c
+++ b/contrib/libarchive/libarchive/archive_read_extract.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
diff --git a/contrib/libarchive/libarchive/archive_read_extract2.c b/contrib/libarchive/libarchive/archive_read_extract2.c
index 4febd8ce056f..e11cac1590e9 100644
--- a/contrib/libarchive/libarchive/archive_read_extract2.c
+++ b/contrib/libarchive/libarchive/archive_read_extract2.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/archive_read_extract.c,v 1.61 2008/05/26 17:00:22 kientzle Exp $");
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
diff --git a/contrib/libarchive/libarchive/archive_read_filter.3 b/contrib/libarchive/libarchive/archive_read_filter.3
index 4f5c3518a6ca..72ff240fd393 100644
--- a/contrib/libarchive/libarchive/archive_read_filter.3
+++ b/contrib/libarchive/libarchive/archive_read_filter.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd June 9, 2020
.Dt ARCHIVE_READ_FILTER 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_read_format.3 b/contrib/libarchive/libarchive/archive_read_format.3
index f3804ce3796a..990293c83131 100644
--- a/contrib/libarchive/libarchive/archive_read_format.3
+++ b/contrib/libarchive/libarchive/archive_read_format.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 2, 2012
.Dt ARCHIVE_READ_FORMAT 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_read_free.3 b/contrib/libarchive/libarchive/archive_read_free.3
index 8371c3a0c60c..7dc121fcaea3 100644
--- a/contrib/libarchive/libarchive/archive_read_free.3
+++ b/contrib/libarchive/libarchive/archive_read_free.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 2, 2012
.Dt ARCHIVE_READ_FREE 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_read_header.3 b/contrib/libarchive/libarchive/archive_read_header.3
index 1e97f3a27507..024dc41da831 100644
--- a/contrib/libarchive/libarchive/archive_read_header.3
+++ b/contrib/libarchive/libarchive/archive_read_header.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 2, 2012
.Dt ARCHIVE_READ_HEADER 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_read_new.3 b/contrib/libarchive/libarchive/archive_read_new.3
index 8bb6b848b06a..c2b5cddef098 100644
--- a/contrib/libarchive/libarchive/archive_read_new.3
+++ b/contrib/libarchive/libarchive/archive_read_new.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 2, 2012
.Dt ARCHIVE_READ_NEW 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_read_open.3 b/contrib/libarchive/libarchive/archive_read_open.3
index f67677823bd0..081b7114bea6 100644
--- a/contrib/libarchive/libarchive/archive_read_open.3
+++ b/contrib/libarchive/libarchive/archive_read_open.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 2, 2012
.Dt ARCHIVE_READ_OPEN 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_read_open_fd.c b/contrib/libarchive/libarchive/archive_read_open_fd.c
index c1094b4e4b80..3ee2423d300e 100644
--- a/contrib/libarchive/libarchive/archive_read_open_fd.c
+++ b/contrib/libarchive/libarchive/archive_read_open_fd.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
diff --git a/contrib/libarchive/libarchive/archive_read_open_file.c b/contrib/libarchive/libarchive/archive_read_open_file.c
index 6001dfd47780..dcf1d4698569 100644
--- a/contrib/libarchive/libarchive/archive_read_open_file.c
+++ b/contrib/libarchive/libarchive/archive_read_open_file.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
@@ -154,10 +153,10 @@ file_skip(struct archive *a, void *client_data, int64_t request)
#ifdef __ANDROID__
/* fileno() isn't safe on all platforms ... see above. */
if (lseek(fileno(mine->f), skip, SEEK_CUR) < 0)
-#elif HAVE_FSEEKO
- if (fseeko(mine->f, skip, SEEK_CUR) != 0)
#elif HAVE__FSEEKI64
if (_fseeki64(mine->f, skip, SEEK_CUR) != 0)
+#elif HAVE_FSEEKO
+ if (fseeko(mine->f, skip, SEEK_CUR) != 0)
#else
if (fseek(mine->f, skip, SEEK_CUR) != 0)
#endif
diff --git a/contrib/libarchive/libarchive/archive_read_open_filename.c b/contrib/libarchive/libarchive/archive_read_open_filename.c
index f5bf8934eea2..dd2e16022844 100644
--- a/contrib/libarchive/libarchive/archive_read_open_filename.c
+++ b/contrib/libarchive/libarchive/archive_read_open_filename.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_IOCTL_H
#include <sys/ioctl.h>
@@ -155,55 +154,73 @@ no_memory:
return (ARCHIVE_FATAL);
}
+/*
+ * This function is an implementation detail of archive_read_open_filename_w,
+ * which is exposed as a separate API on Windows.
+ */
+#if !defined(_WIN32) || defined(__CYGWIN__)
+static
+#endif
int
-archive_read_open_filename_w(struct archive *a, const wchar_t *wfilename,
+archive_read_open_filenames_w(struct archive *a, const wchar_t **wfilenames,
size_t block_size)
{
- struct read_file_data *mine = (struct read_file_data *)calloc(1,
- sizeof(*mine) + wcslen(wfilename) * sizeof(wchar_t));
- if (!mine)
+ struct read_file_data *mine;
+ const wchar_t *wfilename = NULL;
+ if (wfilenames)
+ wfilename = *(wfilenames++);
+
+ archive_clear_error(a);
+ do
{
- archive_set_error(a, ENOMEM, "No memory");
- return (ARCHIVE_FATAL);
- }
- mine->fd = -1;
- mine->block_size = block_size;
+ if (wfilename == NULL)
+ wfilename = L"";
+ mine = (struct read_file_data *)calloc(1,
+ sizeof(*mine) + wcslen(wfilename) * sizeof(wchar_t));
+ if (mine == NULL)
+ goto no_memory;
+ mine->block_size = block_size;
+ mine->fd = -1;
- if (wfilename == NULL || wfilename[0] == L'\0') {
- mine->filename_type = FNT_STDIN;
- } else {
+ if (wfilename == NULL || wfilename[0] == L'\0') {
+ mine->filename_type = FNT_STDIN;
+ } else {
#if defined(_WIN32) && !defined(__CYGWIN__)
- mine->filename_type = FNT_WCS;
- wcscpy(mine->filename.w, wfilename);
+ mine->filename_type = FNT_WCS;
+ wcscpy(mine->filename.w, wfilename);
#else
- /*
- * POSIX system does not support a wchar_t interface for
- * open() system call, so we have to translate a wchar_t
- * filename to multi-byte one and use it.
- */
- struct archive_string fn;
-
- archive_string_init(&fn);
- if (archive_string_append_from_wcs(&fn, wfilename,
- wcslen(wfilename)) != 0) {
- if (errno == ENOMEM)
- archive_set_error(a, errno,
- "Can't allocate memory");
- else
- archive_set_error(a, EINVAL,
- "Failed to convert a wide-character"
- " filename to a multi-byte filename");
+ /*
+ * POSIX system does not support a wchar_t interface for
+ * open() system call, so we have to translate a wchar_t
+ * filename to multi-byte one and use it.
+ */
+ struct archive_string fn;
+
+ archive_string_init(&fn);
+ if (archive_string_append_from_wcs(&fn, wfilename,
+ wcslen(wfilename)) != 0) {
+ if (errno == ENOMEM)
+ archive_set_error(a, errno,
+ "Can't allocate memory");
+ else
+ archive_set_error(a, EINVAL,
+ "Failed to convert a wide-character"
+ " filename to a multi-byte filename");
+ archive_string_free(&fn);
+ free(mine);
+ return (ARCHIVE_FATAL);
+ }
+ mine->filename_type = FNT_MBS;
+ strcpy(mine->filename.m, fn.s);
archive_string_free(&fn);
- free(mine);
- return (ARCHIVE_FATAL);
- }
- mine->filename_type = FNT_MBS;
- strcpy(mine->filename.m, fn.s);
- archive_string_free(&fn);
#endif
- }
- if (archive_read_append_callback_data(a, mine) != (ARCHIVE_OK))
- return (ARCHIVE_FATAL);
+ }
+ if (archive_read_append_callback_data(a, mine) != (ARCHIVE_OK))
+ return (ARCHIVE_FATAL);
+ if (wfilenames == NULL)
+ break;
+ wfilename = *(wfilenames++);
+ } while (wfilename != NULL && wfilename[0] != '\0');
archive_read_set_open_callback(a, file_open);
archive_read_set_read_callback(a, file_read);
archive_read_set_skip_callback(a, file_skip);
@@ -212,6 +229,19 @@ archive_read_open_filename_w(struct archive *a, const wchar_t *wfilename,
archive_read_set_seek_callback(a, file_seek);
return (archive_read_open1(a));
+no_memory:
+ archive_set_error(a, ENOMEM, "No memory");
+ return (ARCHIVE_FATAL);
+}
+
+int
+archive_read_open_filename_w(struct archive *a, const wchar_t *wfilename,
+ size_t block_size)
+{
+ const wchar_t *wfilenames[2];
+ wfilenames[0] = wfilename;
+ wfilenames[1] = NULL;
+ return archive_read_open_filenames_w(a, wfilenames, block_size);
}
static int
diff --git a/contrib/libarchive/libarchive/archive_read_open_memory.c b/contrib/libarchive/libarchive/archive_read_open_memory.c
index 840b924a4dba..a057ce643890 100644
--- a/contrib/libarchive/libarchive/archive_read_open_memory.c
+++ b/contrib/libarchive/libarchive/archive_read_open_memory.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#include <errno.h>
#include <stdlib.h>
diff --git a/contrib/libarchive/libarchive/archive_read_private.h b/contrib/libarchive/libarchive/archive_read_private.h
index 6198e8935a97..0c374f487eba 100644
--- a/contrib/libarchive/libarchive/archive_read_private.h
+++ b/contrib/libarchive/libarchive/archive_read_private.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef ARCHIVE_READ_PRIVATE_H_INCLUDED
@@ -42,6 +40,16 @@ struct archive_read;
struct archive_read_filter_bidder;
struct archive_read_filter;
+struct archive_read_filter_bidder_vtable {
+ /* Taste the upstream filter to see if we handle this. */
+ int (*bid)(struct archive_read_filter_bidder *,
+ struct archive_read_filter *);
+ /* Initialize a newly-created filter. */
+ int (*init)(struct archive_read_filter *);
+ /* Release the bidder's configuration data. */
+ void (*free)(struct archive_read_filter_bidder *);
+};
+
/*
* How bidding works for filters:
* * The bid manager initializes the client-provided reader as the
@@ -62,16 +70,16 @@ struct archive_read_filter_bidder {
void *data;
/* Name of the filter */
const char *name;
- /* Taste the upstream filter to see if we handle this. */
- int (*bid)(struct archive_read_filter_bidder *,
- struct archive_read_filter *);
- /* Initialize a newly-created filter. */
- int (*init)(struct archive_read_filter *);
- /* Set an option for the filter bidder. */
- int (*options)(struct archive_read_filter_bidder *,
- const char *key, const char *value);
- /* Release the bidder's configuration data. */
- int (*free)(struct archive_read_filter_bidder *);
+ const struct archive_read_filter_bidder_vtable *vtable;
+};
+
+struct archive_read_filter_vtable {
+ /* Return next block. */
+ ssize_t (*read)(struct archive_read_filter *, const void **);
+ /* Close (just this filter) and free(self). */
+ int (*close)(struct archive_read_filter *self);
+ /* Read any header metadata if available. */
+ int (*read_header)(struct archive_read_filter *self, struct archive_entry *entry);
};
/*
@@ -86,25 +94,14 @@ struct archive_read_filter {
struct archive_read_filter_bidder *bidder; /* My bidder. */
struct archive_read_filter *upstream; /* Who I read from. */
struct archive_read *archive; /* Associated archive. */
- /* Open a block for reading */
- int (*open)(struct archive_read_filter *self);
- /* Return next block. */
- ssize_t (*read)(struct archive_read_filter *, const void **);
- /* Skip forward this many bytes. */
- int64_t (*skip)(struct archive_read_filter *self, int64_t request);
- /* Seek to an absolute location. */
- int64_t (*seek)(struct archive_read_filter *self, int64_t offset, int whence);
- /* Close (just this filter) and free(self). */
- int (*close)(struct archive_read_filter *self);
- /* Function that handles switching from reading one block to the next/prev */
- int (*sswitch)(struct archive_read_filter *self, unsigned int iindex);
- /* Read any header metadata if available. */
- int (*read_header)(struct archive_read_filter *self, struct archive_entry *entry);
+ const struct archive_read_filter_vtable *vtable;
/* My private data. */
void *data;
const char *name;
int code;
+ int can_skip;
+ int can_seek;
/* Used by reblocking logic. */
char *buffer;
@@ -242,8 +239,10 @@ int __archive_read_register_format(struct archive_read *a,
int (*format_capabilities)(struct archive_read *),
int (*has_encrypted_entries)(struct archive_read *));
-int __archive_read_get_bidder(struct archive_read *a,
- struct archive_read_filter_bidder **bidder);
+int __archive_read_register_bidder(struct archive_read *a,
+ void *bidder_data,
+ const char *name,
+ const struct archive_read_filter_bidder_vtable *vtable);
const void *__archive_read_ahead(struct archive_read *, size_t, ssize_t *);
const void *__archive_read_filter_ahead(struct archive_read_filter *,
diff --git a/contrib/libarchive/libarchive/archive_read_set_format.c b/contrib/libarchive/libarchive/archive_read_set_format.c
index 796dcdcced11..c74361b20c13 100644
--- a/contrib/libarchive/libarchive/archive_read_set_format.c
+++ b/contrib/libarchive/libarchive/archive_read_set_format.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
diff --git a/contrib/libarchive/libarchive/archive_read_set_options.3 b/contrib/libarchive/libarchive/archive_read_set_options.3
index b2db4cbcb893..ef18dfaa271a 100644
--- a/contrib/libarchive/libarchive/archive_read_set_options.3
+++ b/contrib/libarchive/libarchive/archive_read_set_options.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd January 31, 2020
.Dt ARCHIVE_READ_OPTIONS 3
.Os
@@ -255,6 +253,27 @@ have been concatenated together.
Without this option, only the contents of
the first concatenated archive would be read.
.El
+.It Format zip
+.Bl -tag -compact -width indent
+.It Cm compat-2x
+Libarchive 2.x incorrectly encoded Unicode filenames on
+some platforms.
+This option mimics the libarchive 2.x filename handling
+so that such archives can be read correctly.
+.It Cm hdrcharset
+The value is used as a character set name that will be
+used when translating file names.
+.It Cm ignorecrc32
+Skip the CRC32 check.
+Mostly used for testing.
+.It Cm mac-ext
+Support Mac OS metadata extension that records data in special
+files beginning with a period and underscore.
+Defaults to enabled on Mac OS, disabled on other platforms.
+Use
+.Cm !mac-ext
+to disable.
+.El
.El
.\"
.Sh ERRORS
diff --git a/contrib/libarchive/libarchive/archive_read_set_options.c b/contrib/libarchive/libarchive/archive_read_set_options.c
index 2e2eea69058d..c0a4b420734e 100644
--- a/contrib/libarchive/libarchive/archive_read_set_options.c
+++ b/contrib/libarchive/libarchive/archive_read_set_options.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#include "archive_read_private.h"
#include "archive_options_private.h"
@@ -112,37 +111,15 @@ static int
archive_set_filter_option(struct archive *_a, const char *m, const char *o,
const char *v)
{
- struct archive_read *a = (struct archive_read *)_a;
- struct archive_read_filter *filter;
- struct archive_read_filter_bidder *bidder;
- int r, rv = ARCHIVE_WARN, matched_modules = 0;
-
- for (filter = a->filter; filter != NULL; filter = filter->upstream) {
- bidder = filter->bidder;
- if (bidder == NULL)
- continue;
- if (bidder->options == NULL)
- /* This bidder does not support option */
- continue;
- if (m != NULL) {
- if (strcmp(filter->name, m) != 0)
- continue;
- ++matched_modules;
- }
+ (void)_a; /* UNUSED */
+ (void)o; /* UNUSED */
+ (void)v; /* UNUSED */
- r = bidder->options(bidder, o, v);
-
- if (r == ARCHIVE_FATAL)
- return (ARCHIVE_FATAL);
-
- if (r == ARCHIVE_OK)
- rv = ARCHIVE_OK;
- }
/* If the filter name didn't match, return a special code for
* _archive_set_option[s]. */
- if (m != NULL && matched_modules == 0)
+ if (m != NULL)
return ARCHIVE_WARN - 1;
- return (rv);
+ return ARCHIVE_WARN;
}
static int
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_all.c b/contrib/libarchive/libarchive/archive_read_support_filter_all.c
index edb508c1dfd8..cb46d120d102 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_all.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_all.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#include "archive.h"
#include "archive_private.h"
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_by_code.c b/contrib/libarchive/libarchive/archive_read_support_filter_by_code.c
index 94c4af695f4d..ce50d8cdf884 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_by_code.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_by_code.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#include "archive.h"
#include "archive_private.h"
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_bzip2.c b/contrib/libarchive/libarchive/archive_read_support_filter_bzip2.c
index 3885a7cf6153..0392d450a203 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_bzip2.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_bzip2.c
@@ -25,8 +25,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
@@ -70,7 +68,6 @@ static int bzip2_filter_close(struct archive_read_filter *);
*/
static int bzip2_reader_bid(struct archive_read_filter_bidder *, struct archive_read_filter *);
static int bzip2_reader_init(struct archive_read_filter *);
-static int bzip2_reader_free(struct archive_read_filter_bidder *);
#if ARCHIVE_VERSION_NUMBER < 4000000
/* Deprecated; remove in libarchive 4.0 */
@@ -81,24 +78,21 @@ archive_read_support_compression_bzip2(struct archive *a)
}
#endif
+static const struct archive_read_filter_bidder_vtable
+bzip2_bidder_vtable = {
+ .bid = bzip2_reader_bid,
+ .init = bzip2_reader_init,
+};
+
int
archive_read_support_filter_bzip2(struct archive *_a)
{
struct archive_read *a = (struct archive_read *)_a;
- struct archive_read_filter_bidder *reader;
- archive_check_magic(_a, ARCHIVE_READ_MAGIC,
- ARCHIVE_STATE_NEW, "archive_read_support_filter_bzip2");
-
- if (__archive_read_get_bidder(a, &reader) != ARCHIVE_OK)
+ if (__archive_read_register_bidder(a, NULL, "bzip2",
+ &bzip2_bidder_vtable) != ARCHIVE_OK)
return (ARCHIVE_FATAL);
- reader->data = NULL;
- reader->name = "bzip2";
- reader->bid = bzip2_reader_bid;
- reader->init = bzip2_reader_init;
- reader->options = NULL;
- reader->free = bzip2_reader_free;
#if defined(HAVE_BZLIB_H) && defined(BZ_CONFIG_ERROR)
return (ARCHIVE_OK);
#else
@@ -108,12 +102,6 @@ archive_read_support_filter_bzip2(struct archive *_a)
#endif
}
-static int
-bzip2_reader_free(struct archive_read_filter_bidder *self){
- (void)self; /* UNUSED */
- return (ARCHIVE_OK);
-}
-
/*
* Test whether we can handle this data.
*
@@ -183,6 +171,12 @@ bzip2_reader_init(struct archive_read_filter *self)
#else
+static const struct archive_read_filter_vtable
+bzip2_reader_vtable = {
+ .read = bzip2_filter_read,
+ .close = bzip2_filter_close,
+};
+
/*
* Setup the callbacks.
*/
@@ -196,7 +190,7 @@ bzip2_reader_init(struct archive_read_filter *self)
self->code = ARCHIVE_FILTER_BZIP2;
self->name = "bzip2";
- state = (struct private_data *)calloc(sizeof(*state), 1);
+ state = (struct private_data *)calloc(1, sizeof(*state));
out_block = (unsigned char *)malloc(out_block_size);
if (state == NULL || out_block == NULL) {
archive_set_error(&self->archive->archive, ENOMEM,
@@ -209,9 +203,7 @@ bzip2_reader_init(struct archive_read_filter *self)
self->data = state;
state->out_block_size = out_block_size;
state->out_block = out_block;
- self->read = bzip2_filter_read;
- self->skip = NULL; /* not supported */
- self->close = bzip2_filter_close;
+ self->vtable = &bzip2_reader_vtable;
return (ARCHIVE_OK);
}
@@ -236,7 +228,7 @@ bzip2_filter_read(struct archive_read_filter *self, const void **p)
/* Empty our output buffer. */
state->stream.next_out = state->out_block;
- state->stream.avail_out = state->out_block_size;
+ state->stream.avail_out = (uint32_t)state->out_block_size;
/* Try to fill the output buffer. */
for (;;) {
@@ -294,7 +286,7 @@ bzip2_filter_read(struct archive_read_filter *self, const void **p)
return (ARCHIVE_FATAL);
}
state->stream.next_in = (char *)(uintptr_t)read_buf;
- state->stream.avail_in = ret;
+ state->stream.avail_in = (uint32_t)ret;
/* There is no more data, return whatever we have. */
if (ret == 0) {
state->eof = 1;
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_compress.c b/contrib/libarchive/libarchive/archive_read_support_filter_compress.c
index 845967907185..36a3dbdea23c 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_compress.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_compress.c
@@ -64,7 +64,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -133,7 +132,6 @@ struct private_data {
static int compress_bidder_bid(struct archive_read_filter_bidder *, struct archive_read_filter *);
static int compress_bidder_init(struct archive_read_filter *);
-static int compress_bidder_free(struct archive_read_filter_bidder *);
static ssize_t compress_filter_read(struct archive_read_filter *, const void **);
static int compress_filter_close(struct archive_read_filter *);
@@ -150,25 +148,19 @@ archive_read_support_compression_compress(struct archive *a)
}
#endif
+static const struct archive_read_filter_bidder_vtable
+compress_bidder_vtable = {
+ .bid = compress_bidder_bid,
+ .init = compress_bidder_init,
+};
+
int
archive_read_support_filter_compress(struct archive *_a)
{
struct archive_read *a = (struct archive_read *)_a;
- struct archive_read_filter_bidder *bidder;
-
- archive_check_magic(_a, ARCHIVE_READ_MAGIC,
- ARCHIVE_STATE_NEW, "archive_read_support_filter_compress");
-
- if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
- return (ARCHIVE_FATAL);
- bidder->data = NULL;
- bidder->name = "compress (.Z)";
- bidder->bid = compress_bidder_bid;
- bidder->init = compress_bidder_init;
- bidder->options = NULL;
- bidder->free = compress_bidder_free;
- return (ARCHIVE_OK);
+ return __archive_read_register_bidder(a, NULL, "compress (.Z)",
+ &compress_bidder_vtable);
}
/*
@@ -205,6 +197,12 @@ compress_bidder_bid(struct archive_read_filter_bidder *self,
return (bits_checked);
}
+static const struct archive_read_filter_vtable
+compress_reader_vtable = {
+ .read = compress_filter_read,
+ .close = compress_filter_close,
+};
+
/*
* Setup the callbacks.
*/
@@ -219,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(sizeof(*state), 1);
+ state = (struct private_data *)calloc(1, sizeof(*state));
out_block = malloc(out_block_size);
if (state == NULL || out_block == NULL) {
free(out_block);
@@ -233,9 +231,7 @@ compress_bidder_init(struct archive_read_filter *self)
self->data = state;
state->out_block_size = out_block_size;
state->out_block = out_block;
- self->read = compress_filter_read;
- self->skip = NULL; /* not supported */
- self->close = compress_filter_close;
+ self->vtable = &compress_reader_vtable;
/* XXX MOVE THE FOLLOWING OUT OF INIT() XXX */
@@ -306,16 +302,6 @@ compress_filter_read(struct archive_read_filter *self, const void **pblock)
}
/*
- * Clean up the reader.
- */
-static int
-compress_bidder_free(struct archive_read_filter_bidder *self)
-{
- self->data = NULL;
- return (ARCHIVE_OK);
-}
-
-/*
* Close and release the filter.
*/
static int
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_grzip.c b/contrib/libarchive/libarchive/archive_read_support_filter_grzip.c
index 84c86aeb4386..15b6757cb90c 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_grzip.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_grzip.c
@@ -25,9 +25,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
-
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
@@ -54,30 +51,21 @@ static int grzip_bidder_bid(struct archive_read_filter_bidder *,
static int grzip_bidder_init(struct archive_read_filter *);
-static int
-grzip_reader_free(struct archive_read_filter_bidder *self)
-{
- (void)self; /* UNUSED */
- return (ARCHIVE_OK);
-}
+static const struct archive_read_filter_bidder_vtable
+grzip_bidder_vtable = {
+ .bid = grzip_bidder_bid,
+ .init = grzip_bidder_init,
+};
int
archive_read_support_filter_grzip(struct archive *_a)
{
struct archive_read *a = (struct archive_read *)_a;
- struct archive_read_filter_bidder *reader;
-
- archive_check_magic(_a, ARCHIVE_READ_MAGIC,
- ARCHIVE_STATE_NEW, "archive_read_support_filter_grzip");
- if (__archive_read_get_bidder(a, &reader) != ARCHIVE_OK)
+ if (__archive_read_register_bidder(a, NULL, NULL,
+ &grzip_bidder_vtable) != ARCHIVE_OK)
return (ARCHIVE_FATAL);
- reader->data = NULL;
- reader->bid = grzip_bidder_bid;
- reader->init = grzip_bidder_init;
- reader->options = NULL;
- reader->free = grzip_reader_free;
/* This filter always uses an external program. */
archive_set_error(_a, ARCHIVE_ERRNO_MISC,
"Using external grzip program for grzip decompression");
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_gzip.c b/contrib/libarchive/libarchive/archive_read_support_filter_gzip.c
index 9fa9e2b0ddb8..152ea9bdbd7c 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_gzip.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_gzip.c
@@ -25,9 +25,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
-
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
@@ -94,24 +91,21 @@ archive_read_support_compression_gzip(struct archive *a)
}
#endif
+static const struct archive_read_filter_bidder_vtable
+gzip_bidder_vtable = {
+ .bid = gzip_bidder_bid,
+ .init = gzip_bidder_init,
+};
+
int
archive_read_support_filter_gzip(struct archive *_a)
{
struct archive_read *a = (struct archive_read *)_a;
- struct archive_read_filter_bidder *bidder;
-
- archive_check_magic(_a, ARCHIVE_READ_MAGIC,
- ARCHIVE_STATE_NEW, "archive_read_support_filter_gzip");
- if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
+ if (__archive_read_register_bidder(a, NULL, "gzip",
+ &gzip_bidder_vtable) != ARCHIVE_OK)
return (ARCHIVE_FATAL);
- bidder->data = NULL;
- bidder->name = "gzip";
- bidder->bid = gzip_bidder_bid;
- bidder->init = gzip_bidder_init;
- bidder->options = NULL;
- bidder->free = NULL; /* No data, so no cleanup necessary. */
/* Signal the extent of gzip support with the return value here. */
#if HAVE_ZLIB_H
return (ARCHIVE_OK);
@@ -291,6 +285,15 @@ gzip_read_header(struct archive_read_filter *self, struct archive_entry *entry)
return (ARCHIVE_OK);
}
+static const struct archive_read_filter_vtable
+gzip_reader_vtable = {
+ .read = gzip_filter_read,
+ .close = gzip_filter_close,
+#ifdef HAVE_ZLIB_H
+ .read_header = gzip_read_header,
+#endif
+};
+
/*
* Initialize the filter object.
*/
@@ -304,7 +307,7 @@ gzip_bidder_init(struct archive_read_filter *self)
self->code = ARCHIVE_FILTER_GZIP;
self->name = "gzip";
- state = (struct private_data *)calloc(sizeof(*state), 1);
+ state = (struct private_data *)calloc(1, sizeof(*state));
out_block = (unsigned char *)malloc(out_block_size);
if (state == NULL || out_block == NULL) {
free(out_block);
@@ -317,12 +320,7 @@ gzip_bidder_init(struct archive_read_filter *self)
self->data = state;
state->out_block_size = out_block_size;
state->out_block = out_block;
- self->read = gzip_filter_read;
- self->skip = NULL; /* not supported */
- self->close = gzip_filter_close;
-#ifdef HAVE_ZLIB_H
- self->read_header = gzip_read_header;
-#endif
+ self->vtable = &gzip_reader_vtable;
state->in_stream = 0; /* We're not actually within a stream yet. */
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_lrzip.c b/contrib/libarchive/libarchive/archive_read_support_filter_lrzip.c
index c82a8e2f13ea..a562d538ed81 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_lrzip.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_lrzip.c
@@ -25,9 +25,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
-
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
@@ -53,31 +50,21 @@ static int lrzip_bidder_bid(struct archive_read_filter_bidder *,
static int lrzip_bidder_init(struct archive_read_filter *);
-static int
-lrzip_reader_free(struct archive_read_filter_bidder *self)
-{
- (void)self; /* UNUSED */
- return (ARCHIVE_OK);
-}
+static const struct archive_read_filter_bidder_vtable
+lrzip_bidder_vtable = {
+ .bid = lrzip_bidder_bid,
+ .init = lrzip_bidder_init,
+};
int
archive_read_support_filter_lrzip(struct archive *_a)
{
struct archive_read *a = (struct archive_read *)_a;
- struct archive_read_filter_bidder *reader;
-
- archive_check_magic(_a, ARCHIVE_READ_MAGIC,
- ARCHIVE_STATE_NEW, "archive_read_support_filter_lrzip");
- if (__archive_read_get_bidder(a, &reader) != ARCHIVE_OK)
+ if (__archive_read_register_bidder(a, NULL, "lrzip",
+ &lrzip_bidder_vtable) != ARCHIVE_OK)
return (ARCHIVE_FATAL);
- reader->data = NULL;
- reader->name = "lrzip";
- reader->bid = lrzip_bidder_bid;
- reader->init = lrzip_bidder_init;
- reader->options = NULL;
- reader->free = lrzip_reader_free;
/* This filter always uses an external program. */
archive_set_error(_a, ARCHIVE_ERRNO_MISC,
"Using external lrzip program for lrzip decompression");
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c b/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c
index 43ee6c2b7266..bccf4fb8f82d 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c
@@ -25,8 +25,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
@@ -99,7 +97,6 @@ static int lz4_filter_close(struct archive_read_filter *);
*/
static int lz4_reader_bid(struct archive_read_filter_bidder *, struct archive_read_filter *);
static int lz4_reader_init(struct archive_read_filter *);
-static int lz4_reader_free(struct archive_read_filter_bidder *);
#if defined(HAVE_LIBLZ4)
static ssize_t lz4_filter_read_default_stream(struct archive_read_filter *,
const void **);
@@ -107,24 +104,21 @@ static ssize_t lz4_filter_read_legacy_stream(struct archive_read_filter *,
const void **);
#endif
+static const struct archive_read_filter_bidder_vtable
+lz4_bidder_vtable = {
+ .bid = lz4_reader_bid,
+ .init = lz4_reader_init,
+};
+
int
archive_read_support_filter_lz4(struct archive *_a)
{
struct archive_read *a = (struct archive_read *)_a;
- struct archive_read_filter_bidder *reader;
-
- archive_check_magic(_a, ARCHIVE_READ_MAGIC,
- ARCHIVE_STATE_NEW, "archive_read_support_filter_lz4");
- if (__archive_read_get_bidder(a, &reader) != ARCHIVE_OK)
+ if (__archive_read_register_bidder(a, NULL, "lz4",
+ &lz4_bidder_vtable) != ARCHIVE_OK)
return (ARCHIVE_FATAL);
- reader->data = NULL;
- reader->name = "lz4";
- reader->bid = lz4_reader_bid;
- reader->init = lz4_reader_init;
- reader->options = NULL;
- reader->free = lz4_reader_free;
#if defined(HAVE_LIBLZ4)
return (ARCHIVE_OK);
#else
@@ -134,12 +128,6 @@ archive_read_support_filter_lz4(struct archive *_a)
#endif
}
-static int
-lz4_reader_free(struct archive_read_filter_bidder *self){
- (void)self; /* UNUSED */
- return (ARCHIVE_OK);
-}
-
/*
* Test whether we can handle this data.
*
@@ -218,6 +206,12 @@ lz4_reader_init(struct archive_read_filter *self)
#else
+static const struct archive_read_filter_vtable
+lz4_reader_vtable = {
+ .read = lz4_filter_read,
+ .close = lz4_filter_close,
+};
+
/*
* Setup the callbacks.
*/
@@ -229,7 +223,7 @@ lz4_reader_init(struct archive_read_filter *self)
self->code = ARCHIVE_FILTER_LZ4;
self->name = "lz4";
- state = (struct private_data *)calloc(sizeof(*state), 1);
+ state = (struct private_data *)calloc(1, sizeof(*state));
if (state == NULL) {
archive_set_error(&self->archive->archive, ENOMEM,
"Can't allocate data for lz4 decompression");
@@ -238,9 +232,7 @@ lz4_reader_init(struct archive_read_filter *self)
self->data = state;
state->stage = SELECT_STREAM;
- self->read = lz4_filter_read;
- self->skip = NULL; /* not supported */
- self->close = lz4_filter_close;
+ self->vtable = &lz4_reader_vtable;
return (ARCHIVE_OK);
}
@@ -455,8 +447,10 @@ lz4_filter_read_descriptor(struct archive_read_filter *self)
chsum = __archive_xxhash.XXH32(read_buf, (int)descriptor_bytes -1, 0);
chsum = (chsum >> 8) & 0xff;
chsum_verifier = read_buf[descriptor_bytes-1] & 0xff;
+#ifndef DONT_FAIL_ON_CRC_ERROR
if (chsum != chsum_verifier)
goto malformed_error;
+#endif
__archive_read_filter_consume(self->upstream, descriptor_bytes);
@@ -526,8 +520,10 @@ lz4_filter_read_data_block(struct archive_read_filter *self, const void **p)
read_buf + 4, (int)compressed_size, 0);
unsigned int chsum_block =
archive_le32dec(read_buf + 4 + compressed_size);
+#ifndef DONT_FAIL_ON_CRC_ERROR
if (chsum != chsum_block)
goto malformed_error;
+#endif
}
@@ -586,7 +582,7 @@ lz4_filter_read_data_block(struct archive_read_filter *self, const void **p)
state->out_block + prefix64k, (int)compressed_size,
state->flags.block_maximum_size,
state->out_block,
- prefix64k);
+ (int)prefix64k);
#else
uncompressed_size = LZ4_decompress_safe_withPrefix64k(
read_buf + 4,
@@ -658,10 +654,12 @@ lz4_filter_read_default_stream(struct archive_read_filter *self, const void **p)
state->xxh32_state);
state->xxh32_state = NULL;
if (checksum != checksum_stream) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
archive_set_error(&self->archive->archive,
ARCHIVE_ERRNO_MISC,
"lz4 stream checksum error");
return (ARCHIVE_FATAL);
+#endif
}
} else if (ret > 0)
__archive_xxhash.XXH32_update(state->xxh32_state,
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_lzop.c b/contrib/libarchive/libarchive/archive_read_support_filter_lzop.c
index a1c392f4f364..e971063dc68f 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_lzop.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_lzop.c
@@ -26,8 +26,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
-
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -101,23 +99,21 @@ static int lzop_bidder_bid(struct archive_read_filter_bidder *,
struct archive_read_filter *);
static int lzop_bidder_init(struct archive_read_filter *);
+static const struct archive_read_filter_bidder_vtable
+lzop_bidder_vtable = {
+ .bid = lzop_bidder_bid,
+ .init = lzop_bidder_init,
+};
+
int
archive_read_support_filter_lzop(struct archive *_a)
{
struct archive_read *a = (struct archive_read *)_a;
- struct archive_read_filter_bidder *reader;
-
- archive_check_magic(_a, ARCHIVE_READ_MAGIC,
- ARCHIVE_STATE_NEW, "archive_read_support_filter_lzop");
- if (__archive_read_get_bidder(a, &reader) != ARCHIVE_OK)
+ if (__archive_read_register_bidder(a, NULL, NULL,
+ &lzop_bidder_vtable) != ARCHIVE_OK)
return (ARCHIVE_FATAL);
- reader->data = NULL;
- reader->bid = lzop_bidder_bid;
- reader->init = lzop_bidder_init;
- reader->options = NULL;
- reader->free = NULL;
/* Signal the extent of lzop support with the return value here. */
#if defined(HAVE_LZO_LZOCONF_H) && defined(HAVE_LZO_LZO1X_H)
return (ARCHIVE_OK);
@@ -171,6 +167,13 @@ lzop_bidder_init(struct archive_read_filter *self)
return (r);
}
#else
+
+static const struct archive_read_filter_vtable
+lzop_reader_vtable = {
+ .read = lzop_filter_read,
+ .close = lzop_filter_close
+};
+
/*
* Initialize the filter object.
*/
@@ -182,7 +185,7 @@ lzop_bidder_init(struct archive_read_filter *self)
self->code = ARCHIVE_FILTER_LZOP;
self->name = "lzop";
- state = (struct read_lzop *)calloc(sizeof(*state), 1);
+ state = (struct read_lzop *)calloc(1, sizeof(*state));
if (state == NULL) {
archive_set_error(&self->archive->archive, ENOMEM,
"Can't allocate data for lzop decompression");
@@ -190,9 +193,7 @@ lzop_bidder_init(struct archive_read_filter *self)
}
self->data = state;
- self->read = lzop_filter_read;
- self->skip = NULL; /* not supported */
- self->close = lzop_filter_close;
+ self->vtable = &lzop_reader_vtable;
return (ARCHIVE_OK);
}
@@ -279,8 +280,10 @@ consume_header(struct archive_read_filter *self)
checksum = crc32(crc32(0, NULL, 0), p, len);
else
checksum = adler32(adler32(0, NULL, 0), p, len);
+#ifndef DONT_FAIL_ON_CRC_ERROR
if (archive_be32dec(p + len) != checksum)
goto corrupted;
+#endif
__archive_read_filter_consume(self->upstream, len + 4);
if (flags & EXTRA_FIELD) {
/* Skip extra field */
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_none.c b/contrib/libarchive/libarchive/archive_read_support_filter_none.c
index 95e5cfdb15dc..9eb8e54ae960 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_none.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_none.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#include "archive.h"
#include "archive_private.h"
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_program.c b/contrib/libarchive/libarchive/archive_read_support_filter_program.c
index bf5b6f2b3c8b..0482c57c18eb 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_program.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_program.c
@@ -25,7 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_WAIT_H
# include <sys/wait.h>
@@ -98,7 +97,7 @@ struct program_bidder {
static int program_bidder_bid(struct archive_read_filter_bidder *,
struct archive_read_filter *upstream);
static int program_bidder_init(struct archive_read_filter *);
-static int program_bidder_free(struct archive_read_filter_bidder *);
+static void program_bidder_free(struct archive_read_filter_bidder *);
/*
* The actual filter needs to track input and output data.
@@ -123,43 +122,21 @@ static ssize_t program_filter_read(struct archive_read_filter *,
static int program_filter_close(struct archive_read_filter *);
static void free_state(struct program_bidder *);
-static int
-set_bidder_signature(struct archive_read_filter_bidder *bidder,
- struct program_bidder *state, const void *signature, size_t signature_len)
-{
-
- if (signature != NULL && signature_len > 0) {
- state->signature_len = signature_len;
- state->signature = malloc(signature_len);
- memcpy(state->signature, signature, signature_len);
- }
-
- /*
- * Fill in the bidder object.
- */
- bidder->data = state;
- bidder->bid = program_bidder_bid;
- bidder->init = program_bidder_init;
- bidder->options = NULL;
- bidder->free = program_bidder_free;
- return (ARCHIVE_OK);
-}
+static const struct archive_read_filter_bidder_vtable
+program_bidder_vtable = {
+ .bid = program_bidder_bid,
+ .init = program_bidder_init,
+ .free = program_bidder_free,
+};
int
archive_read_support_filter_program_signature(struct archive *_a,
const char *cmd, const void *signature, size_t signature_len)
{
struct archive_read *a = (struct archive_read *)_a;
- struct archive_read_filter_bidder *bidder;
struct program_bidder *state;
/*
- * Get a bidder object from the read core.
- */
- if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
- return (ARCHIVE_FATAL);
-
- /*
* Allocate our private state.
*/
state = (struct program_bidder *)calloc(1, sizeof (*state));
@@ -169,20 +146,31 @@ archive_read_support_filter_program_signature(struct archive *_a,
if (state->cmd == NULL)
goto memerr;
- return set_bidder_signature(bidder, state, signature, signature_len);
+ if (signature != NULL && signature_len > 0) {
+ state->signature_len = signature_len;
+ state->signature = malloc(signature_len);
+ memcpy(state->signature, signature, signature_len);
+ }
+
+ if (__archive_read_register_bidder(a, state, NULL,
+ &program_bidder_vtable) != ARCHIVE_OK) {
+ free_state(state);
+ return (ARCHIVE_FATAL);
+ }
+ return (ARCHIVE_OK);
+
memerr:
free_state(state);
archive_set_error(_a, ENOMEM, "Can't allocate memory");
return (ARCHIVE_FATAL);
}
-static int
+static void
program_bidder_free(struct archive_read_filter_bidder *self)
{
struct program_bidder *state = (struct program_bidder *)self->data;
free_state(state);
- return (ARCHIVE_OK);
}
static void
@@ -393,6 +381,12 @@ child_read(struct archive_read_filter *self, char *buf, size_t buf_len)
}
}
+static const struct archive_read_filter_vtable
+program_reader_vtable = {
+ .read = program_filter_read,
+ .close = program_filter_close,
+};
+
int
__archive_read_program(struct archive_read_filter *self, const char *cmd)
{
@@ -439,9 +433,7 @@ __archive_read_program(struct archive_read_filter *self, const char *cmd)
}
self->data = state;
- self->read = program_filter_read;
- self->skip = NULL;
- self->close = program_filter_close;
+ self->vtable = &program_reader_vtable;
/* XXX Check that we can read at least one byte? */
return (ARCHIVE_OK);
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_rpm.c b/contrib/libarchive/libarchive/archive_read_support_filter_rpm.c
index ddd68392f788..87e9f2ec1939 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_rpm.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_rpm.c
@@ -72,25 +72,19 @@ archive_read_support_compression_rpm(struct archive *a)
}
#endif
+static const struct archive_read_filter_bidder_vtable
+rpm_bidder_vtable = {
+ .bid = rpm_bidder_bid,
+ .init = rpm_bidder_init,
+};
+
int
archive_read_support_filter_rpm(struct archive *_a)
{
struct archive_read *a = (struct archive_read *)_a;
- struct archive_read_filter_bidder *bidder;
-
- archive_check_magic(_a, ARCHIVE_READ_MAGIC,
- ARCHIVE_STATE_NEW, "archive_read_support_filter_rpm");
-
- if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
- return (ARCHIVE_FATAL);
- bidder->data = NULL;
- bidder->name = "rpm";
- bidder->bid = rpm_bidder_bid;
- bidder->init = rpm_bidder_init;
- bidder->options = NULL;
- bidder->free = NULL;
- return (ARCHIVE_OK);
+ return __archive_read_register_bidder(a, NULL, "rpm",
+ &rpm_bidder_vtable);
}
static int
@@ -133,6 +127,12 @@ rpm_bidder_bid(struct archive_read_filter_bidder *self,
return (bits_checked);
}
+static const struct archive_read_filter_vtable
+rpm_reader_vtable = {
+ .read = rpm_filter_read,
+ .close = rpm_filter_close,
+};
+
static int
rpm_bidder_init(struct archive_read_filter *self)
{
@@ -140,11 +140,8 @@ rpm_bidder_init(struct archive_read_filter *self)
self->code = ARCHIVE_FILTER_RPM;
self->name = "rpm";
- self->read = rpm_filter_read;
- self->skip = NULL; /* not supported */
- self->close = rpm_filter_close;
- rpm = (struct rpm *)calloc(sizeof(*rpm), 1);
+ rpm = (struct rpm *)calloc(1, sizeof(*rpm));
if (rpm == NULL) {
archive_set_error(&self->archive->archive, ENOMEM,
"Can't allocate data for rpm");
@@ -153,6 +150,7 @@ rpm_bidder_init(struct archive_read_filter *self)
self->data = rpm;
rpm->state = ST_LEAD;
+ self->vtable = &rpm_reader_vtable;
return (ARCHIVE_OK);
}
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_uu.c b/contrib/libarchive/libarchive/archive_read_support_filter_uu.c
index 689c18ce4390..689ceb8f8760 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_uu.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_uu.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -37,6 +36,7 @@ __FBSDID("$FreeBSD$");
#endif
#include "archive.h"
+#include "archive_entry.h"
#include "archive_private.h"
#include "archive_read_private.h"
@@ -57,12 +57,17 @@ struct uudecode {
#define ST_UUEND 2
#define ST_READ_BASE64 3
#define ST_IGNORE 4
+ mode_t mode;
+ int mode_set;
+ char *name;
};
static int uudecode_bidder_bid(struct archive_read_filter_bidder *,
struct archive_read_filter *filter);
static int uudecode_bidder_init(struct archive_read_filter *);
+static int uudecode_read_header(struct archive_read_filter *,
+ struct archive_entry *entry);
static ssize_t uudecode_filter_read(struct archive_read_filter *,
const void **);
static int uudecode_filter_close(struct archive_read_filter *);
@@ -76,25 +81,19 @@ archive_read_support_compression_uu(struct archive *a)
}
#endif
+static const struct archive_read_filter_bidder_vtable
+uudecode_bidder_vtable = {
+ .bid = uudecode_bidder_bid,
+ .init = uudecode_bidder_init,
+};
+
int
archive_read_support_filter_uu(struct archive *_a)
{
struct archive_read *a = (struct archive_read *)_a;
- struct archive_read_filter_bidder *bidder;
-
- archive_check_magic(_a, ARCHIVE_READ_MAGIC,
- ARCHIVE_STATE_NEW, "archive_read_support_filter_uu");
-
- if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
- return (ARCHIVE_FATAL);
- bidder->data = NULL;
- bidder->name = "uu";
- bidder->bid = uudecode_bidder_bid;
- bidder->init = uudecode_bidder_init;
- bidder->options = NULL;
- bidder->free = NULL;
- return (ARCHIVE_OK);
+ return __archive_read_register_bidder(a, NULL, "uu",
+ &uudecode_bidder_vtable);
}
static const unsigned char ascii[256] = {
@@ -357,6 +356,13 @@ uudecode_bidder_bid(struct archive_read_filter_bidder *self,
return (0);
}
+static const struct archive_read_filter_vtable
+uudecode_reader_vtable = {
+ .read = uudecode_filter_read,
+ .close = uudecode_filter_close,
+ .read_header = uudecode_read_header
+};
+
static int
uudecode_bidder_init(struct archive_read_filter *self)
{
@@ -366,11 +372,8 @@ uudecode_bidder_init(struct archive_read_filter *self)
self->code = ARCHIVE_FILTER_UU;
self->name = "uu";
- self->read = uudecode_filter_read;
- self->skip = NULL; /* not supported */
- self->close = uudecode_filter_close;
- uudecode = (struct uudecode *)calloc(sizeof(*uudecode), 1);
+ uudecode = (struct 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) {
@@ -388,6 +391,9 @@ uudecode_bidder_init(struct archive_read_filter *self)
uudecode->in_allocated = IN_BUFF_SIZE;
uudecode->out_buff = out_buff;
uudecode->state = ST_FIND_HEAD;
+ uudecode->mode_set = 0;
+ uudecode->name = NULL;
+ self->vtable = &uudecode_reader_vtable;
return (ARCHIVE_OK);
}
@@ -432,6 +438,22 @@ ensure_in_buff_size(struct archive_read_filter *self,
return (ARCHIVE_OK);
}
+static int
+uudecode_read_header(struct archive_read_filter *self, struct archive_entry *entry)
+{
+
+ struct uudecode *uudecode;
+ uudecode = (struct uudecode *)self->data;
+
+ if (uudecode->mode_set != 0)
+ archive_entry_set_mode(entry, S_IFREG | uudecode->mode);
+
+ if (uudecode->name != NULL)
+ archive_entry_set_pathname(entry, uudecode->name);
+
+ return (ARCHIVE_OK);
+}
+
static ssize_t
uudecode_filter_read(struct archive_read_filter *self, const void **buff)
{
@@ -441,7 +463,7 @@ uudecode_filter_read(struct archive_read_filter *self, const void **buff)
ssize_t avail_in, ravail;
ssize_t used;
ssize_t total;
- ssize_t len, llen, nl;
+ ssize_t len, llen, nl, namelen;
uudecode = (struct uudecode *)self->data;
@@ -546,6 +568,28 @@ read_more:
uudecode->state = ST_READ_UU;
else
uudecode->state = ST_READ_BASE64;
+ uudecode->mode = (mode_t)(
+ ((int)(b[l] - '0') * 64) +
+ ((int)(b[l+1] - '0') * 8) +
+ (int)(b[l+2] - '0'));
+ uudecode->mode_set = 1;
+ namelen = len - nl - 4 - l;
+ if (namelen > 1) {
+ if (uudecode->name != NULL)
+ free(uudecode->name);
+ uudecode->name = malloc(namelen + 1);
+ if (uudecode->name == NULL) {
+ archive_set_error(
+ &self->archive->archive,
+ ENOMEM,
+ "Can't allocate data for uudecode");
+ return (ARCHIVE_FATAL);
+ }
+ strncpy(uudecode->name,
+ (const char *)(b + l + 4),
+ namelen);
+ uudecode->name[namelen] = '\0';
+ }
}
break;
case ST_READ_UU:
@@ -678,6 +722,7 @@ uudecode_filter_close(struct archive_read_filter *self)
uudecode = (struct uudecode *)self->data;
free(uudecode->in_buff);
free(uudecode->out_buff);
+ free(uudecode->name);
free(uudecode);
return (ARCHIVE_OK);
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_xz.c b/contrib/libarchive/libarchive/archive_read_support_filter_xz.c
index 11807cf6768b..e55fb00edb34 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_xz.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_xz.c
@@ -26,8 +26,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
@@ -108,24 +106,21 @@ archive_read_support_compression_xz(struct archive *a)
}
#endif
+static const struct archive_read_filter_bidder_vtable
+xz_bidder_vtable = {
+ .bid = xz_bidder_bid,
+ .init = xz_bidder_init,
+};
+
int
archive_read_support_filter_xz(struct archive *_a)
{
struct archive_read *a = (struct archive_read *)_a;
- struct archive_read_filter_bidder *bidder;
-
- archive_check_magic(_a, ARCHIVE_READ_MAGIC,
- ARCHIVE_STATE_NEW, "archive_read_support_filter_xz");
- if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
+ if (__archive_read_register_bidder(a, NULL, "xz",
+ &xz_bidder_vtable) != ARCHIVE_OK)
return (ARCHIVE_FATAL);
- bidder->data = NULL;
- bidder->name = "xz";
- bidder->bid = xz_bidder_bid;
- bidder->init = xz_bidder_init;
- bidder->options = NULL;
- bidder->free = NULL;
#if HAVE_LZMA_H && HAVE_LIBLZMA
return (ARCHIVE_OK);
#else
@@ -143,24 +138,21 @@ archive_read_support_compression_lzma(struct archive *a)
}
#endif
+static const struct archive_read_filter_bidder_vtable
+lzma_bidder_vtable = {
+ .bid = lzma_bidder_bid,
+ .init = lzma_bidder_init,
+};
+
int
archive_read_support_filter_lzma(struct archive *_a)
{
struct archive_read *a = (struct archive_read *)_a;
- struct archive_read_filter_bidder *bidder;
- archive_check_magic(_a, ARCHIVE_READ_MAGIC,
- ARCHIVE_STATE_NEW, "archive_read_support_filter_lzma");
-
- if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
+ if (__archive_read_register_bidder(a, NULL, "lzma",
+ &lzma_bidder_vtable) != ARCHIVE_OK)
return (ARCHIVE_FATAL);
- bidder->data = NULL;
- bidder->name = "lzma";
- bidder->bid = lzma_bidder_bid;
- bidder->init = lzma_bidder_init;
- bidder->options = NULL;
- bidder->free = NULL;
#if HAVE_LZMA_H && HAVE_LIBLZMA
return (ARCHIVE_OK);
#else
@@ -179,24 +171,21 @@ archive_read_support_compression_lzip(struct archive *a)
}
#endif
+static const struct archive_read_filter_bidder_vtable
+lzip_bidder_vtable = {
+ .bid = lzip_bidder_bid,
+ .init = lzip_bidder_init,
+};
+
int
archive_read_support_filter_lzip(struct archive *_a)
{
struct archive_read *a = (struct archive_read *)_a;
- struct archive_read_filter_bidder *bidder;
-
- archive_check_magic(_a, ARCHIVE_READ_MAGIC,
- ARCHIVE_STATE_NEW, "archive_read_support_filter_lzip");
- if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
+ if (__archive_read_register_bidder(a, NULL, "lzip",
+ &lzip_bidder_vtable) != ARCHIVE_OK)
return (ARCHIVE_FATAL);
- bidder->data = NULL;
- bidder->name = "lzip";
- bidder->bid = lzip_bidder_bid;
- bidder->init = lzip_bidder_init;
- bidder->options = NULL;
- bidder->free = NULL;
#if HAVE_LZMA_H && HAVE_LIBLZMA
return (ARCHIVE_OK);
#else
@@ -293,8 +282,8 @@ lzma_bidder_bid(struct archive_read_filter_bidder *self,
/* Second through fifth bytes are dictionary size, stored in
* little-endian order. The minimum dictionary size is
* 1 << 12(4KiB) which the lzma of LZMA SDK uses with option
- * -d12 and the maximum dictionary size is 1 << 27(128MiB)
- * which the one uses with option -d27.
+ * -d12 and the maximum dictionary size is 1 << 29(512MiB)
+ * which the one uses with option -d29.
* NOTE: A comment of LZMA SDK source code says this dictionary
* range is from 1 << 12 to 1 << 30. */
dicsize = archive_le32dec(buffer+1);
@@ -377,7 +366,7 @@ lzip_has_member(struct archive_read_filter *filter)
/* Dictionary size. */
log2dic = buffer[5] & 0x1f;
- if (log2dic < 12 || log2dic > 27)
+ if (log2dic < 12 || log2dic > 29)
return (0);
bits_checked += 8;
@@ -470,6 +459,12 @@ set_error(struct archive_read_filter *self, int ret)
}
}
+static const struct archive_read_filter_vtable
+xz_lzma_reader_vtable = {
+ .read = xz_filter_read,
+ .close = xz_filter_close,
+};
+
/*
* Setup the callbacks.
*/
@@ -481,7 +476,7 @@ xz_lzma_bidder_init(struct archive_read_filter *self)
struct private_data *state;
int ret;
- state = (struct private_data *)calloc(sizeof(*state), 1);
+ state = (struct private_data *)calloc(1, sizeof(*state));
out_block = (unsigned char *)malloc(out_block_size);
if (state == NULL || out_block == NULL) {
archive_set_error(&self->archive->archive, ENOMEM,
@@ -494,9 +489,7 @@ xz_lzma_bidder_init(struct archive_read_filter *self)
self->data = state;
state->out_block_size = out_block_size;
state->out_block = out_block;
- self->read = xz_filter_read;
- self->skip = NULL; /* not supported */
- self->close = xz_filter_close;
+ self->vtable = &xz_lzma_reader_vtable;
state->stream.avail_in = 0;
@@ -562,7 +555,7 @@ lzip_init(struct archive_read_filter *self)
/* Get dictionary size. */
log2dic = h[5] & 0x1f;
- if (log2dic < 12 || log2dic > 27)
+ if (log2dic < 12 || log2dic > 29)
return (ARCHIVE_FATAL);
dicsize = 1U << log2dic;
if (log2dic > 12)
@@ -617,9 +610,11 @@ lzip_tail(struct archive_read_filter *self)
/* Check the crc32 value of the uncompressed data of the current
* member */
if (state->crc32 != archive_le32dec(f)) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
archive_set_error(&self->archive->archive, ARCHIVE_ERRNO_MISC,
"Lzip: CRC32 error");
return (ARCHIVE_FAILED);
+#endif
}
/* Check the uncompressed size of the current member */
@@ -659,13 +654,16 @@ xz_filter_read(struct archive_read_filter *self, const void **p)
struct private_data *state;
size_t decompressed;
ssize_t avail_in;
+ int64_t member_in;
int ret;
state = (struct private_data *)self->data;
+ redo:
/* Empty our output buffer. */
state->stream.next_out = state->out_block;
state->stream.avail_out = state->out_block_size;
+ member_in = state->member_in;
/* Try to fill the output buffer. */
while (state->stream.avail_out > 0 && !state->eof) {
@@ -710,9 +708,18 @@ xz_filter_read(struct archive_read_filter *self, const void **p)
decompressed = state->stream.next_out - state->out_block;
state->total_out += decompressed;
state->member_out += decompressed;
- if (decompressed == 0)
+ if (decompressed == 0) {
+ if (member_in != state->member_in &&
+ self->code == ARCHIVE_FILTER_LZIP &&
+ state->eof) {
+ ret = lzip_tail(self);
+ if (ret != ARCHIVE_OK)
+ return (ret);
+ if (!state->eof)
+ goto redo;
+ }
*p = NULL;
- else {
+ } else {
*p = state->out_block;
if (self->code == ARCHIVE_FILTER_LZIP) {
state->crc32 = lzma_crc32(state->out_block,
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_zstd.c b/contrib/libarchive/libarchive/archive_read_support_filter_zstd.c
index af7eeb7c1e24..f7326d2430d3 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_zstd.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_zstd.c
@@ -25,8 +25,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
@@ -79,24 +77,21 @@ static int zstd_bidder_bid(struct archive_read_filter_bidder *,
struct archive_read_filter *);
static int zstd_bidder_init(struct archive_read_filter *);
+static const struct archive_read_filter_bidder_vtable
+zstd_bidder_vtable = {
+ .bid = zstd_bidder_bid,
+ .init = zstd_bidder_init,
+};
+
int
archive_read_support_filter_zstd(struct archive *_a)
{
struct archive_read *a = (struct archive_read *)_a;
- struct archive_read_filter_bidder *bidder;
- archive_check_magic(_a, ARCHIVE_READ_MAGIC,
- ARCHIVE_STATE_NEW, "archive_read_support_filter_zstd");
-
- if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
+ if (__archive_read_register_bidder(a, NULL, "zstd",
+ &zstd_bidder_vtable) != ARCHIVE_OK)
return (ARCHIVE_FATAL);
- bidder->data = NULL;
- bidder->name = "zstd";
- bidder->bid = zstd_bidder_bid;
- bidder->init = zstd_bidder_init;
- bidder->options = NULL;
- bidder->free = NULL;
#if HAVE_ZSTD_H && HAVE_LIBZSTD
return (ARCHIVE_OK);
#else
@@ -118,9 +113,9 @@ zstd_bidder_bid(struct archive_read_filter_bidder *self,
unsigned prefix;
/* Zstd frame magic values */
- const unsigned zstd_magic = 0xFD2FB528U;
- const unsigned zstd_magic_skippable_start = 0x184D2A50U;
- const unsigned zstd_magic_skippable_mask = 0xFFFFFFF0;
+ unsigned zstd_magic = 0xFD2FB528U;
+ unsigned zstd_magic_skippable_start = 0x184D2A50U;
+ unsigned zstd_magic_skippable_mask = 0xFFFFFFF0;
(void) self; /* UNUSED */
@@ -160,6 +155,12 @@ zstd_bidder_init(struct archive_read_filter *self)
#else
+static const struct archive_read_filter_vtable
+zstd_reader_vtable = {
+ .read = zstd_filter_read,
+ .close = zstd_filter_close,
+};
+
/*
* Initialize the filter object
*/
@@ -167,14 +168,14 @@ static int
zstd_bidder_init(struct archive_read_filter *self)
{
struct private_data *state;
- const size_t out_block_size = ZSTD_DStreamOutSize();
+ size_t out_block_size = ZSTD_DStreamOutSize();
void *out_block;
ZSTD_DStream *dstream;
self->code = ARCHIVE_FILTER_ZSTD;
self->name = "zstd";
- state = (struct private_data *)calloc(sizeof(*state), 1);
+ state = (struct private_data *)calloc(1, sizeof(*state));
out_block = (unsigned char *)malloc(out_block_size);
dstream = ZSTD_createDStream();
@@ -192,9 +193,7 @@ zstd_bidder_init(struct archive_read_filter *self)
state->out_block_size = out_block_size;
state->out_block = out_block;
state->dstream = dstream;
- self->read = zstd_filter_read;
- self->skip = NULL; /* not supported */
- self->close = zstd_filter_close;
+ self->vtable = &zstd_reader_vtable;
state->eof = 0;
state->in_frame = 0;
@@ -210,6 +209,7 @@ zstd_filter_read(struct archive_read_filter *self, const void **p)
ssize_t avail_in;
ZSTD_outBuffer out;
ZSTD_inBuffer in;
+ size_t ret;
state = (struct private_data *)self->data;
@@ -218,7 +218,7 @@ zstd_filter_read(struct archive_read_filter *self, const void **p)
/* Try to fill the output buffer. */
while (out.pos < out.size && !state->eof) {
if (!state->in_frame) {
- const size_t ret = ZSTD_initDStream(state->dstream);
+ ret = ZSTD_initDStream(state->dstream);
if (ZSTD_isError(ret)) {
archive_set_error(&self->archive->archive,
ARCHIVE_ERRNO_MISC,
@@ -248,8 +248,7 @@ zstd_filter_read(struct archive_read_filter *self, const void **p)
in.pos = 0;
{
- const size_t ret =
- ZSTD_decompressStream(state->dstream, &out, &in);
+ ret = ZSTD_decompressStream(state->dstream, &out, &in);
if (ZSTD_isError(ret)) {
archive_set_error(&self->archive->archive,
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_7zip.c b/contrib/libarchive/libarchive/archive_read_support_format_7zip.c
index 63cbb7df32c8..7e465935c902 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_7zip.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_7zip.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -41,6 +40,9 @@ __FBSDID("$FreeBSD$");
#ifdef HAVE_ZLIB_H
#include <zlib.h>
#endif
+#ifdef HAVE_ZSTD_H
+#include <zstd.h>
+#endif
#include "archive.h"
#include "archive_entry.h"
@@ -80,8 +82,11 @@ __FBSDID("$FreeBSD$");
#define _7Z_IA64 0x03030401
#define _7Z_ARM 0x03030501
#define _7Z_ARMTHUMB 0x03030701
+#define _7Z_ARM64 0xa
#define _7Z_SPARC 0x03030805
+#define _7Z_ZSTD 0x4F71101 /* Copied from https://github.com/mcmilk/7-Zip-zstd.git */
+
/*
* 7-Zip header property IDs.
*/
@@ -110,6 +115,30 @@ __FBSDID("$FreeBSD$");
#define kEncodedHeader 0x17
#define kDummy 0x19
+// Check that some windows file attribute constants are defined.
+// Reference: https://learn.microsoft.com/en-us/windows/win32/fileio/file-attribute-constants
+#ifndef FILE_ATTRIBUTE_READONLY
+#define FILE_ATTRIBUTE_READONLY 0x00000001
+#endif
+
+#ifndef FILE_ATTRIBUTE_HIDDEN
+#define FILE_ATTRIBUTE_HIDDEN 0x00000002
+#endif
+
+#ifndef FILE_ATTRIBUTE_SYSTEM
+#define FILE_ATTRIBUTE_SYSTEM 0x00000004
+#endif
+
+#ifndef FILE_ATTRIBUTE_DIRECTORY
+#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
+#endif
+
+// This value is defined in 7zip with the comment "trick for Unix".
+//
+// 7z archives created on unix have this bit set in the high 16 bits of
+// the attr field along with the unix permissions.
+#define FILE_ATTRIBUTE_UNIX_EXTENSION 0x8000
+
struct _7z_digests {
unsigned char *defineds;
uint32_t *digests;
@@ -278,6 +307,11 @@ struct _7zip {
z_stream stream;
int stream_valid;
#endif
+ /* Decoding Zstandard data. */
+#if HAVE_ZSTD_H
+ ZSTD_DStream *zstd_dstream;
+ int zstdstream_valid;
+#endif
/* Decoding PPMd data. */
int ppmd7_stat;
CPpmd7 ppmd7_context;
@@ -287,6 +321,7 @@ struct _7zip {
const unsigned char *next_in;
int64_t avail_in;
int64_t total_in;
+ int64_t stream_in;
unsigned char *next_out;
int64_t avail_out;
int64_t total_out;
@@ -396,6 +431,9 @@ static int setup_decode_folder(struct archive_read *, struct _7z_folder *,
int);
static void x86_Init(struct _7zip *);
static size_t x86_Convert(struct _7zip *, uint8_t *, size_t);
+static void arm_Init(struct _7zip *);
+static size_t arm_Convert(struct _7zip *, uint8_t *, size_t);
+static size_t arm64_Convert(struct _7zip *, uint8_t *, size_t);
static ssize_t Bcj2_Decode(struct _7zip *, uint8_t *, size_t);
@@ -724,6 +762,37 @@ archive_read_format_7zip_read_header(struct archive_read *a,
archive_entry_set_size(entry, 0);
}
+ // These attributes are supported by the windows implementation of archive_write_disk.
+ const int supported_attrs = FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM;
+
+ if (zip_entry->attr & supported_attrs) {
+ char *fflags_text, *ptr;
+ /* allocate for "rdonly,hidden,system," */
+ fflags_text = malloc(22 * sizeof(char));
+ 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 there's no body, force read_data() to return EOF immediately. */
if (zip->entry_bytes_remaining < 1)
zip->end_of_entry = 1;
@@ -775,7 +844,7 @@ archive_read_format_7zip_read_header(struct archive_read *a,
}
/* Set up a more descriptive format name. */
- sprintf(zip->format_name, "7-Zip");
+ snprintf(zip->format_name, sizeof(zip->format_name), "7-Zip");
a->archive.archive_format_name = zip->format_name;
return (ret);
@@ -986,15 +1055,30 @@ ppmd_read(void *p)
struct _7zip *zip = (struct _7zip *)(a->format->data);
Byte b;
- if (zip->ppstream.avail_in == 0) {
- archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
- "Truncated RAR file data");
- zip->ppstream.overconsumed = 1;
- return (0);
+ if (zip->ppstream.avail_in <= 0) {
+ /*
+ * Ppmd7_DecodeSymbol might require reading multiple bytes
+ * and we are on boundary;
+ * last resort to read using __archive_read_ahead.
+ */
+ 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) {
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_FILE_FORMAT,
+ "Truncated 7z file data");
+ zip->ppstream.overconsumed = 1;
+ return (0);
+ }
+ zip->ppstream.next_in++;
+ b = data[zip->ppstream.stream_in];
+ } else {
+ b = *zip->ppstream.next_in++;
}
- b = *zip->ppstream.next_in++;
zip->ppstream.avail_in--;
zip->ppstream.total_in++;
+ zip->ppstream.stream_in++;
return (b);
}
@@ -1011,10 +1095,13 @@ init_decompression(struct archive_read *a, struct _7zip *zip,
case _7Z_COPY:
case _7Z_BZ2:
case _7Z_DEFLATE:
+ case _7Z_ZSTD:
case _7Z_PPMD:
if (coder2 != NULL) {
if (coder2->codec != _7Z_X86 &&
- coder2->codec != _7Z_X86_BCJ2) {
+ coder2->codec != _7Z_X86_BCJ2 &&
+ coder2->codec != _7Z_ARM &&
+ coder2->codec != _7Z_ARM64) {
archive_set_error(&a->archive,
ARCHIVE_ERRNO_MISC,
"Unsupported filter %lx for %lx",
@@ -1025,6 +1112,8 @@ init_decompression(struct archive_read *a, struct _7zip *zip,
zip->bcj_state = 0;
if (coder2->codec == _7Z_X86)
x86_Init(zip);
+ else if (coder2->codec == _7Z_ARM)
+ arm_Init(zip);
}
break;
default:
@@ -1121,6 +1210,12 @@ init_decompression(struct archive_read *a, struct _7zip *zip,
filters[fi].id = LZMA_FILTER_ARMTHUMB;
fi++;
break;
+#ifdef LZMA_FILTER_ARM64
+ case _7Z_ARM64:
+ filters[fi].id = LZMA_FILTER_ARM64;
+ fi++;
+ break;
+#endif
case _7Z_SPARC:
filters[fi].id = LZMA_FILTER_SPARC;
fi++;
@@ -1206,6 +1301,22 @@ init_decompression(struct archive_read *a, struct _7zip *zip,
"BZ2 codec is unsupported");
return (ARCHIVE_FAILED);
#endif
+ case _7Z_ZSTD:
+ {
+#if defined(HAVE_ZSTD_H)
+ if (zip->zstdstream_valid) {
+ ZSTD_freeDStream(zip->zstd_dstream);
+ zip->zstdstream_valid = 0;
+ }
+ zip->zstd_dstream = ZSTD_createDStream();
+ zip->zstdstream_valid = 1;
+ break;
+#else
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "ZSTD codec is unsupported");
+ return (ARCHIVE_FAILED);
+#endif
+ }
case _7Z_DEFLATE:
#ifdef HAVE_ZLIB_H
if (zip->stream_valid)
@@ -1276,6 +1387,7 @@ init_decompression(struct archive_read *a, struct _7zip *zip,
case _7Z_IA64:
case _7Z_ARM:
case _7Z_ARMTHUMB:
+ case _7Z_ARM64:
case _7Z_SPARC:
case _7Z_DELTA:
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
@@ -1420,9 +1532,9 @@ decompress(struct archive_read *a, struct _7zip *zip,
#if defined(HAVE_BZLIB_H) && defined(BZ_CONFIG_ERROR)
case _7Z_BZ2:
zip->bzstream.next_in = (char *)(uintptr_t)t_next_in;
- zip->bzstream.avail_in = t_avail_in;
+ zip->bzstream.avail_in = (uint32_t)t_avail_in;
zip->bzstream.next_out = (char *)(uintptr_t)t_next_out;
- zip->bzstream.avail_out = t_avail_out;
+ zip->bzstream.avail_out = (uint32_t)t_avail_out;
r = BZ2_bzDecompress(&(zip->bzstream));
switch (r) {
case BZ_STREAM_END: /* Found end of stream. */
@@ -1472,6 +1584,22 @@ decompress(struct archive_read *a, struct _7zip *zip,
t_avail_out = zip->stream.avail_out;
break;
#endif
+#ifdef HAVE_ZSTD_H
+ case _7Z_ZSTD:
+ {
+ ZSTD_inBuffer input = { t_next_in, t_avail_in, 0 }; // src, size, pos
+ ZSTD_outBuffer output = { t_next_out, t_avail_out, 0 }; // dst, size, pos
+
+ size_t const zret = ZSTD_decompressStream(zip->zstd_dstream, &output, &input);
+ if (ZSTD_isError(zret)) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, "Zstd decompression failed: %s", ZSTD_getErrorName(zret));
+ return ARCHIVE_FAILED;
+ }
+ t_avail_in -= input.pos;
+ t_avail_out -= output.pos;
+ break;
+ }
+#endif
case _7Z_PPMD:
{
uint64_t flush_bytes;
@@ -1485,6 +1613,7 @@ decompress(struct archive_read *a, struct _7zip *zip,
}
zip->ppstream.next_in = t_next_in;
zip->ppstream.avail_in = t_avail_in;
+ zip->ppstream.stream_in = 0;
zip->ppstream.next_out = t_next_out;
zip->ppstream.avail_out = t_avail_out;
if (zip->ppmd7_stat == 0) {
@@ -1555,16 +1684,23 @@ decompress(struct archive_read *a, struct _7zip *zip,
/*
* Decord BCJ.
*/
- if (zip->codec != _7Z_LZMA2 && zip->codec2 == _7Z_X86) {
- size_t l = x86_Convert(zip, buff, *outbytes);
- zip->odd_bcj_size = *outbytes - l;
- if (zip->odd_bcj_size > 0 && zip->odd_bcj_size <= 4 &&
- o_avail_in && ret != ARCHIVE_EOF) {
- memcpy(zip->odd_bcj, ((unsigned char *)buff) + l,
- zip->odd_bcj_size);
- *outbytes = l;
- } else
- zip->odd_bcj_size = 0;
+ if (zip->codec != _7Z_LZMA2) {
+ if (zip->codec2 == _7Z_X86) {
+ size_t l = x86_Convert(zip, buff, *outbytes);
+
+ zip->odd_bcj_size = *outbytes - l;
+ if (zip->odd_bcj_size > 0 && zip->odd_bcj_size <= 4 &&
+ o_avail_in && ret != ARCHIVE_EOF) {
+ memcpy(zip->odd_bcj, ((unsigned char *)buff) + l,
+ zip->odd_bcj_size);
+ *outbytes = l;
+ } else
+ zip->odd_bcj_size = 0;
+ } else if (zip->codec2 == _7Z_ARM) {
+ *outbytes = arm_Convert(zip, buff, *outbytes);
+ } else if (zip->codec2 == _7Z_ARM64) {
+ *outbytes = arm64_Convert(zip, buff, *outbytes);
+ }
}
/*
@@ -1901,6 +2037,8 @@ read_Folder(struct archive_read *a, struct _7z_folder *f)
if (parse_7zip_uint64(
a, &(f->coders[i].propertiesSize)) < 0)
return (-1);
+ if (UMAX_ENTRY < f->coders[i].propertiesSize)
+ return (-1);
if ((p = header_bytes(
a, (size_t)f->coders[i].propertiesSize)) == NULL)
return (-1);
@@ -2585,6 +2723,28 @@ read_Header(struct archive_read *a, struct _7z_header_info *h,
entries[i].flg |= HAS_STREAM;
/* The high 16 bits of attributes is a posix file mode. */
entries[i].mode = entries[i].attr >> 16;
+
+ if (!(entries[i].attr & FILE_ATTRIBUTE_UNIX_EXTENSION)) {
+ // Only windows permissions specified for this entry. Translate to
+ // reasonable corresponding unix permissions.
+
+ if (entries[i].attr & FILE_ATTRIBUTE_DIRECTORY) {
+ if (entries[i].attr & FILE_ATTRIBUTE_READONLY) {
+ // Read-only directory.
+ entries[i].mode = AE_IFDIR | 0555;
+ } else {
+ // Read-write directory.
+ entries[i].mode = AE_IFDIR | 0755;
+ }
+ } else if (entries[i].attr & FILE_ATTRIBUTE_READONLY) {
+ // Readonly file.
+ entries[i].mode = AE_IFREG | 0444;
+ } else {
+ // Assume read-write file.
+ entries[i].mode = AE_IFREG | 0644;
+ }
+ }
+
if (entries[i].flg & HAS_STREAM) {
if ((size_t)sindex >= si->ss.unpack_streams)
return (-1);
@@ -2625,7 +2785,7 @@ read_Header(struct archive_read *a, struct _7z_header_info *h,
}
entries[i].ssIndex = -1;
}
- if (entries[i].attr & 0x01)
+ if (entries[i].attr & FILE_ATTRIBUTE_READONLY)
entries[i].mode &= ~0222;/* Read only. */
if ((entries[i].flg & HAS_STREAM) == 0 && indexInFolder == 0) {
@@ -2840,8 +3000,10 @@ 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
archive_set_error(&a->archive, -1, "Header CRC error");
return (ARCHIVE_FATAL);
+#endif
}
next_header_offset = archive_le64dec(p + 12);
@@ -2890,9 +3052,11 @@ slurp_central_directory(struct archive_read *a, struct _7zip *zip,
/* Check the EncodedHeader CRC.*/
if (r == 0 && zip->header_crc32 != next_header_crc) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
archive_set_error(&a->archive, -1,
"Damaged 7-Zip archive");
r = -1;
+#endif
}
if (r == 0) {
if (zip->si.ci.folders[0].digest_defined)
@@ -2943,9 +3107,11 @@ slurp_central_directory(struct archive_read *a, struct _7zip *zip,
/* Check the Header CRC.*/
if (check_header_crc && zip->header_crc32 != next_header_crc) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
archive_set_error(&a->archive, -1,
"Malformed 7-Zip archive");
return (ARCHIVE_FATAL);
+#endif
}
break;
default:
@@ -3704,6 +3870,116 @@ x86_Convert(struct _7zip *zip, uint8_t *data, size_t size)
return (bufferPos);
}
+static void
+arm_Init(struct _7zip *zip)
+{
+ zip->bcj_ip = 8;
+}
+
+static size_t
+arm_Convert(struct _7zip *zip, uint8_t *buf, size_t size)
+{
+ // This function was adapted from
+ // static size_t bcj_arm(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
+ // in https://git.tukaani.org/xz-embedded.git
+
+ /*
+ * Branch/Call/Jump (BCJ) filter decoders
+ *
+ * Authors: Lasse Collin <lasse.collin@tukaani.org>
+ * Igor Pavlov <https://7-zip.org/>
+ *
+ * This file has been put into the public domain.
+ * You can do whatever you want with this file.
+ */
+
+ size_t i;
+ uint32_t addr;
+
+ for (i = 0; i + 4 <= size; i += 4) {
+ if (buf[i + 3] == 0xEB) {
+ // Calculate the transformed addr.
+ addr = (uint32_t)buf[i] | ((uint32_t)buf[i + 1] << 8)
+ | ((uint32_t)buf[i + 2] << 16);
+ addr <<= 2;
+ addr -= zip->bcj_ip + (uint32_t)i;
+ addr >>= 2;
+
+ // Store the transformed addr in buf.
+ buf[i] = (uint8_t)addr;
+ buf[i + 1] = (uint8_t)(addr >> 8);
+ buf[i + 2] = (uint8_t)(addr >> 16);
+ }
+ }
+
+ zip->bcj_ip += (uint32_t)i;
+
+ return i;
+}
+
+static size_t
+arm64_Convert(struct _7zip *zip, uint8_t *buf, size_t size)
+{
+ // This function was adapted from
+ // static size_t bcj_arm64(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
+ // in https://git.tukaani.org/xz-embedded.git
+
+ /*
+ * Branch/Call/Jump (BCJ) filter decoders
+ *
+ * Authors: Lasse Collin <lasse.collin@tukaani.org>
+ * Igor Pavlov <https://7-zip.org/>
+ *
+ * This file has been put into the public domain.
+ * You can do whatever you want with this file.
+ */
+
+ size_t i;
+ uint32_t instr;
+ uint32_t addr;
+
+ for (i = 0; i + 4 <= size; i += 4) {
+ instr = (uint32_t)buf[i]
+ | ((uint32_t)buf[i+1] << 8)
+ | ((uint32_t)buf[i+2] << 16)
+ | ((uint32_t)buf[i+3] << 24);
+
+ if ((instr >> 26) == 0x25) {
+ /* BL instruction */
+ addr = instr - ((zip->bcj_ip + (uint32_t)i) >> 2);
+ instr = 0x94000000 | (addr & 0x03FFFFFF);
+
+ buf[i] = (uint8_t)instr;
+ buf[i+1] = (uint8_t)(instr >> 8);
+ buf[i+2] = (uint8_t)(instr >> 16);
+ buf[i+3] = (uint8_t)(instr >> 24);
+ } else if ((instr & 0x9F000000) == 0x90000000) {
+ /* ADRP instruction */
+ addr = ((instr >> 29) & 3) | ((instr >> 3) & 0x1FFFFC);
+
+ /* Only convert values in the range +/-512 MiB. */
+ if ((addr + 0x020000) & 0x1C0000)
+ continue;
+
+ addr -= (zip->bcj_ip + (uint32_t)i) >> 12;
+
+ instr &= 0x9000001F;
+ instr |= (addr & 3) << 29;
+ instr |= (addr & 0x03FFFC) << 3;
+ instr |= (0U - (addr & 0x020000)) & 0xE00000;
+
+ buf[i] = (uint8_t)instr;
+ buf[i+1] = (uint8_t)(instr >> 8);
+ buf[i+2] = (uint8_t)(instr >> 16);
+ buf[i+3] = (uint8_t)(instr >> 24);
+ }
+ }
+
+ zip->bcj_ip += (uint32_t)i;
+
+ return i;
+}
+
/*
* Brought from LZMA SDK.
*
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_all.c b/contrib/libarchive/libarchive/archive_read_support_format_all.c
index f8a242c6d59f..3b53c9ad5f57 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_all.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_all.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#include "archive.h"
#include "archive_private.h"
@@ -68,7 +67,7 @@ archive_read_support_format_all(struct archive *a)
* increase the chance that a high bid from someone else will
* make it unnecessary for these to do anything at all.
*/
- /* These three have potentially large look-ahead. */
+ /* These have potentially large look-ahead. */
archive_read_support_format_7zip(a);
archive_read_support_format_cab(a);
archive_read_support_format_rar(a);
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_ar.c b/contrib/libarchive/libarchive/archive_read_support_format_ar.c
index 5815ddb8d2f3..6f1be8591fef 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_ar.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_ar.c
@@ -26,7 +26,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
@@ -271,7 +270,7 @@ _ar_read_header(struct archive_read *a, struct archive_entry *entry,
}
if (ar->strtab != NULL) {
archive_set_error(&a->archive, EINVAL,
- "More than one string tables exist");
+ "More than one string table exists");
return (ARCHIVE_FATAL);
}
@@ -516,7 +515,7 @@ archive_read_format_ar_read_data(struct archive_read *a,
if (ar->entry_padding) {
if (skipped >= 0) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "Truncated ar archive- failed consuming padding");
+ "Truncated ar archive - failed consuming padding");
}
return (ARCHIVE_FATAL);
}
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_by_code.c b/contrib/libarchive/libarchive/archive_read_support_format_by_code.c
index 89e96f1f591f..7ed045f5688c 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_by_code.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_by_code.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_cab.c b/contrib/libarchive/libarchive/archive_read_support_format_cab.c
index 950f3d254de6..3b552a84de12 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_cab.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_cab.c
@@ -996,7 +996,7 @@ archive_read_format_cab_read_header(struct archive_read *a,
cab->end_of_entry_cleanup = cab->end_of_entry = 1;
/* Set up a more descriptive format name. */
- sprintf(cab->format_name, "CAB %d.%d (%s)",
+ snprintf(cab->format_name, sizeof(cab->format_name), "CAB %d.%d (%s)",
hd->major, hd->minor, cab->entry_cffolder->compname);
a->archive.archive_format_name = cab->format_name;
@@ -1134,7 +1134,7 @@ cab_checksum_update(struct archive_read *a, size_t bytes)
}
if (sumbytes) {
int odd = sumbytes & 3;
- if (sumbytes - odd > 0)
+ if ((int)(sumbytes - odd) > 0)
cfdata->sum_calculated = cab_checksum_cfdata_4(
p, sumbytes - odd, cfdata->sum_calculated);
if (odd)
@@ -1171,12 +1171,14 @@ cab_checksum_finish(struct archive_read *a)
cfdata->sum_calculated = cab_checksum_cfdata(
cfdata->memimage + CFDATA_cbData, l, cfdata->sum_calculated);
if (cfdata->sum_calculated != cfdata->sum) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"Checksum error CFDATA[%d] %" PRIx32 ":%" PRIx32 " in %d bytes",
cab->entry_cffolder->cfdata_index -1,
cfdata->sum, cfdata->sum_calculated,
cfdata->compressed_size);
return (ARCHIVE_FAILED);
+#endif
}
return (ARCHIVE_OK);
}
@@ -2292,10 +2294,10 @@ lzx_br_fillup(struct lzx_stream *strm, struct lzx_br *br)
(br->cache_buffer << 48) |
((uint64_t)strm->next_in[1]) << 40 |
((uint64_t)strm->next_in[0]) << 32 |
- ((uint32_t)strm->next_in[3]) << 24 |
- ((uint32_t)strm->next_in[2]) << 16 |
- ((uint32_t)strm->next_in[5]) << 8 |
- (uint32_t)strm->next_in[4];
+ ((uint64_t)strm->next_in[3]) << 24 |
+ ((uint64_t)strm->next_in[2]) << 16 |
+ ((uint64_t)strm->next_in[5]) << 8 |
+ (uint64_t)strm->next_in[4];
strm->next_in += 6;
strm->avail_in -= 6;
br->cache_avail += 6 * 8;
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_cpio.c b/contrib/libarchive/libarchive/archive_read_support_format_cpio.c
index af94583c2a12..dcff23f694a7 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_cpio.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_cpio.c
@@ -25,7 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -441,7 +440,7 @@ archive_read_format_cpio_read_header(struct archive_read *a,
/* Compare name to "TRAILER!!!" to test for end-of-archive. */
if (namelength == 11 && strncmp((const char *)h, "TRAILER!!!",
- 11) == 0) {
+ 10) == 0) {
/* TODO: Store file location of start of block. */
archive_clear_error(&a->archive);
return (ARCHIVE_EOF);
@@ -985,14 +984,14 @@ archive_read_format_cpio_cleanup(struct archive_read *a)
static int64_t
le4(const unsigned char *p)
{
- return ((p[0] << 16) + (((int64_t)p[1]) << 24) + (p[2] << 0) + (p[3] << 8));
+ return ((p[0] << 16) | (((int64_t)p[1]) << 24) | (p[2] << 0) | (p[3] << 8));
}
static int64_t
be4(const unsigned char *p)
{
- return ((((int64_t)p[0]) << 24) + (p[1] << 16) + (p[2] << 8) + (p[3]));
+ return ((((int64_t)p[0]) << 24) | (p[1] << 16) | (p[2] << 8) | (p[3]));
}
/*
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_empty.c b/contrib/libarchive/libarchive/archive_read_support_format_empty.c
index 727b988ac9c0..0dccd9d9baba 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_empty.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_empty.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#include "archive.h"
#include "archive_entry.h"
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c b/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c
index 806f36cbe10b..db5cdb67f1cf 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c
@@ -26,7 +26,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -1007,7 +1006,8 @@ read_children(struct archive_read *a, struct file_info *parent)
p = b;
b += iso9660->logical_block_size;
step -= iso9660->logical_block_size;
- for (; *p != 0 && p < b && p + *p <= b; p += *p) {
+ for (; *p != 0 && p + DR_name_offset < b && p + *p <= b;
+ p += *p) {
struct file_info *child;
/* N.B.: these special directory identifiers
@@ -1756,7 +1756,7 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
size_t name_len;
const unsigned char *rr_start, *rr_end;
const unsigned char *p;
- size_t dr_len;
+ size_t dr_len = 0;
uint64_t fsize, offset;
int32_t location;
int flags;
@@ -1900,7 +1900,7 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
* NUMBER of RRIP "PX" extension.
* Note: Old mkisofs did not record that FILE SERIAL NUMBER
* in ISO images.
- * Note2: xorriso set 0 to the location of a symlink file.
+ * Note2: xorriso set 0 to the location of a symlink file.
*/
if (file->size == 0 && location >= 0) {
/* If file->size is zero, its location points wrong place,
@@ -1954,7 +1954,7 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
* made by makefs is not zero and its location is
* the same as those of next regular file. That is
* the same as hard like file and it causes unexpected
- * error.
+ * error.
*/
if (file->size > 0 &&
(file->mode & AE_IFMT) == AE_IFLNK) {
@@ -2746,7 +2746,7 @@ next_cache_entry(struct archive_read *a, struct iso9660 *iso9660,
* If directory entries all which are descendant of
* rr_moved are still remaining, expose their.
*/
- if (iso9660->re_files.first != NULL &&
+ if (iso9660->re_files.first != NULL &&
iso9660->rr_moved != NULL &&
iso9660->rr_moved->rr_moved_has_re_only)
/* Expose "rr_moved" entry. */
@@ -3014,6 +3014,11 @@ heap_add_entry(struct archive_read *a, struct heap_queue *heap,
uint64_t file_key, parent_key;
int hole, parent;
+ /* Reserve 16 bits for possible key collisions (needed for linked items) */
+ /* For ISO files with more than 65535 entries, reordering will still occur */
+ key <<= 16;
+ key += heap->used & 0xFFFF;
+
/* Expand our pending files list as necessary. */
if (heap->used >= heap->allocated) {
struct file_info **new_pending_files;
@@ -3179,11 +3184,11 @@ isodate17(const unsigned char *v)
static time_t
time_from_tm(struct tm *t)
{
-#if HAVE_TIMEGM
+#if HAVE__MKGMTIME
+ return _mkgmtime(t);
+#elif HAVE_TIMEGM
/* Use platform timegm() if available. */
return (timegm(t));
-#elif HAVE__MKGMTIME64
- return (_mkgmtime64(t));
#else
/* Else use direct calculation using POSIX assumptions. */
/* First, fix up tm_yday based on the year/month/day. */
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_lha.c b/contrib/libarchive/libarchive/archive_read_support_format_lha.c
index bff0f01f41cf..4d6290ac33bb 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_lha.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_lha.c
@@ -739,7 +739,7 @@ archive_read_format_lha_read_header(struct archive_read *a,
if (lha->directory || lha->compsize == 0)
lha->end_of_entry = 1;
- sprintf(lha->format_name, "lha -%c%c%c-",
+ snprintf(lha->format_name, sizeof(lha->format_name), "lha -%c%c%c-",
lha->method[0], lha->method[1], lha->method[2]);
a->archive.archive_format_name = lha->format_name;
@@ -1039,9 +1039,11 @@ lha_read_file_header_2(struct archive_read *a, struct lha *lha)
}
if (header_crc != lha->header_crc) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"LHa header CRC error");
return (ARCHIVE_FATAL);
+#endif
}
return (err);
}
@@ -1107,9 +1109,11 @@ lha_read_file_header_3(struct archive_read *a, struct lha *lha)
return (err);
if (header_crc != lha->header_crc) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"LHa header CRC error");
return (ARCHIVE_FATAL);
+#endif
}
return (err);
invalid:
@@ -1689,7 +1693,7 @@ archive_read_format_lha_cleanup(struct archive_read *a)
* example.
* 1. a symbolic-name is 'aaa/bb/cc'
* 2. a filename is 'xxx/bbb'
- * then a archived pathname is 'xxx/bbb|aaa/bb/cc'
+ * then an archived pathname is 'xxx/bbb|aaa/bb/cc'
*/
static int
lha_parse_linkname(struct archive_wstring *linkname,
@@ -1814,13 +1818,16 @@ lha_crc16(uint16_t crc, const void *pp, size_t len)
/* This if statement expects compiler optimization will
* remove the statement which will not be executed. */
#undef bswap16
+#ifndef __has_builtin
+#define __has_builtin(x) 0
+#endif
#if defined(_MSC_VER) && _MSC_VER >= 1400 /* Visual Studio */
# define bswap16(x) _byteswap_ushort(x)
#elif defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 8) || __GNUC__ > 4)
/* GCC 4.8 and later has __builtin_bswap16() */
# define bswap16(x) __builtin_bswap16(x)
-#elif defined(__clang__)
-/* All clang versions have __builtin_bswap16() */
+#elif defined(__clang__) && __has_builtin(__builtin_bswap16)
+/* Newer clang versions have __builtin_bswap16() */
# define bswap16(x) __builtin_bswap16(x)
#else
# define bswap16(x) ((((x) >> 8) & 0xff) | ((x) << 8))
@@ -2005,10 +2012,10 @@ lzh_br_fillup(struct lzh_stream *strm, struct lzh_br *br)
((uint64_t)strm->next_in[0]) << 48 |
((uint64_t)strm->next_in[1]) << 40 |
((uint64_t)strm->next_in[2]) << 32 |
- ((uint32_t)strm->next_in[3]) << 24 |
- ((uint32_t)strm->next_in[4]) << 16 |
- ((uint32_t)strm->next_in[5]) << 8 |
- (uint32_t)strm->next_in[6];
+ ((uint64_t)strm->next_in[3]) << 24 |
+ ((uint64_t)strm->next_in[4]) << 16 |
+ ((uint64_t)strm->next_in[5]) << 8 |
+ (uint64_t)strm->next_in[6];
strm->next_in += 7;
strm->avail_in -= 7;
br->cache_avail += 7 * 8;
@@ -2018,10 +2025,10 @@ lzh_br_fillup(struct lzh_stream *strm, struct lzh_br *br)
(br->cache_buffer << 48) |
((uint64_t)strm->next_in[0]) << 40 |
((uint64_t)strm->next_in[1]) << 32 |
- ((uint32_t)strm->next_in[2]) << 24 |
- ((uint32_t)strm->next_in[3]) << 16 |
- ((uint32_t)strm->next_in[4]) << 8 |
- (uint32_t)strm->next_in[5];
+ ((uint64_t)strm->next_in[2]) << 24 |
+ ((uint64_t)strm->next_in[3]) << 16 |
+ ((uint64_t)strm->next_in[4]) << 8 |
+ (uint64_t)strm->next_in[5];
strm->next_in += 6;
strm->avail_in -= 6;
br->cache_avail += 6 * 8;
@@ -2378,7 +2385,7 @@ lzh_decode_blocks(struct lzh_stream *strm, int last)
return (100);
}
- /* lzh_br_read_ahead() always try to fill the
+ /* lzh_br_read_ahead() always tries to fill the
* cache buffer up. In specific situation we
* are close to the end of the data, the cache
* buffer will not be full and thus we have to
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_mtree.c b/contrib/libarchive/libarchive/archive_read_support_format_mtree.c
index f03290ad0c8f..6971228eefad 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_mtree.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_mtree.c
@@ -26,7 +26,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
@@ -417,8 +416,8 @@ next_line(struct archive_read *a,
}
/*
- * Compare characters with a mtree keyword.
- * Returns the length of a mtree keyword if matched.
+ * Compare characters with an mtree keyword.
+ * Returns the length of an mtree keyword if matched.
* Returns 0 if not matched.
*/
static int
@@ -516,7 +515,7 @@ bid_keyword(const char *p, ssize_t len)
/*
* Test whether there is a set of mtree keywords.
- * Returns the number of keyword.
+ * Returns the number of keywords.
* Returns -1 if we got incorrect sequence.
* This function expects a set of "<space characters>keyword=value".
* When "unset" is specified, expects a set of "<space characters>keyword".
@@ -692,7 +691,7 @@ detect_form(struct archive_read *a, int *is_form_d)
{
const char *p;
ssize_t avail, ravail;
- ssize_t detected_bytes = 0, len, nl;
+ ssize_t len, nl;
int entry_cnt = 0, multiline = 0;
int form_D = 0;/* The archive is generated by `NetBSD mtree -D'
* (In this source we call it `form D') . */
@@ -728,8 +727,6 @@ detect_form(struct archive_read *a, int *is_form_d)
* character of previous line was '\' character. */
if (bid_keyword_list(p, len, 0, 0) <= 0)
break;
- if (multiline == 1)
- detected_bytes += len;
if (p[len-nl-1] != '\\') {
if (multiline == 1 &&
++entry_cnt >= MAX_BID_ENTRY)
@@ -745,7 +742,6 @@ detect_form(struct archive_read *a, int *is_form_d)
keywords = bid_entry(p, len, nl, &last_is_path);
if (keywords >= 0) {
- detected_bytes += len;
if (form_D == 0) {
if (last_is_path)
form_D = 1;
@@ -764,7 +760,7 @@ detect_form(struct archive_read *a, int *is_form_d)
multiline = 1;
else {
/* We've got plenty of correct lines
- * to assume that this file is a mtree
+ * to assume that this file is an mtree
* format. */
if (++entry_cnt >= MAX_BID_ENTRY)
break;
@@ -997,9 +993,11 @@ process_add_entry(struct archive_read *a, struct mtree *mtree,
struct mtree_entry *alt;
alt = (struct mtree_entry *)__archive_rb_tree_find_node(
&mtree->rbtree, entry->name);
- while (alt->next_dup)
- alt = alt->next_dup;
- alt->next_dup = entry;
+ if (alt != NULL) {
+ while (alt->next_dup)
+ alt = alt->next_dup;
+ alt->next_dup = entry;
+ }
}
}
@@ -1074,7 +1072,7 @@ read_mtree(struct archive_read *a, struct mtree *mtree)
continue;
/* Non-printable characters are not allowed */
for (s = p;s < p + len - 1; s++) {
- if (!isprint((unsigned char)*s)) {
+ if (!isprint((unsigned char)*s) && *s != '\t') {
r = ARCHIVE_FATAL;
break;
}
@@ -1253,9 +1251,17 @@ parse_file(struct archive_read *a, struct archive_entry *entry,
archive_entry_filetype(entry) == AE_IFDIR) {
mtree->fd = open(path, O_RDONLY | O_BINARY | O_CLOEXEC);
__archive_ensure_cloexec_flag(mtree->fd);
- if (mtree->fd == -1 &&
- (errno != ENOENT ||
- archive_strlen(&mtree->contents_name) > 0)) {
+ if (mtree->fd == -1 && (
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ /*
+ * On Windows, attempting to open a file with an
+ * invalid name result in EINVAL (Error 22)
+ */
+ (errno != ENOENT && errno != EINVAL)
+#else
+ errno != ENOENT
+#endif
+ || archive_strlen(&mtree->contents_name) > 0)) {
archive_set_error(&a->archive, errno,
"Can't open %s", path);
r = ARCHIVE_WARN;
@@ -1273,7 +1279,13 @@ parse_file(struct archive_read *a, struct archive_entry *entry,
mtree->fd = -1;
st = NULL;
}
- } else if (lstat(path, st) == -1) {
+ }
+#ifdef HAVE_LSTAT
+ else if (lstat(path, st) == -1)
+#else
+ else if (la_stat(path, st) == -1)
+#endif
+ {
st = NULL;
}
@@ -1629,11 +1641,11 @@ parse_keyword(struct archive_read *a, struct mtree *mtree,
|| strcmp(key, "contents") == 0) {
parse_escapes(val, NULL);
archive_strcpy(&mtree->contents_name, val);
- break;
+ return (ARCHIVE_OK);
}
if (strcmp(key, "cksum") == 0)
- break;
- __LA_FALLTHROUGH;
+ return (ARCHIVE_OK);
+ break;
case 'd':
if (strcmp(key, "device") == 0) {
/* stat(2) st_rdev field, e.g. the major/minor IDs
@@ -1647,65 +1659,64 @@ parse_keyword(struct archive_read *a, struct mtree *mtree,
archive_entry_set_rdev(entry, dev);
return r;
}
- __LA_FALLTHROUGH;
+ break;
case 'f':
if (strcmp(key, "flags") == 0) {
*parsed_kws |= MTREE_HAS_FFLAGS;
archive_entry_copy_fflags_text(entry, val);
- break;
+ return (ARCHIVE_OK);
}
- __LA_FALLTHROUGH;
+ break;
case 'g':
if (strcmp(key, "gid") == 0) {
*parsed_kws |= MTREE_HAS_GID;
archive_entry_set_gid(entry, mtree_atol(&val, 10));
- break;
+ return (ARCHIVE_OK);
}
if (strcmp(key, "gname") == 0) {
*parsed_kws |= MTREE_HAS_GNAME;
archive_entry_copy_gname(entry, val);
- break;
+ return (ARCHIVE_OK);
}
- __LA_FALLTHROUGH;
+ break;
case 'i':
if (strcmp(key, "inode") == 0) {
archive_entry_set_ino(entry, mtree_atol(&val, 10));
- break;
+ return (ARCHIVE_OK);
}
- __LA_FALLTHROUGH;
+ break;
case 'l':
if (strcmp(key, "link") == 0) {
+ parse_escapes(val, NULL);
archive_entry_copy_symlink(entry, val);
- break;
+ return (ARCHIVE_OK);
}
- __LA_FALLTHROUGH;
+ break;
case 'm':
if (strcmp(key, "md5") == 0 || strcmp(key, "md5digest") == 0) {
return parse_digest(a, entry, val,
ARCHIVE_ENTRY_DIGEST_MD5);
}
if (strcmp(key, "mode") == 0) {
- if (val[0] >= '0' && val[0] <= '7') {
- *parsed_kws |= MTREE_HAS_PERM;
- archive_entry_set_perm(entry,
- (mode_t)mtree_atol(&val, 8));
- } else {
+ if (val[0] < '0' || val[0] > '7') {
archive_set_error(&a->archive,
ARCHIVE_ERRNO_FILE_FORMAT,
"Symbolic or non-octal mode \"%s\" unsupported", val);
- return ARCHIVE_WARN;
+ return (ARCHIVE_WARN);
}
- break;
+ *parsed_kws |= MTREE_HAS_PERM;
+ archive_entry_set_perm(entry, (mode_t)mtree_atol(&val, 8));
+ return (ARCHIVE_OK);
}
- __LA_FALLTHROUGH;
+ break;
case 'n':
if (strcmp(key, "nlink") == 0) {
*parsed_kws |= MTREE_HAS_NLINK;
archive_entry_set_nlink(entry,
(unsigned int)mtree_atol(&val, 10));
- break;
+ return (ARCHIVE_OK);
}
- __LA_FALLTHROUGH;
+ break;
case 'r':
if (strcmp(key, "resdevice") == 0) {
/* stat(2) st_dev field, e.g. the device ID where the
@@ -1723,7 +1734,7 @@ parse_keyword(struct archive_read *a, struct mtree *mtree,
return parse_digest(a, entry, val,
ARCHIVE_ENTRY_DIGEST_RMD160);
}
- __LA_FALLTHROUGH;
+ break;
case 's':
if (strcmp(key, "sha1") == 0 ||
strcmp(key, "sha1digest") == 0) {
@@ -1747,9 +1758,9 @@ parse_keyword(struct archive_read *a, struct mtree *mtree,
}
if (strcmp(key, "size") == 0) {
archive_entry_set_size(entry, mtree_atol(&val, 10));
- break;
+ return (ARCHIVE_OK);
}
- __LA_FALLTHROUGH;
+ break;
case 't':
if (strcmp(key, "tags") == 0) {
/*
@@ -1757,7 +1768,7 @@ parse_keyword(struct archive_read *a, struct mtree *mtree,
* Ignore the tags for now, but the interface
* should be extended to allow inclusion/exclusion.
*/
- break;
+ return (ARCHIVE_OK);
}
if (strcmp(key, "time") == 0) {
int64_t m;
@@ -1783,79 +1794,85 @@ parse_keyword(struct archive_read *a, struct mtree *mtree,
else if (m < my_time_t_min)
m = my_time_t_min;
archive_entry_set_mtime(entry, (time_t)m, ns);
- break;
+ return (ARCHIVE_OK);
}
if (strcmp(key, "type") == 0) {
switch (val[0]) {
case 'b':
if (strcmp(val, "block") == 0) {
- archive_entry_set_filetype(entry, AE_IFBLK);
- break;
+ *parsed_kws |= MTREE_HAS_TYPE;
+ archive_entry_set_filetype(entry,
+ AE_IFBLK);
+ return (ARCHIVE_OK);
}
- __LA_FALLTHROUGH;
+ break;
case 'c':
if (strcmp(val, "char") == 0) {
+ *parsed_kws |= MTREE_HAS_TYPE;
archive_entry_set_filetype(entry,
AE_IFCHR);
- break;
+ return (ARCHIVE_OK);
}
- __LA_FALLTHROUGH;
+ break;
case 'd':
if (strcmp(val, "dir") == 0) {
+ *parsed_kws |= MTREE_HAS_TYPE;
archive_entry_set_filetype(entry,
AE_IFDIR);
- break;
+ return (ARCHIVE_OK);
}
- __LA_FALLTHROUGH;
+ break;
case 'f':
if (strcmp(val, "fifo") == 0) {
+ *parsed_kws |= MTREE_HAS_TYPE;
archive_entry_set_filetype(entry,
AE_IFIFO);
- break;
+ return (ARCHIVE_OK);
}
if (strcmp(val, "file") == 0) {
+ *parsed_kws |= MTREE_HAS_TYPE;
archive_entry_set_filetype(entry,
AE_IFREG);
- break;
+ return (ARCHIVE_OK);
}
- __LA_FALLTHROUGH;
+ break;
case 'l':
if (strcmp(val, "link") == 0) {
+ *parsed_kws |= MTREE_HAS_TYPE;
archive_entry_set_filetype(entry,
AE_IFLNK);
- break;
+ return (ARCHIVE_OK);
}
- __LA_FALLTHROUGH;
+ break;
default:
- archive_set_error(&a->archive,
- ARCHIVE_ERRNO_FILE_FORMAT,
- "Unrecognized file type \"%s\"; "
- "assuming \"file\"", val);
- archive_entry_set_filetype(entry, AE_IFREG);
- return (ARCHIVE_WARN);
+ break;
}
- *parsed_kws |= MTREE_HAS_TYPE;
- break;
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_FILE_FORMAT,
+ "Unrecognized file type \"%s\"; "
+ "assuming \"file\"", val);
+ archive_entry_set_filetype(entry, AE_IFREG);
+ return (ARCHIVE_WARN);
}
- __LA_FALLTHROUGH;
+ break;
case 'u':
if (strcmp(key, "uid") == 0) {
*parsed_kws |= MTREE_HAS_UID;
archive_entry_set_uid(entry, mtree_atol(&val, 10));
- break;
+ return (ARCHIVE_OK);
}
if (strcmp(key, "uname") == 0) {
*parsed_kws |= MTREE_HAS_UNAME;
archive_entry_copy_uname(entry, val);
- break;
+ return (ARCHIVE_OK);
}
- __LA_FALLTHROUGH;
+ break;
default:
- archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
- "Unrecognized key %s=%s", key, val);
- return (ARCHIVE_WARN);
+ break;
}
- return (ARCHIVE_OK);
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Unrecognized key %s=%s", key, val);
+ return (ARCHIVE_WARN);
}
static int
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_rar.c b/contrib/libarchive/libarchive/archive_read_support_format_rar.c
index c2666b2f4612..4fc6626cacfd 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_rar.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_rar.c
@@ -135,6 +135,16 @@
#define MAX_SYMBOL_LENGTH 0xF
#define MAX_SYMBOLS 20
+/* Virtual Machine Properties */
+#define VM_MEMORY_SIZE 0x40000
+#define VM_MEMORY_MASK (VM_MEMORY_SIZE - 1)
+#define PROGRAM_WORK_SIZE 0x3C000
+#define PROGRAM_GLOBAL_SIZE 0x2000
+#define PROGRAM_SYSTEM_GLOBAL_ADDRESS PROGRAM_WORK_SIZE
+#define PROGRAM_SYSTEM_GLOBAL_SIZE 0x40
+#define PROGRAM_USER_GLOBAL_ADDRESS (PROGRAM_SYSTEM_GLOBAL_ADDRESS + PROGRAM_SYSTEM_GLOBAL_SIZE)
+#define PROGRAM_USER_GLOBAL_SIZE (PROGRAM_GLOBAL_SIZE - PROGRAM_SYSTEM_GLOBAL_SIZE)
+
/*
* Considering L1,L2 cache miss and a calling of write system-call,
* the best size of the output buffer(uncompressed buffer) is 128K.
@@ -213,6 +223,69 @@ struct data_block_offsets
int64_t end_offset;
};
+struct rar_program_code
+{
+ uint8_t *staticdata;
+ uint32_t staticdatalen;
+ uint8_t *globalbackup;
+ uint32_t globalbackuplen;
+ uint64_t fingerprint;
+ uint32_t usagecount;
+ uint32_t oldfilterlength;
+ struct rar_program_code *next;
+};
+
+struct rar_filter
+{
+ struct rar_program_code *prog;
+ uint32_t initialregisters[8];
+ uint8_t *globaldata;
+ uint32_t globaldatalen;
+ size_t blockstartpos;
+ uint32_t blocklength;
+ uint32_t filteredblockaddress;
+ uint32_t filteredblocklength;
+ struct rar_filter *next;
+};
+
+struct memory_bit_reader
+{
+ const uint8_t *bytes;
+ size_t length;
+ size_t offset;
+ uint64_t bits;
+ int available;
+ int at_eof;
+};
+
+struct rar_virtual_machine
+{
+ uint32_t registers[8];
+ uint8_t memory[VM_MEMORY_SIZE + sizeof(uint32_t)];
+};
+
+struct rar_filters
+{
+ struct rar_virtual_machine *vm;
+ struct rar_program_code *progs;
+ struct rar_filter *stack;
+ int64_t filterstart;
+ uint32_t lastfilternum;
+ int64_t lastend;
+ uint8_t *bytes;
+ size_t bytes_ready;
+};
+
+struct audio_state
+{
+ int8_t weight[5];
+ int16_t delta[4];
+ int8_t lastdelta;
+ int error[11];
+ int count;
+ uint8_t lastbyte;
+};
+
struct rar
{
/* Entries from main RAR header */
@@ -273,15 +346,16 @@ struct rar
struct huffman_code lengthcode;
unsigned char lengthtable[HUFFMAN_TABLE_SIZE];
struct lzss lzss;
- char output_last_match;
unsigned int lastlength;
unsigned int lastoffset;
unsigned int oldoffset[4];
unsigned int lastlowoffset;
unsigned int numlowoffsetrepeats;
- int64_t filterstart;
char start_new_table;
+ /* Filters */
+ struct rar_filters filters;
+
/* PPMd Variant H members */
char ppmd_valid;
char ppmd_eod;
@@ -343,23 +417,43 @@ static int read_symlink_stored(struct archive_read *, struct archive_entry *,
static int read_data_stored(struct archive_read *, const void **, size_t *,
int64_t *);
static int read_data_compressed(struct archive_read *, const void **, size_t *,
- int64_t *, size_t);
+ int64_t *, size_t);
static int rar_br_preparation(struct archive_read *, struct rar_br *);
static int parse_codes(struct archive_read *);
static void free_codes(struct archive_read *);
static int read_next_symbol(struct archive_read *, struct huffman_code *);
static int create_code(struct archive_read *, struct huffman_code *,
- unsigned char *, int, char);
+ unsigned char *, int, char);
static int add_value(struct archive_read *, struct huffman_code *, int, int,
int);
static int new_node(struct huffman_code *);
static int make_table(struct archive_read *, struct huffman_code *);
static int make_table_recurse(struct archive_read *, struct huffman_code *, int,
struct huffman_table_entry *, int, int);
-static int64_t expand(struct archive_read *, int64_t);
-static int copy_from_lzss_window(struct archive_read *, const void **,
- int64_t, 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);
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);
+static int run_filters(struct archive_read *);
+static void clear_filters(struct rar_filters *);
+static struct rar_filter *create_filter(struct rar_program_code *,
+ const uint8_t *, uint32_t,
+ uint32_t[8], size_t, uint32_t);
+static void delete_filter(struct rar_filter *filter);
+static struct rar_program_code *compile_program(const uint8_t *, size_t);
+static void delete_program_code(struct rar_program_code *prog);
+static uint32_t membr_next_rarvm_number(struct memory_bit_reader *br);
+static inline uint32_t membr_bits(struct memory_bit_reader *br, int bits);
+static int membr_fill(struct memory_bit_reader *br, int bits);
+static int read_filter(struct archive_read *, int64_t *);
+static int rar_decode_byte(struct archive_read*, uint8_t *);
+static int execute_filter(struct archive_read*, struct rar_filter *,
+ struct rar_virtual_machine *, size_t);
+static int copy_from_lzss_window(struct archive_read *, void *, int64_t, int);
+static inline void vm_write_32(struct rar_virtual_machine*, size_t, uint32_t);
+static inline uint32_t vm_read_32(struct rar_virtual_machine*, size_t);
/*
* Bit stream reader.
@@ -640,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(sizeof(*rar), 1);
+ rar = (struct rar *)calloc(1, sizeof(*rar));
if (rar == NULL)
{
archive_set_error(&a->archive, ENOMEM, "Can't allocate rar data");
@@ -913,9 +1007,11 @@ archive_read_format_rar_read_header(struct archive_read *a,
crc32_val = crc32(0, (const unsigned char *)p + 2, (unsigned)skip - 2);
if ((crc32_val & 0xffff) != archive_le16dec(p)) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"Header CRC error");
return (ARCHIVE_FATAL);
+#endif
}
__archive_read_consume(a, skip);
break;
@@ -966,14 +1062,16 @@ archive_read_format_rar_read_header(struct archive_read *a,
return (ARCHIVE_FATAL);
}
p = h;
- crc32_val = crc32(crc32_val, (const unsigned char *)p, to_read);
+ crc32_val = crc32(crc32_val, (const unsigned char *)p, (unsigned int)to_read);
__archive_read_consume(a, to_read);
skip -= to_read;
}
if ((crc32_val & 0xffff) != crc32_expected) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"Header CRC error");
return (ARCHIVE_FATAL);
+#endif
}
if (head_type == ENDARC_HEAD)
return (ARCHIVE_EOF);
@@ -1244,6 +1342,7 @@ archive_read_format_rar_cleanup(struct archive_read *a)
rar = (struct rar *)(a->format->data);
free_codes(a);
+ clear_filters(&rar->filters);
free(rar->filename);
free(rar->filename_save);
free(rar->dbo);
@@ -1337,9 +1436,11 @@ read_header(struct archive_read *a, struct archive_entry *entry,
/* File Header CRC check. */
crc32_val = crc32(crc32_val, h, (unsigned)(header_size - 7));
if ((crc32_val & 0xffff) != archive_le16dec(rar_header.crc)) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"Header CRC error");
return (ARCHIVE_FATAL);
+#endif
}
/* If no CRC error, Go on parsing File Header. */
p = h;
@@ -1662,6 +1763,7 @@ read_header(struct archive_read *a, struct archive_entry *entry,
memset(rar->lengthtable, 0, sizeof(rar->lengthtable));
__archive_ppmd7_functions.Ppmd7_Free(&rar->ppmd7_context);
rar->ppmd_valid = rar->ppmd_eod = 0;
+ rar->filters.filterstart = INT64_MAX;
/* Don't set any archive entries for non-file header types */
if (head_type == NEWSUB_HEAD)
@@ -1728,13 +1830,9 @@ read_exttime(const char *p, struct rar *rar, const char *endp)
struct tm *tm;
time_t t;
long nsec;
-#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S)
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
struct tm tmbuf;
#endif
-#if defined(HAVE__LOCALTIME64_S)
- errno_t terr;
- __time64_t tmptime;
-#endif
if (p + 2 > endp)
return (-1);
@@ -1766,15 +1864,10 @@ read_exttime(const char *p, struct rar *rar, const char *endp)
rem = (((unsigned)(unsigned char)*p) << 16) | (rem >> 8);
p++;
}
-#if defined(HAVE_LOCALTIME_R)
+#if defined(HAVE_LOCALTIME_S)
+ tm = localtime_s(&tmbuf, &t) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
tm = localtime_r(&t, &tmbuf);
-#elif defined(HAVE__LOCALTIME64_S)
- tmptime = t;
- terr = _localtime64_s(&tmbuf, &tmptime);
- if (terr)
- tm = NULL;
- else
- tm = &tmbuf;
#else
tm = localtime(&t);
#endif
@@ -1856,9 +1949,11 @@ read_data_stored(struct archive_read *a, const void **buff, size_t *size,
*size = 0;
*offset = rar->offset;
if (rar->file_crc != rar->crc_calculated) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"File CRC error");
return (ARCHIVE_FATAL);
+#endif
}
rar->entry_eof = 1;
return (ARCHIVE_EOF);
@@ -1886,13 +1981,13 @@ read_data_stored(struct archive_read *a, const void **buff, size_t *size,
static int
read_data_compressed(struct archive_read *a, const void **buff, size_t *size,
- int64_t *offset, size_t looper)
+ int64_t *offset, size_t looper)
{
if (looper++ > MAX_COMPRESS_DEPTH)
return (ARCHIVE_FATAL);
struct rar *rar;
- int64_t start, end, actualend;
+ int64_t start, end;
size_t bs;
int ret = (ARCHIVE_OK), sym, code, lzss_offset, length, i;
@@ -1901,6 +1996,33 @@ read_data_compressed(struct archive_read *a, const void **buff, size_t *size,
do {
if (!rar->valid)
return (ARCHIVE_FATAL);
+
+ if (rar->filters.bytes_ready > 0)
+ {
+ /* Flush unp_buffer first */
+ if (rar->unp_offset > 0)
+ {
+ *buff = rar->unp_buffer;
+ *size = rar->unp_offset;
+ rar->unp_offset = 0;
+ *offset = rar->offset_outgoing;
+ rar->offset_outgoing += *size;
+ }
+ else
+ {
+ *buff = rar->filters.bytes;
+ *size = rar->filters.bytes_ready;
+
+ rar->offset += *size;
+ *offset = rar->offset_outgoing;
+ rar->offset_outgoing += *size;
+
+ rar->filters.bytes_ready -= *size;
+ rar->filters.bytes += *size;
+ }
+ goto ending_block;
+ }
+
if (rar->ppmd_eod ||
(rar->dictionary_size && rar->offset >= rar->unp_size))
{
@@ -1922,9 +2044,11 @@ read_data_compressed(struct archive_read *a, const void **buff, size_t *size,
*size = 0;
*offset = rar->offset;
if (rar->file_crc != rar->crc_calculated) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"File CRC error");
return (ARCHIVE_FATAL);
+#endif
}
rar->entry_eof = 1;
return (ARCHIVE_EOF);
@@ -1936,7 +2060,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(a, buff, rar->offset, (int)bs);
+ ret = copy_from_lzss_window_to_unp(a, buff, rar->offset, (int)bs);
if (ret != ARCHIVE_OK)
return (ret);
rar->offset += bs;
@@ -1954,6 +2078,13 @@ read_data_compressed(struct archive_read *a, const void **buff, size_t *size,
continue;
}
+ if (rar->filters.lastend == rar->filters.filterstart)
+ {
+ if (!run_filters(a))
+ return (ARCHIVE_FATAL);
+ continue;
+ }
+
if (!rar->br.next_in &&
(ret = rar_br_preparation(a, &(rar->br))) < ARCHIVE_WARN)
return (ret);
@@ -2045,13 +2176,30 @@ read_data_compressed(struct archive_read *a, const void **buff, size_t *size,
{
start = rar->offset;
end = start + rar->dictionary_size;
- rar->filterstart = INT64_MAX;
- if ((actualend = expand(a, end)) < 0)
- return ((int)actualend);
+ /* We don't want to overflow the window and overwrite data that we write
+ * at 'start'. Therefore, reduce the end length by the maximum match size,
+ * which is 260 bytes. You can compute this maximum by looking at the
+ * definition of 'expand', in particular when 'symbol >= 271'. */
+ /* NOTE: It's possible for 'dictionary_size' to be less than this 260
+ * value, however that will only be the case when 'unp_size' is small,
+ * which should only happen when the entry size is small and there's no
+ * risk of overflowing the buffer */
+ if (rar->dictionary_size > 260) {
+ end -= 260;
+ }
+
+ if (rar->filters.filterstart < end) {
+ end = rar->filters.filterstart;
+ }
+
+ ret = expand(a, &end);
+ if (ret != ARCHIVE_OK)
+ return (ret);
- rar->bytes_uncopied = actualend - start;
- if (rar->bytes_uncopied == 0) {
+ rar->bytes_uncopied = end - start;
+ rar->filters.lastend = end;
+ if (rar->filters.lastend != rar->filters.filterstart && rar->bytes_uncopied == 0) {
/* Broken RAR files cause this case.
* NOTE: If this case were possible on a normal RAR file
* we would find out where it was actually bad and
@@ -2065,7 +2213,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(a, buff, rar->offset, (int)bs);
+ ret = copy_from_lzss_window_to_unp(a, buff, rar->offset, (int)bs);
if (ret != ARCHIVE_OK)
return (ret);
rar->offset += bs;
@@ -2080,6 +2228,7 @@ read_data_compressed(struct archive_read *a, const void **buff, size_t *size,
*size = rar->unp_buffer_size;
*offset = rar->offset_outgoing;
rar->offset_outgoing += *size;
+ending_block:
/* Calculate File CRC. */
rar->crc_calculated = crc32(rar->crc_calculated, *buff, (unsigned)*size);
return ret;
@@ -2691,8 +2840,8 @@ make_table_recurse(struct archive_read *a, struct huffman_code *code, int node,
return ret;
}
-static int64_t
-expand(struct archive_read *a, int64_t end)
+static int
+expand(struct archive_read *a, int64_t *end)
{
static const unsigned char lengthbases[] =
{ 0, 1, 2, 3, 4, 5, 6,
@@ -2739,25 +2888,22 @@ expand(struct archive_read *a, int64_t end)
struct rar *rar = (struct rar *)(a->format->data);
struct rar_br *br = &(rar->br);
- if (rar->filterstart < end)
- end = rar->filterstart;
+ if (rar->filters.filterstart < *end)
+ *end = rar->filters.filterstart;
while (1)
{
- if (rar->output_last_match &&
- lzss_position(&rar->lzss) + rar->lastlength <= end)
- {
- lzss_emit_match(rar, rar->lastoffset, rar->lastlength);
- rar->output_last_match = 0;
+ if(lzss_position(&rar->lzss) >= *end) {
+ return (ARCHIVE_OK);
}
- if(rar->is_ppmd_block || rar->output_last_match ||
- lzss_position(&rar->lzss) >= end)
- return lzss_position(&rar->lzss);
+ if(rar->is_ppmd_block) {
+ *end = lzss_position(&rar->lzss);
+ return (ARCHIVE_OK);
+ }
if ((symbol = read_next_symbol(a, &rar->maincode)) < 0)
return (ARCHIVE_FATAL);
- rar->output_last_match = 0;
if (symbol < 256)
{
@@ -2778,7 +2924,8 @@ expand(struct archive_read *a, int64_t end)
goto truncated_data;
rar->start_new_table = rar_br_bits(br, 1);
rar_br_consume(br, 1);
- return lzss_position(&rar->lzss);
+ *end = lzss_position(&rar->lzss);
+ return (ARCHIVE_OK);
}
else
{
@@ -2789,9 +2936,9 @@ expand(struct archive_read *a, int64_t end)
}
else if(symbol==257)
{
- archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "Parsing filters is unsupported.");
- return (ARCHIVE_FAILED);
+ if (!read_filter(a, end))
+ return (ARCHIVE_FATAL);
+ continue;
}
else if(symbol==258)
{
@@ -2864,7 +3011,7 @@ expand(struct archive_read *a, int64_t end)
goto truncated_data;
offs += rar_br_bits(br, offsetbits[offssymbol] - 4) << 4;
rar_br_consume(br, offsetbits[offssymbol] - 4);
- }
+ }
if(rar->numlowoffsetrepeats > 0)
{
@@ -2908,7 +3055,8 @@ expand(struct archive_read *a, int64_t end)
rar->lastoffset = offs;
rar->lastlength = len;
- rar->output_last_match = 1;
+
+ lzss_emit_match(rar, rar->lastoffset, rar->lastlength);
}
truncated_data:
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
@@ -2922,8 +3070,31 @@ bad_data:
}
static int
-copy_from_lzss_window(struct archive_read *a, const void **buffer,
- int64_t startpos, int length)
+copy_from_lzss_window(struct archive_read *a, void *buffer,
+ int64_t startpos, int length)
+{
+ int windowoffs, firstpart;
+ struct rar *rar = (struct rar *)(a->format->data);
+
+ windowoffs = lzss_offset_for_position(&rar->lzss, startpos);
+ 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) {
+ memcpy(buffer, &rar->lzss.window[windowoffs], firstpart);
+ memcpy(buffer, &rar->lzss.window[0], length - firstpart);
+ } else {
+ memcpy(buffer, &rar->lzss.window[windowoffs], length);
+ }
+ return (ARCHIVE_OK);
+}
+
+static int
+copy_from_lzss_window_to_unp(struct archive_read *a, const void **buffer,
+ int64_t startpos, int length)
{
int windowoffs, firstpart;
struct rar *rar = (struct rar *)(a->format->data);
@@ -3003,3 +3174,643 @@ rar_read_ahead(struct archive_read *a, size_t min, ssize_t *avail)
}
return h;
}
+
+static int
+parse_filter(struct archive_read *a, const uint8_t *bytes, uint16_t length, uint8_t flags)
+{
+ struct rar *rar = (struct rar *)(a->format->data);
+ struct rar_filters *filters = &rar->filters;
+
+ struct memory_bit_reader br = { 0 };
+ struct rar_program_code *prog;
+ struct rar_filter *filter, **nextfilter;
+
+ uint32_t numprogs, num, blocklength, globaldatalen;
+ uint8_t *globaldata;
+ size_t blockstartpos;
+ uint32_t registers[8] = { 0 };
+ uint32_t i;
+
+ br.bytes = bytes;
+ br.length = length;
+
+ numprogs = 0;
+ for (prog = filters->progs; prog; prog = prog->next)
+ numprogs++;
+
+ if ((flags & 0x80))
+ {
+ num = membr_next_rarvm_number(&br);
+ if (num == 0)
+ {
+ delete_filter(filters->stack);
+ filters->stack = NULL;
+ delete_program_code(filters->progs);
+ filters->progs = NULL;
+ }
+ else
+ num--;
+ if (num > numprogs) {
+ return 0;
+ }
+ filters->lastfilternum = num;
+ }
+ else
+ num = filters->lastfilternum;
+
+ prog = filters->progs;
+ for (i = 0; i < num; i++)
+ prog = prog->next;
+ if (prog)
+ prog->usagecount++;
+
+ blockstartpos = membr_next_rarvm_number(&br) + (size_t)lzss_position(&rar->lzss);
+ if ((flags & 0x40))
+ blockstartpos += 258;
+ if ((flags & 0x20))
+ blocklength = membr_next_rarvm_number(&br);
+ else
+ blocklength = prog ? prog->oldfilterlength : 0;
+
+ registers[3] = PROGRAM_SYSTEM_GLOBAL_ADDRESS;
+ registers[4] = blocklength;
+ registers[5] = prog ? prog->usagecount : 0;
+ registers[7] = VM_MEMORY_SIZE;
+
+ if ((flags & 0x10))
+ {
+ uint8_t mask = (uint8_t)membr_bits(&br, 7);
+ for (i = 0; i < 7; i++)
+ if ((mask & (1 << i)))
+ registers[i] = membr_next_rarvm_number(&br);
+ }
+
+ if (!prog)
+ {
+ uint32_t len = membr_next_rarvm_number(&br);
+ uint8_t *bytecode;
+ struct rar_program_code **next;
+
+ if (len == 0 || len > 0x10000)
+ return 0;
+ bytecode = malloc(len);
+ if (!bytecode)
+ return 0;
+ for (i = 0; i < len; i++)
+ bytecode[i] = (uint8_t)membr_bits(&br, 8);
+ prog = compile_program(bytecode, len);
+ if (!prog) {
+ free(bytecode);
+ return 0;
+ }
+ free(bytecode);
+ next = &filters->progs;
+ while (*next)
+ next = &(*next)->next;
+ *next = prog;
+ }
+ prog->oldfilterlength = blocklength;
+
+ globaldata = NULL;
+ globaldatalen = 0;
+ if ((flags & 0x08))
+ {
+ globaldatalen = membr_next_rarvm_number(&br);
+ if (globaldatalen > PROGRAM_USER_GLOBAL_SIZE)
+ return 0;
+ globaldata = malloc(globaldatalen + PROGRAM_SYSTEM_GLOBAL_SIZE);
+ if (!globaldata)
+ return 0;
+ for (i = 0; i < globaldatalen; i++)
+ globaldata[i + PROGRAM_SYSTEM_GLOBAL_SIZE] = (uint8_t)membr_bits(&br, 8);
+ }
+
+ if (br.at_eof)
+ {
+ free(globaldata);
+ return 0;
+ }
+
+ filter = create_filter(prog, globaldata, globaldatalen, registers, blockstartpos, blocklength);
+ free(globaldata);
+ if (!filter)
+ return 0;
+
+ for (i = 0; i < 7; i++)
+ archive_le32enc(&filter->globaldata[i * 4], registers[i]);
+ archive_le32enc(&filter->globaldata[0x1C], blocklength);
+ archive_le32enc(&filter->globaldata[0x20], 0);
+ archive_le32enc(&filter->globaldata[0x2C], prog->usagecount);
+
+ nextfilter = &filters->stack;
+ while (*nextfilter)
+ nextfilter = &(*nextfilter)->next;
+ *nextfilter = filter;
+
+ if (!filters->stack->next)
+ filters->filterstart = blockstartpos;
+
+ return 1;
+}
+
+static struct rar_filter *
+create_filter(struct rar_program_code *prog, const uint8_t *globaldata, uint32_t globaldatalen, uint32_t registers[8], size_t startpos, uint32_t length)
+{
+ struct rar_filter *filter;
+
+ filter = calloc(1, sizeof(*filter));
+ if (!filter)
+ return NULL;
+ filter->prog = prog;
+ filter->globaldatalen = globaldatalen > PROGRAM_SYSTEM_GLOBAL_SIZE ? globaldatalen : PROGRAM_SYSTEM_GLOBAL_SIZE;
+ filter->globaldata = calloc(1, filter->globaldatalen);
+ if (!filter->globaldata)
+ return NULL;
+ if (globaldata)
+ memcpy(filter->globaldata, globaldata, globaldatalen);
+ if (registers)
+ memcpy(filter->initialregisters, registers, sizeof(filter->initialregisters));
+ filter->blockstartpos = startpos;
+ filter->blocklength = length;
+
+ return filter;
+}
+
+static int
+run_filters(struct archive_read *a)
+{
+ struct rar *rar = (struct rar *)(a->format->data);
+ struct rar_filters *filters = &rar->filters;
+ struct rar_filter *filter = filters->stack;
+ struct rar_filter *f;
+ size_t start, end;
+ int64_t tend;
+ uint32_t lastfilteraddress;
+ uint32_t lastfilterlength;
+ int ret;
+
+ if (filters == NULL || filter == NULL)
+ return (0);
+
+ start = filters->filterstart;
+ end = start + filter->blocklength;
+
+ filters->filterstart = INT64_MAX;
+ tend = (int64_t)end;
+ ret = expand(a, &tend);
+ if (ret != ARCHIVE_OK)
+ return 0;
+
+ /* Check if filter stack was modified in expand() */
+ ret = ARCHIVE_FATAL;
+ f = filters->stack;
+ while (f)
+ {
+ if (f == filter)
+ {
+ ret = ARCHIVE_OK;
+ break;
+ }
+ f = f->next;
+ }
+ if (ret != ARCHIVE_OK)
+ return 0;
+
+ if (tend < 0)
+ return 0;
+ end = (size_t)tend;
+ if (end != start + filter->blocklength)
+ return 0;
+
+ if (!filters->vm)
+ {
+ filters->vm = calloc(1, sizeof(*filters->vm));
+ if (!filters->vm)
+ 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))
+ return 0;
+
+ lastfilteraddress = filter->filteredblockaddress;
+ lastfilterlength = filter->filteredblocklength;
+ filters->stack = filter->next;
+ filter->next = NULL;
+ delete_filter(filter);
+
+ 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))
+ return 0;
+
+ lastfilteraddress = filter->filteredblockaddress;
+ lastfilterlength = filter->filteredblocklength;
+ filters->stack = filter->next;
+ filter->next = NULL;
+ delete_filter(filter);
+ }
+
+ if (filters->stack)
+ {
+ if (filters->stack->blockstartpos < end)
+ return 0;
+ filters->filterstart = filters->stack->blockstartpos;
+ }
+
+ filters->lastend = end;
+ filters->bytes = &filters->vm->memory[lastfilteraddress];
+ filters->bytes_ready = lastfilterlength;
+
+ return 1;
+}
+
+static struct rar_program_code *
+compile_program(const uint8_t *bytes, size_t length)
+{
+ struct memory_bit_reader br = { 0 };
+ struct rar_program_code *prog;
+ // uint32_t instrcount = 0;
+ uint8_t xor;
+ size_t i;
+
+ xor = 0;
+ for (i = 1; i < length; i++)
+ xor ^= bytes[i];
+ if (!length || xor != bytes[0])
+ return NULL;
+
+ br.bytes = bytes;
+ br.length = length;
+ br.offset = 1;
+
+ prog = calloc(1, sizeof(*prog));
+ if (!prog)
+ return NULL;
+ prog->fingerprint = crc32(0, bytes, (unsigned int)length) | ((uint64_t)length << 32);
+
+ if (membr_bits(&br, 1))
+ {
+ prog->staticdatalen = membr_next_rarvm_number(&br) + 1;
+ prog->staticdata = malloc(prog->staticdatalen);
+ if (!prog->staticdata)
+ {
+ delete_program_code(prog);
+ return NULL;
+ }
+ for (i = 0; i < prog->staticdatalen; i++)
+ prog->staticdata[i] = (uint8_t)membr_bits(&br, 8);
+ }
+
+ return prog;
+}
+
+static void
+delete_filter(struct rar_filter *filter)
+{
+ while (filter)
+ {
+ struct rar_filter *next = filter->next;
+ free(filter->globaldata);
+ free(filter);
+ filter = next;
+ }
+}
+
+static void
+clear_filters(struct rar_filters *filters)
+{
+ delete_filter(filters->stack);
+ delete_program_code(filters->progs);
+ free(filters->vm);
+}
+
+static void
+delete_program_code(struct rar_program_code *prog)
+{
+ while (prog)
+ {
+ struct rar_program_code *next = prog->next;
+ free(prog->staticdata);
+ free(prog->globalbackup);
+ free(prog);
+ prog = next;
+ }
+}
+
+static uint32_t
+membr_next_rarvm_number(struct memory_bit_reader *br)
+{
+ uint32_t val;
+ switch (membr_bits(br, 2))
+ {
+ case 0:
+ return membr_bits(br, 4);
+ case 1:
+ val = membr_bits(br, 8);
+ if (val >= 16)
+ return val;
+ return 0xFFFFFF00 | (val << 4) | membr_bits(br, 4);
+ case 2:
+ return membr_bits(br, 16);
+ default:
+ return membr_bits(br, 32);
+ }
+}
+
+static inline uint32_t
+membr_bits(struct memory_bit_reader *br, int bits)
+{
+ if (bits > br->available && (br->at_eof || !membr_fill(br, bits)))
+ return 0;
+ return (uint32_t)((br->bits >> (br->available -= bits)) & (((uint64_t)1 << bits) - 1));
+}
+
+static int
+membr_fill(struct memory_bit_reader *br, int bits)
+{
+ while (br->available < bits && br->offset < br->length)
+ {
+ br->bits = (br->bits << 8) | br->bytes[br->offset++];
+ br->available += 8;
+ }
+ if (bits > br->available)
+ {
+ br->at_eof = 1;
+ return 0;
+ }
+ return 1;
+}
+
+static int
+read_filter(struct archive_read *a, int64_t *end)
+{
+ struct rar *rar = (struct rar *)(a->format->data);
+ uint8_t flags, val, *code;
+ uint16_t length, i;
+
+ if (!rar_decode_byte(a, &flags))
+ return 0;
+ length = (flags & 0x07) + 1;
+ if (length == 7)
+ {
+ if (!rar_decode_byte(a, &val))
+ return 0;
+ length = val + 7;
+ }
+ else if (length == 8)
+ {
+ if (!rar_decode_byte(a, &val))
+ return 0;
+ length = val << 8;
+ if (!rar_decode_byte(a, &val))
+ return 0;
+ length |= val;
+ }
+
+ code = malloc(length);
+ if (!code)
+ return 0;
+ for (i = 0; i < length; i++)
+ {
+ if (!rar_decode_byte(a, &code[i]))
+ {
+ free(code);
+ return 0;
+ }
+ }
+ if (!parse_filter(a, code, length, flags))
+ {
+ free(code);
+ return 0;
+ }
+ free(code);
+
+ if (rar->filters.filterstart < *end)
+ *end = rar->filters.filterstart;
+
+ return 1;
+}
+
+static int
+execute_filter_delta(struct rar_filter *filter, struct rar_virtual_machine *vm)
+{
+ uint32_t length = filter->initialregisters[4];
+ uint32_t numchannels = filter->initialregisters[0];
+ uint8_t *src, *dst;
+ uint32_t i, idx;
+
+ if (length > PROGRAM_WORK_SIZE / 2)
+ return 0;
+
+ src = &vm->memory[0];
+ dst = &vm->memory[length];
+ for (i = 0; i < numchannels; i++)
+ {
+ uint8_t lastbyte = 0;
+ for (idx = i; idx < length; idx += numchannels)
+ {
+ /*
+ * 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;
+ lastbyte = dst[idx] = lastbyte - *src++;
+ }
+ }
+
+ filter->filteredblockaddress = length;
+ filter->filteredblocklength = length;
+
+ return 1;
+}
+
+static int
+execute_filter_e8(struct rar_filter *filter, struct rar_virtual_machine *vm, size_t pos, int e9also)
+{
+ uint32_t length = filter->initialregisters[4];
+ uint32_t filesize = 0x1000000;
+ uint32_t i;
+
+ if (length > PROGRAM_WORK_SIZE || length <= 4)
+ return 0;
+
+ for (i = 0; i <= length - 5; i++)
+ {
+ if (vm->memory[i] == 0xE8 || (e9also && vm->memory[i] == 0xE9))
+ {
+ 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)
+ vm_write_32(vm, i + 1, address + filesize);
+ else if (address >= 0 && (uint32_t)address < filesize)
+ vm_write_32(vm, i + 1, address - currpos);
+ i += 4;
+ }
+ }
+
+ filter->filteredblockaddress = 0;
+ filter->filteredblocklength = length;
+
+ return 1;
+}
+
+static int
+execute_filter_rgb(struct rar_filter *filter, struct rar_virtual_machine *vm)
+{
+ uint32_t stride = filter->initialregisters[0];
+ uint32_t byteoffset = filter->initialregisters[1];
+ uint32_t blocklength = filter->initialregisters[4];
+ uint8_t *src, *dst;
+ uint32_t i, j;
+
+ if (blocklength > PROGRAM_WORK_SIZE / 2 || stride > blocklength)
+ return 0;
+
+ src = &vm->memory[0];
+ dst = &vm->memory[blocklength];
+ for (i = 0; i < 3; i++) {
+ uint8_t byte = 0;
+ uint8_t *prev = dst + i - stride;
+ for (j = i; j < blocklength; j += 3)
+ {
+ if (prev >= dst)
+ {
+ uint32_t delta1 = abs(prev[3] - prev[0]);
+ uint32_t delta2 = abs(byte - prev[0]);
+ uint32_t delta3 = abs(prev[3] - prev[0] + byte - prev[0]);
+ if (delta1 > delta2 || delta1 > delta3)
+ byte = delta2 <= delta3 ? prev[3] : prev[0];
+ }
+ byte -= *src++;
+ dst[j] = byte;
+ prev += 3;
+ }
+ }
+ for (i = byteoffset; i < blocklength - 2; i += 3)
+ {
+ dst[i] += dst[i + 1];
+ dst[i + 2] += dst[i + 1];
+ }
+
+ filter->filteredblockaddress = blocklength;
+ filter->filteredblocklength = blocklength;
+
+ return 1;
+}
+
+static int
+execute_filter_audio(struct rar_filter *filter, struct rar_virtual_machine *vm)
+{
+ uint32_t length = filter->initialregisters[4];
+ uint32_t numchannels = filter->initialregisters[0];
+ uint8_t *src, *dst;
+ uint32_t i, j;
+
+ if (length > PROGRAM_WORK_SIZE / 2)
+ return 0;
+
+ src = &vm->memory[0];
+ dst = &vm->memory[length];
+ for (i = 0; i < numchannels; i++)
+ {
+ struct audio_state state;
+ memset(&state, 0, sizeof(state));
+ for (j = i; j < length; j += numchannels)
+ {
+ /*
+ * 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;
+
+ int8_t delta = (int8_t)*src++;
+ uint8_t predbyte, byte;
+ int prederror;
+ state.delta[2] = state.delta[1];
+ state.delta[1] = state.lastdelta - state.delta[0];
+ state.delta[0] = state.lastdelta;
+ predbyte = ((8 * state.lastbyte + state.weight[0] * state.delta[0] + state.weight[1] * state.delta[1] + state.weight[2] * state.delta[2]) >> 3) & 0xFF;
+ byte = (predbyte - delta) & 0xFF;
+ prederror = delta << 3;
+ state.error[0] += abs(prederror);
+ state.error[1] += abs(prederror - state.delta[0]); state.error[2] += abs(prederror + state.delta[0]);
+ state.error[3] += abs(prederror - state.delta[1]); state.error[4] += abs(prederror + state.delta[1]);
+ state.error[5] += abs(prederror - state.delta[2]); state.error[6] += abs(prederror + state.delta[2]);
+ state.lastdelta = (int8_t)(byte - state.lastbyte);
+ dst[j] = state.lastbyte = byte;
+ if (!(state.count++ & 0x1F))
+ {
+ uint8_t k, idx = 0;
+ for (k = 1; k < 7; k++)
+ {
+ if (state.error[k] < state.error[idx])
+ idx = k;
+ }
+ memset(state.error, 0, sizeof(state.error));
+ switch (idx)
+ {
+ case 1: if (state.weight[0] >= -16) state.weight[0]--; break;
+ case 2: if (state.weight[0] < 16) state.weight[0]++; break;
+ case 3: if (state.weight[1] >= -16) state.weight[1]--; break;
+ case 4: if (state.weight[1] < 16) state.weight[1]++; break;
+ case 5: if (state.weight[2] >= -16) state.weight[2]--; break;
+ case 6: if (state.weight[2] < 16) state.weight[2]++; break;
+ }
+ }
+ }
+ }
+
+ filter->filteredblockaddress = length;
+ filter->filteredblocklength = length;
+
+ return 1;
+}
+
+
+static int
+execute_filter(struct archive_read *a, struct rar_filter *filter, struct rar_virtual_machine *vm, size_t pos)
+{
+ if (filter->prog->fingerprint == 0x1D0E06077D)
+ return execute_filter_delta(filter, vm);
+ if (filter->prog->fingerprint == 0x35AD576887)
+ return execute_filter_e8(filter, vm, pos, 0);
+ if (filter->prog->fingerprint == 0x393CD7E57E)
+ return execute_filter_e8(filter, vm, pos, 1);
+ if (filter->prog->fingerprint == 0x951C2C5DC8)
+ return execute_filter_rgb(filter, vm);
+ if (filter->prog->fingerprint == 0xD8BC85E701)
+ return execute_filter_audio(filter, vm);
+
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, "No support for RAR VM program filter");
+ return 0;
+}
+
+static int
+rar_decode_byte(struct archive_read *a, uint8_t *byte)
+{
+ struct rar *rar = (struct rar *)(a->format->data);
+ struct rar_br *br = &(rar->br);
+ if (!rar_br_read_ahead(a, br, 8))
+ return 0;
+ *byte = (uint8_t)rar_br_bits(br, 8);
+ rar_br_consume(br, 8);
+ return 1;
+}
+
+static inline void
+vm_write_32(struct rar_virtual_machine* vm, size_t offset, uint32_t u32)
+{
+ archive_le32enc(vm->memory + offset, u32);
+}
+
+static inline uint32_t
+vm_read_32(struct rar_virtual_machine* vm, size_t offset)
+{
+ return archive_le32dec(vm->memory + offset);
+}
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_rar5.c b/contrib/libarchive/libarchive/archive_read_support_format_rar5.c
index 5d62d16ee00f..e8846a5b0d0d 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_rar5.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_rar5.c
@@ -495,6 +495,11 @@ uint8_t bf_is_table_present(const struct compressed_block_header* hdr) {
return (hdr->block_flags_u8 >> 7) & 1;
}
+static inline
+uint8_t bf_is_last_block(const struct compressed_block_header* hdr) {
+ return (hdr->block_flags_u8 >> 6) & 1;
+}
+
static inline struct rar5* get_context(struct archive_read* a) {
return (struct rar5*) a->format->data;
}
@@ -632,7 +637,7 @@ static int run_arm_filter(struct rar5* rar, struct filter_info* flt) {
/* 0xEB = ARM's BL (branch + link) instruction. */
offset = read_filter_data(rar,
(rar->cstate.solid_offset + flt->block_start + i) &
- rar->cstate.window_mask) & 0x00ffffff;
+ (uint32_t)rar->cstate.window_mask) & 0x00ffffff;
offset -= (uint32_t) ((i + flt->block_start) / 4);
offset = (offset & 0x00ffffff) | 0xeb000000;
@@ -1012,7 +1017,16 @@ static int read_var_sized(struct archive_read* a, size_t* pvalue,
return ret;
}
-static int read_bits_32(struct rar5* rar, const uint8_t* p, uint32_t* value) {
+static int read_bits_32(struct archive_read* a, struct rar5* rar,
+ const uint8_t* p, uint32_t* value)
+{
+ if(rar->bits.in_addr >= rar->cstate.cur_block_size) {
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_PROGRAMMER,
+ "Premature end of stream during extraction of data (#1)");
+ return ARCHIVE_FATAL;
+ }
+
uint32_t bits = ((uint32_t) p[rar->bits.in_addr]) << 24;
bits |= p[rar->bits.in_addr + 1] << 16;
bits |= p[rar->bits.in_addr + 2] << 8;
@@ -1023,7 +1037,16 @@ static int read_bits_32(struct rar5* rar, const uint8_t* p, uint32_t* value) {
return ARCHIVE_OK;
}
-static int read_bits_16(struct rar5* rar, const uint8_t* p, uint16_t* value) {
+static int read_bits_16(struct archive_read* a, struct rar5* rar,
+ const uint8_t* p, uint16_t* value)
+{
+ if(rar->bits.in_addr >= rar->cstate.cur_block_size) {
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_PROGRAMMER,
+ "Premature end of stream during extraction of data (#2)");
+ return ARCHIVE_FATAL;
+ }
+
int bits = (int) ((uint32_t) p[rar->bits.in_addr]) << 16;
bits |= (int) p[rar->bits.in_addr + 1] << 8;
bits |= (int) p[rar->bits.in_addr + 2];
@@ -1039,8 +1062,8 @@ static void skip_bits(struct rar5* rar, int bits) {
}
/* n = up to 16 */
-static int read_consume_bits(struct rar5* rar, const uint8_t* p, int n,
- int* value)
+static int read_consume_bits(struct archive_read* a, struct rar5* rar,
+ const uint8_t* p, int n, int* value)
{
uint16_t v;
int ret, num;
@@ -1051,7 +1074,7 @@ static int read_consume_bits(struct rar5* rar, const uint8_t* p, int n,
return ARCHIVE_FATAL;
}
- ret = read_bits_16(rar, p, &v);
+ ret = read_bits_16(a, rar, p, &v);
if(ret != ARCHIVE_OK)
return ret;
@@ -1099,6 +1122,44 @@ static int bid_standard(struct archive_read* a) {
return -1;
}
+static int bid_sfx(struct archive_read *a)
+{
+ const char *p;
+
+ if ((p = __archive_read_ahead(a, 7, NULL)) == NULL)
+ return -1;
+
+ if ((p[0] == 'M' && p[1] == 'Z') || memcmp(p, "\x7F\x45LF", 4) == 0) {
+ /* This is a PE file */
+ char signature[sizeof(rar5_signature_xor)];
+ ssize_t offset = 0x10000;
+ ssize_t window = 4096;
+ ssize_t bytes_avail;
+
+ rar5_signature(signature);
+
+ while (offset + window <= (1024 * 512)) {
+ const char *buff = __archive_read_ahead(a, offset + window, &bytes_avail);
+ if (buff == NULL) {
+ /* Remaining bytes are less than window. */
+ window >>= 1;
+ if (window < 0x40)
+ return 0;
+ continue;
+ }
+ p = buff + offset;
+ while (p + 8 < buff + bytes_avail) {
+ if (memcmp(p, signature, sizeof(signature)) == 0)
+ return 30;
+ p += 0x10;
+ }
+ offset = p - buff;
+ }
+ }
+
+ return 0;
+}
+
static int rar5_bid(struct archive_read* a, int best_bid) {
int my_bid;
@@ -1109,6 +1170,10 @@ static int rar5_bid(struct archive_read* a, int best_bid) {
if(my_bid > -1) {
return my_bid;
}
+ my_bid = bid_sfx(a);
+ if (my_bid > -1) {
+ return my_bid;
+ }
return -1;
}
@@ -1712,14 +1777,29 @@ static int process_head_file(struct archive_read* a, struct rar5* rar,
}
}
- /* If we're currently switching volumes, ignore the new definition of
- * window_size. */
- if(rar->cstate.switch_multivolume == 0) {
- /* Values up to 64M should fit into ssize_t on every
- * architecture. */
- rar->cstate.window_size = (ssize_t) window_size;
+ if(rar->cstate.window_size < (ssize_t) window_size &&
+ rar->cstate.window_buf)
+ {
+ /* 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);
+
+ if(!new_window_buf) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
+ "Not enough memory when trying to realloc the window "
+ "buffer.");
+ return ARCHIVE_FATAL;
+ }
+
+ rar->cstate.window_buf = new_window_buf;
}
+ /* Values up to 64M should fit into ssize_t on every
+ * architecture. */
+ rar->cstate.window_size = (ssize_t) window_size;
+
if(rar->file.solid > 0 && rar->file.solid_window_size == 0) {
/* Solid files have to have the same window_size across
whole archive. Remember the window_size parameter
@@ -2273,6 +2353,62 @@ static int skip_base_block(struct archive_read* a) {
return ret;
}
+static int try_skip_sfx(struct archive_read *a)
+{
+ const char *p;
+
+ if ((p = __archive_read_ahead(a, 7, NULL)) == NULL)
+ return ARCHIVE_EOF;
+
+ if ((p[0] == 'M' && p[1] == 'Z') || memcmp(p, "\x7F\x45LF", 4) == 0)
+ {
+ char signature[sizeof(rar5_signature_xor)];
+ const void *h;
+ const char *q;
+ size_t skip, total = 0;
+ ssize_t bytes, window = 4096;
+
+ rar5_signature(signature);
+
+ while (total + window <= (1024 * 512)) {
+ h = __archive_read_ahead(a, window, &bytes);
+ if (h == NULL) {
+ /* Remaining bytes are less than window. */
+ window >>= 1;
+ if (window < 0x40)
+ goto fatal;
+ continue;
+ }
+ if (bytes < 0x40)
+ goto fatal;
+ p = h;
+ q = p + bytes;
+
+ /*
+ * Scan ahead until we find something that looks
+ * like the RAR header.
+ */
+ while (p + 8 < q) {
+ if (memcmp(p, signature, sizeof(signature)) == 0) {
+ skip = p - (const char *)h;
+ __archive_read_consume(a, skip);
+ return (ARCHIVE_OK);
+ }
+ p += 0x10;
+ }
+ skip = p - (const char *)h;
+ __archive_read_consume(a, skip);
+ total += skip;
+ }
+ }
+
+ return ARCHIVE_OK;
+fatal:
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Couldn't find out RAR header");
+ return (ARCHIVE_FATAL);
+}
+
static int rar5_read_header(struct archive_read *a,
struct archive_entry *entry)
{
@@ -2281,6 +2417,8 @@ static int rar5_read_header(struct archive_read *a,
if(rar->header_initialized == 0) {
init_header(a);
+ if ((ret = try_skip_sfx(a)) < ARCHIVE_WARN)
+ return ret;
rar->header_initialized = 1;
}
@@ -2342,7 +2480,7 @@ static void update_crc(struct rar5* rar, const uint8_t* p, size_t to_read) {
* `stored_crc32` info filled in. */
if(rar->file.stored_crc32 > 0) {
rar->file.calculated_crc32 =
- crc32(rar->file.calculated_crc32, p, to_read);
+ crc32(rar->file.calculated_crc32, p, (unsigned int)to_read);
}
/* Check if the file uses an optional BLAKE2sp checksum
@@ -2425,13 +2563,13 @@ static int create_decode_tables(uint8_t* bit_length,
static int decode_number(struct archive_read* a, struct decode_table* table,
const uint8_t* p, uint16_t* num)
{
- int i, bits, dist;
+ int i, bits, dist, ret;
uint16_t bitfield;
uint32_t pos;
struct rar5* rar = get_context(a);
- if(ARCHIVE_OK != read_bits_16(rar, p, &bitfield)) {
- return ARCHIVE_EOF;
+ if(ARCHIVE_OK != (ret = read_bits_16(a, rar, p, &bitfield))) {
+ return ret;
}
bitfield &= 0xfffe;
@@ -2537,14 +2675,6 @@ static int parse_tables(struct archive_read* a, struct rar5* rar,
for(i = 0; i < HUFF_TABLE_SIZE;) {
uint16_t num;
- if((rar->bits.in_addr + 6) >= rar->cstate.cur_block_size) {
- /* Truncated data, can't continue. */
- archive_set_error(&a->archive,
- ARCHIVE_ERRNO_FILE_FORMAT,
- "Truncated data in huffman tables (#2)");
- return ARCHIVE_FATAL;
- }
-
ret = decode_number(a, &rar->cstate.bd, p, &num);
if(ret != ARCHIVE_OK) {
archive_set_error(&a->archive,
@@ -2561,8 +2691,8 @@ static int parse_tables(struct archive_read* a, struct rar5* rar,
/* 16..17: repeat previous code */
uint16_t n;
- if(ARCHIVE_OK != read_bits_16(rar, p, &n))
- return ARCHIVE_EOF;
+ if(ARCHIVE_OK != (ret = read_bits_16(a, rar, p, &n)))
+ return ret;
if(num == 16) {
n >>= 13;
@@ -2590,8 +2720,8 @@ static int parse_tables(struct archive_read* a, struct rar5* rar,
/* other codes: fill with zeroes `n` times */
uint16_t n;
- if(ARCHIVE_OK != read_bits_16(rar, p, &n))
- return ARCHIVE_EOF;
+ if(ARCHIVE_OK != (ret = read_bits_16(a, rar, p, &n)))
+ return ret;
if(num == 18) {
n >>= 13;
@@ -2696,33 +2826,35 @@ static int parse_block_header(struct archive_read* a, const uint8_t* p,
^ (uint8_t) (*block_size >> 16);
if(calculated_cksum != hdr->block_cksum) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"Block checksum error: got 0x%x, expected 0x%x",
hdr->block_cksum, calculated_cksum);
return ARCHIVE_FATAL;
+#endif
}
return ARCHIVE_OK;
}
/* Convenience function used during filter processing. */
-static int parse_filter_data(struct rar5* rar, const uint8_t* p,
- uint32_t* filter_data)
+static int parse_filter_data(struct archive_read* a, struct rar5* rar,
+ const uint8_t* p, uint32_t* filter_data)
{
- int i, bytes;
+ int i, bytes, ret;
uint32_t data = 0;
- if(ARCHIVE_OK != read_consume_bits(rar, p, 2, &bytes))
- return ARCHIVE_EOF;
+ if(ARCHIVE_OK != (ret = read_consume_bits(a, rar, p, 2, &bytes)))
+ return ret;
bytes++;
for(i = 0; i < bytes; i++) {
uint16_t byte;
- if(ARCHIVE_OK != read_bits_16(rar, p, &byte)) {
- return ARCHIVE_EOF;
+ if(ARCHIVE_OK != (ret = read_bits_16(a, rar, p, &byte))) {
+ return ret;
}
/* Cast to uint32_t will ensure the shift operation will not
@@ -2765,16 +2897,17 @@ static int parse_filter(struct archive_read* ar, const uint8_t* p) {
uint16_t filter_type;
struct filter_info* filt = NULL;
struct rar5* rar = get_context(ar);
+ int ret;
/* Read the parameters from the input stream. */
- if(ARCHIVE_OK != parse_filter_data(rar, p, &block_start))
- return ARCHIVE_EOF;
+ if(ARCHIVE_OK != (ret = parse_filter_data(ar, rar, p, &block_start)))
+ return ret;
- if(ARCHIVE_OK != parse_filter_data(rar, p, &block_length))
- return ARCHIVE_EOF;
+ if(ARCHIVE_OK != (ret = parse_filter_data(ar, rar, p, &block_length)))
+ return ret;
- if(ARCHIVE_OK != read_bits_16(rar, p, &filter_type))
- return ARCHIVE_EOF;
+ if(ARCHIVE_OK != (ret = read_bits_16(ar, rar, p, &filter_type)))
+ return ret;
filter_type >>= 13;
skip_bits(rar, 3);
@@ -2814,8 +2947,8 @@ static int parse_filter(struct archive_read* ar, const uint8_t* p) {
if(filter_type == FILTER_DELTA) {
int channels;
- if(ARCHIVE_OK != read_consume_bits(rar, p, 5, &channels))
- return ARCHIVE_EOF;
+ if(ARCHIVE_OK != (ret = read_consume_bits(ar, rar, p, 5, &channels)))
+ return ret;
filt->channels = channels + 1;
}
@@ -2823,10 +2956,11 @@ static int parse_filter(struct archive_read* ar, const uint8_t* p) {
return ARCHIVE_OK;
}
-static int decode_code_length(struct rar5* rar, const uint8_t* p,
- uint16_t code)
+static int decode_code_length(struct archive_read* a, struct rar5* rar,
+ const uint8_t* p, uint16_t code)
{
int lbits, length = 2;
+
if(code < 8) {
lbits = 0;
length += code;
@@ -2838,7 +2972,7 @@ static int decode_code_length(struct rar5* rar, const uint8_t* p,
if(lbits > 0) {
int add;
- if(ARCHIVE_OK != read_consume_bits(rar, p, lbits, &add))
+ if(ARCHIVE_OK != read_consume_bits(a, rar, p, lbits, &add))
return -1;
length += add;
@@ -2933,7 +3067,7 @@ static int do_uncompress_block(struct archive_read* a, const uint8_t* p) {
continue;
} else if(num >= 262) {
uint16_t dist_slot;
- int len = decode_code_length(rar, p, num - 262),
+ int len = decode_code_length(a, rar, p, num - 262),
dbits,
dist = 1;
@@ -2975,12 +3109,12 @@ static int do_uncompress_block(struct archive_read* a, const uint8_t* p) {
uint16_t low_dist;
if(dbits > 4) {
- if(ARCHIVE_OK != read_bits_32(
- rar, p, &add)) {
+ if(ARCHIVE_OK != (ret = read_bits_32(
+ a, rar, p, &add))) {
/* Return EOF if we
* can't read more
* data. */
- return ARCHIVE_EOF;
+ return ret;
}
skip_bits(rar, dbits - 4);
@@ -3015,11 +3149,11 @@ static int do_uncompress_block(struct archive_read* a, const uint8_t* p) {
/* dbits is one of [0,1,2,3] */
int add;
- if(ARCHIVE_OK != read_consume_bits(rar,
- p, dbits, &add)) {
+ if(ARCHIVE_OK != (ret = read_consume_bits(a, rar,
+ p, dbits, &add))) {
/* Return EOF if we can't read
* more data. */
- return ARCHIVE_EOF;
+ return ret;
}
dist += add;
@@ -3076,7 +3210,11 @@ static int do_uncompress_block(struct archive_read* a, const uint8_t* p) {
return ARCHIVE_FATAL;
}
- len = decode_code_length(rar, p, len_slot);
+ len = decode_code_length(a, rar, p, len_slot);
+ if (len == -1) {
+ return ARCHIVE_FATAL;
+ }
+
rar->cstate.last_len = len;
if(ARCHIVE_OK != copy_string(a, len, dist))
@@ -3600,6 +3738,16 @@ static int do_uncompress_file(struct archive_read* a) {
rar->cstate.initialized = 1;
}
+ /* Don't allow extraction if window_size is invalid. */
+ if(rar->cstate.window_size == 0) {
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_FILE_FORMAT,
+ "Invalid window size declaration in this file");
+
+ /* This should never happen in valid files. */
+ return ARCHIVE_FATAL;
+ }
+
if(rar->cstate.all_filters_applied == 1) {
/* We use while(1) here, but standard case allows for just 1
* iteration. The loop will iterate if process_block() didn't
@@ -3614,7 +3762,12 @@ static int do_uncompress_file(struct archive_read* a) {
if(rar->cstate.last_write_ptr ==
rar->cstate.write_ptr) {
/* The block didn't generate any new data,
- * so just process a new block. */
+ * so just process a new block if this one
+ * wasn't the last block in the file. */
+ if (bf_is_last_block(&rar->last_block_hdr)) {
+ return ARCHIVE_EOF;
+ }
+
continue;
}
@@ -3770,6 +3923,13 @@ static int do_unpack(struct archive_read* a, struct rar5* rar,
case GOOD:
/* fallthrough */
case BEST:
+ /* No data is returned here. But because a sparse-file aware
+ * caller (like archive_read_data_into_fd) may treat zero-size
+ * as a sparse file block, we need to update the offset
+ * accordingly. At this point the decoder doesn't have any
+ * pending uncompressed data blocks, so the current position in
+ * the output file should be last_write_ptr. */
+ if (offset) *offset = rar->cstate.last_write_ptr;
return uncompress_file(a);
default:
archive_set_error(&a->archive,
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_raw.c b/contrib/libarchive/libarchive/archive_read_support_format_raw.c
index b6328a952611..efdbf276baf7 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_raw.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_raw.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_tar.c b/contrib/libarchive/libarchive/archive_read_support_format_tar.c
index 2613a6d83f0e..db36b9e07767 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_tar.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_tar.c
@@ -26,7 +26,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -407,14 +406,13 @@ archive_read_format_tar_bid(struct archive_read *a, int best_bid)
/*
* Check format of mode/uid/gid/mtime/size/rdevmajor/rdevminor fields.
*/
- if (bid > 0 && (
- validate_number_field(header->mode, sizeof(header->mode)) == 0
+ if (validate_number_field(header->mode, sizeof(header->mode)) == 0
|| validate_number_field(header->uid, sizeof(header->uid)) == 0
|| validate_number_field(header->gid, sizeof(header->gid)) == 0
|| validate_number_field(header->mtime, sizeof(header->mtime)) == 0
|| validate_number_field(header->size, sizeof(header->size)) == 0
|| validate_number_field(header->rdevmajor, sizeof(header->rdevmajor)) == 0
- || validate_number_field(header->rdevminor, sizeof(header->rdevminor)) == 0)) {
+ || validate_number_field(header->rdevminor, sizeof(header->rdevminor)) == 0) {
bid = 0;
}
@@ -573,11 +571,15 @@ archive_read_format_tar_read_header(struct archive_read *a,
l = wcslen(wp);
if (l > 0 && wp[l - 1] == L'/') {
archive_entry_set_filetype(entry, AE_IFDIR);
+ tar->entry_bytes_remaining = 0;
+ tar->entry_padding = 0;
}
} else if ((p = archive_entry_pathname(entry)) != NULL) {
l = strlen(p);
if (l > 0 && p[l - 1] == '/') {
archive_entry_set_filetype(entry, AE_IFDIR);
+ tar->entry_bytes_remaining = 0;
+ tar->entry_padding = 0;
}
}
}
@@ -1396,6 +1398,7 @@ 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;
const char *p, *name;
const wchar_t *wp, *wname;
@@ -1434,6 +1437,11 @@ read_mac_metadata_blob(struct archive_read *a, struct tar *tar,
/* Read the body as a Mac OS metadata blob. */
size = archive_entry_size(entry);
+ msize = (size_t)size;
+ if (size < 0 || (uintmax_t)msize != (uintmax_t)size) {
+ *unconsumed = 0;
+ return (ARCHIVE_FATAL);
+ }
/*
* TODO: Look beyond the body here to peek at the next header.
@@ -1447,13 +1455,13 @@ 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?
*/
- data = __archive_read_ahead(a, (size_t)size, NULL);
+ data = __archive_read_ahead(a, msize, NULL);
if (data == NULL) {
*unconsumed = 0;
return (ARCHIVE_FATAL);
}
- archive_entry_copy_mac_metadata(entry, data, (size_t)size);
- *unconsumed = (size_t)((size + 511) & ~ 511);
+ 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));
}
@@ -2100,6 +2108,21 @@ pax_attribute(struct archive_read *a, struct tar *tar,
/* "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 (tar->entry_bytes_remaining == INT64_MAX) {
+ /* Note: tar_atol returns INT64_MAX on overflow */
+ 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.
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_warc.c b/contrib/libarchive/libarchive/archive_read_support_format_warc.c
index 27329962d6d1..fcec5bc4cbb9 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_warc.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_warc.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
/**
* WARC is standardised by ISO TC46/SC4/WG12 and currently available as
@@ -216,6 +215,7 @@ _warc_rdhdr(struct archive_read *a, struct archive_entry *entry)
const char *buf;
ssize_t nrd;
const char *eoh;
+ char *tmp;
/* for the file name, saves some strndup()'ing */
warc_string_t fnam;
/* warc record type, not that we really use it a lot */
@@ -322,7 +322,14 @@ start_over:
* malloc()+free() roundtrip */
if (fnam.len + 1U > w->pool.len) {
w->pool.len = ((fnam.len + 64U) / 64U) * 64U;
- w->pool.str = realloc(w->pool.str, w->pool.len);
+ tmp = realloc(w->pool.str, w->pool.len);
+ if (tmp == NULL) {
+ archive_set_error(
+ &a->archive, ENOMEM,
+ "Out of memory");
+ return (ARCHIVE_FATAL);
+ }
+ w->pool.str = tmp;
}
memcpy(w->pool.str, fnam.str, fnam.len);
w->pool.str[fnam.len] = '\0';
@@ -530,11 +537,11 @@ strtoi_lim(const char *str, const char **ep, int llim, int ulim)
static time_t
time_from_tm(struct tm *t)
{
-#if HAVE_TIMEGM
+#if HAVE__MKGMTIME
+ return _mkgmtime(t);
+#elif HAVE_TIMEGM
/* Use platform timegm() if available. */
return (timegm(t));
-#elif HAVE__MKGMTIME64
- return (_mkgmtime64(t));
#else
/* Else use direct calculation using POSIX assumptions. */
/* First, fix up tm_yday based on the year/month/day. */
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_xar.c b/contrib/libarchive/libarchive/archive_read_support_format_xar.c
index 503ff58b91db..cefb36410e77 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_xar.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_xar.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -623,8 +622,10 @@ read_toc(struct archive_read *a)
(size_t)xar->toc_chksum_size, NULL, 0);
__archive_read_consume(a, xar->toc_chksum_size);
xar->offset += xar->toc_chksum_size;
+#ifndef DONT_FAIL_ON_CRC_ERROR
if (r != ARCHIVE_OK)
return (ARCHIVE_FATAL);
+#endif
}
/*
@@ -827,10 +828,12 @@ xar_read_header(struct archive_read *a, struct archive_entry *entry)
xattr->a_sum.val, xattr->a_sum.len,
xattr->e_sum.val, xattr->e_sum.len);
if (r != ARCHIVE_OK) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
archive_set_error(&(a->archive), ARCHIVE_ERRNO_MISC,
"Xattr checksum error");
r = ARCHIVE_WARN;
break;
+#endif
}
if (xattr->name.s == NULL) {
archive_set_error(&(a->archive), ARCHIVE_ERRNO_MISC,
@@ -1123,7 +1126,7 @@ atohex(unsigned char *b, size_t bsize, const char *p, size_t psize)
x |= p[1] - '0';
else
return (-1);
-
+
*b++ = x;
bsize--;
p += 2;
@@ -1135,11 +1138,11 @@ atohex(unsigned char *b, size_t bsize, const char *p, size_t psize)
static time_t
time_from_tm(struct tm *t)
{
-#if HAVE_TIMEGM
+#if HAVE__MKGMTIME
+ return _mkgmtime(t);
+#elif HAVE_TIMEGM
/* Use platform timegm() if available. */
return (timegm(t));
-#elif HAVE__MKGMTIME64
- return (_mkgmtime64(t));
#else
/* Else use direct calculation using POSIX assumptions. */
/* First, fix up tm_yday based on the year/month/day. */
@@ -2052,6 +2055,12 @@ xml_start(struct archive_read *a, const char *name, struct xmlattr_list *list)
attr = attr->next) {
if (strcmp(attr->name, "link") != 0)
continue;
+ if (xar->file->hdnext != NULL || xar->file->link != 0 ||
+ xar->file == xar->hdlink_orgs) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "File with multiple link attributes");
+ return (ARCHIVE_FATAL);
+ }
if (strcmp(attr->value, "original") == 0) {
xar->file->hdnext = xar->hdlink_orgs;
xar->hdlink_orgs = xar->file;
@@ -3248,6 +3257,9 @@ expat_start_cb(void *userData, const XML_Char *name, const XML_Char **atts)
struct xmlattr_list list;
int r;
+ if (ud->state != ARCHIVE_OK)
+ return;
+
r = expat_xmlattr_setup(a, &list, atts);
if (r == ARCHIVE_OK)
r = xml_start(a, (const char *)name, &list);
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_zip.c b/contrib/libarchive/libarchive/archive_read_support_format_zip.c
index 210a87886aef..c9759eaf9a89 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_zip.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_zip.c
@@ -26,7 +26,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
/*
* The definitive documentation of the Zip file format is:
@@ -58,6 +57,9 @@ __FBSDID("$FreeBSD$");
#ifdef HAVE_LZMA_H
#include <lzma.h>
#endif
+#ifdef HAVE_ZSTD_H
+#include <zstd.h>
+#endif
#include "archive.h"
#include "archive_digest_private.h"
@@ -116,7 +118,7 @@ struct trad_enc_ctx {
/* Bits used in zip_flags. */
#define ZIP_ENCRYPTED (1 << 0)
-#define ZIP_LENGTH_AT_END (1 << 3)
+#define ZIP_LENGTH_AT_END (1 << 3) /* Also called "Streaming bit" */
#define ZIP_STRONG_ENCRYPTED (1 << 6)
#define ZIP_UTF8_NAME (1 << 11)
/* See "7.2 Single Password Symmetric Encryption Method"
@@ -163,8 +165,8 @@ struct zip {
int64_t entry_compressed_bytes_read;
int64_t entry_uncompressed_bytes_read;
- /* Running CRC32 of the decompressed data */
- unsigned long entry_crc32;
+ /* Running CRC32 of the decompressed and decrypted data */
+ unsigned long computed_crc32;
unsigned long (*crc32func)(unsigned long, const void *,
size_t);
char ignore_crc32;
@@ -191,6 +193,11 @@ struct zip {
char bzstream_valid;
#endif
+#if HAVE_ZSTD_H && HAVE_LIBZSTD
+ ZSTD_DStream *zstdstream;
+ char zstdstream_valid;
+#endif
+
IByteIn zipx_ppmd_stream;
ssize_t zipx_ppmd_read_compressed;
CPpmd8 ppmd8;
@@ -435,6 +442,7 @@ static const struct {
{17, "reserved"}, /* Reserved by PKWARE */
{18, "ibm-terse-new"}, /* File is compressed using IBM TERSE (new) */
{19, "ibm-lz777"},/* IBM LZ77 z Architecture (PFS) */
+ {93, "zstd"}, /* Zstandard (zstd) Compression */
{95, "xz"}, /* XZ compressed data */
{96, "jpeg"}, /* JPEG compressed data */
{97, "wav-pack"}, /* WavPack compressed data */
@@ -936,7 +944,7 @@ zip_read_local_file_header(struct archive_read *a, struct archive_entry *entry,
zip->end_of_entry = 0;
zip->entry_uncompressed_bytes_read = 0;
zip->entry_compressed_bytes_read = 0;
- zip->entry_crc32 = zip->crc32func(0, NULL, 0);
+ zip->computed_crc32 = zip->crc32func(0, NULL, 0);
/* Setup default conversion. */
if (zip->sconv == NULL && !zip->init_default_conversion) {
@@ -1131,7 +1139,8 @@ zip_read_local_file_header(struct archive_read *a, struct archive_entry *entry,
"Inconsistent CRC32 values");
ret = ARCHIVE_WARN;
}
- if (zip_entry->compressed_size == 0) {
+ if (zip_entry->compressed_size == 0
+ || zip_entry->compressed_size == 0xffffffff) {
zip_entry->compressed_size
= zip_entry_central_dir.compressed_size;
} else if (zip_entry->compressed_size
@@ -1144,7 +1153,8 @@ zip_read_local_file_header(struct archive_read *a, struct archive_entry *entry,
(intmax_t)zip_entry->compressed_size);
ret = ARCHIVE_WARN;
}
- if (zip_entry->uncompressed_size == 0) {
+ if (zip_entry->uncompressed_size == 0 ||
+ zip_entry->uncompressed_size == 0xffffffff) {
zip_entry->uncompressed_size
= zip_entry_central_dir.uncompressed_size;
} else if (zip_entry->uncompressed_size
@@ -1186,7 +1196,7 @@ zip_read_local_file_header(struct archive_read *a, struct archive_entry *entry,
{
// symlink target string appeared to be compressed
int status = ARCHIVE_FATAL;
- const void *uncompressed_buffer;
+ const void *uncompressed_buffer = NULL;
switch (zip->entry->compression)
{
@@ -1274,7 +1284,8 @@ zip_read_local_file_header(struct archive_read *a, struct archive_entry *entry,
return ARCHIVE_FATAL;
}
} else if (0 == (zip_entry->zip_flags & ZIP_LENGTH_AT_END)
- || zip_entry->uncompressed_size > 0) {
+ || (zip_entry->uncompressed_size > 0
+ && zip_entry->uncompressed_size != 0xffffffff)) {
/* Set the size only if it's meaningful. */
archive_entry_set_size(entry, zip_entry->uncompressed_size);
}
@@ -1333,25 +1344,267 @@ check_authentication_code(struct archive_read *a, const void *_p)
}
/*
- * Read "uncompressed" data. There are three cases:
- * 1) We know the size of the data. This is always true for the
- * seeking reader (we've examined the Central Directory already).
- * 2) ZIP_LENGTH_AT_END was set, but only the CRC was deferred.
- * Info-ZIP seems to do this; we know the size but have to grab
- * the CRC from the data descriptor afterwards.
- * 3) We're streaming and ZIP_LENGTH_AT_END was specified and
- * we have no size information. In this case, we can do pretty
- * well by watching for the data descriptor record. The data
- * descriptor is 16 bytes and includes a computed CRC that should
- * provide a strong check.
+ * The Zip end-of-file marker is inherently ambiguous. The specification
+ * in APPNOTE.TXT allows any of four possible formats, and there is no
+ * guaranteed-correct way for a reader to know a priori which one the writer
+ * will have used. The four formats are:
+ * 1. 32-bit format with an initial PK78 marker
+ * 2. 32-bit format without that marker
+ * 3. 64-bit format with the marker
+ * 4. 64-bit format without the marker
+ *
+ * Mark Adler's `sunzip` streaming unzip program solved this ambiguity
+ * by just looking at every possible combination and accepting the
+ * longest one that matches the expected values. His approach always
+ * consumes the longest possible matching EOF marker, based on an
+ * analysis of all the possible failures and how the values could
+ * overlap.
+ *
+ * For example, suppose both of the first two formats listed
+ * above match. In that case, we know the next four
+ * 32-bit words match this pattern:
+ * ```
+ * [PK\07\08] [CRC32] [compressed size] [uncompressed size]
+ * ```
+ * but we know they must also match this pattern:
+ * ```
+ * [CRC32] [compressed size] [uncompressed size] [other PK marker]
+ * ```
+ *
+ * Since the first word here matches both the PK78 signature in the
+ * first form and the CRC32 in the second, we know those two values
+ * are equal, the CRC32 must be exactly 0x08074b50. Similarly, the
+ * compressed and uncompressed size must also be exactly this value.
+ * So we know these four words are all 0x08074b50. If we were to
+ * accept the shorter pattern, it would be immediately followed by
+ * another PK78 marker, which is not possible in a well-formed ZIP
+ * archive unless there is garbage between entries. This implies we
+ * should not accept the shorter form in such a case; we should accept
+ * the longer form.
+ *
+ * If the second and third possibilities above both match, we
+ * have a slightly different situation. The following words
+ * must match both the 32-bit format
+ * ```
+ * [CRC32] [compressed size] [uncompressed size] [other PK marker]
+ * ```
+ * and the 64-bit format
+ * ```
+ * [CRC32] [compressed low] [compressed high] [uncompressed low] [uncompressed high] [other PK marker]
+ * ```
+ * Since the 32-bit and 64-bit compressed sizes both match, the
+ * actual size must fit in 32 bits, which implies the high-order
+ * word of the compressed size is zero. So we know the uncompressed
+ * low word is zero, which again implies that if we accept the shorter
+ * format, there will not be a valid PK marker following it.
+ *
+ * Similar considerations rule out the shorter form in every other
+ * possibly-ambiguous pair. So if two of the four possible formats
+ * match, we should accept the longer option.
+ *
+ * If none of the four formats matches, we know the archive must be
+ * corrupted in some fashion. In particular, it's possible that the
+ * length-at-end bit was incorrect and we should not really be looking
+ * for an EOF marker at all. To allow for this possibility, we
+ * evaluate the following words to collect data for a later error
+ * report but do not consume any bytes. We instead rely on the later
+ * search for a new PK marker to re-sync to the next well-formed
+ * entry.
+ */
+static void
+consume_end_of_file_marker(struct archive_read *a, struct zip *zip)
+{
+ const char *marker;
+ const char *p;
+ uint64_t compressed32, uncompressed32;
+ uint64_t compressed64, uncompressed64;
+ uint64_t compressed_actual, uncompressed_actual;
+ uint32_t crc32_actual;
+ const uint32_t PK78 = 0x08074B50ULL;
+ uint8_t crc32_ignored, crc32_may_be_zero;
+
+ /* If there shouldn't be a marker, don't consume it. */
+ if ((zip->entry->zip_flags & ZIP_LENGTH_AT_END) == 0) {
+ return;
+ }
+
+ /* The longest Zip end-of-file record is 24 bytes. Since an
+ * end-of-file record can never appear at the end of the
+ * archive, we know 24 bytes will be available unless
+ * the archive is severely truncated. */
+ if (NULL == (marker = __archive_read_ahead(a, 24, NULL))) {
+ return;
+ }
+ p = marker;
+
+ /* The end-of-file record comprises:
+ * = Optional PK\007\010 marker
+ * = 4-byte CRC32
+ * = Compressed size
+ * = Uncompressed size
+ *
+ * The last two fields are either both 32 bits or both 64
+ * bits. We check all possible layouts and accept any one
+ * that gives us a complete match, else we make a best-effort
+ * attempt to parse out the pieces.
+ */
+
+ /* CRC32 checking can be tricky:
+ * * Test suites sometimes ignore the CRC32
+ * * AES AE-2 always writes zero for the CRC32
+ * * AES AE-1 sometimes writes zero for the CRC32
+ */
+ crc32_ignored = zip->ignore_crc32;
+ crc32_may_be_zero = 0;
+ crc32_actual = zip->computed_crc32;
+ if (zip->hctx_valid) {
+ switch (zip->entry->aes_extra.vendor) {
+ case AES_VENDOR_AE_2:
+ crc32_actual = 0;
+ break;
+ case AES_VENDOR_AE_1:
+ default:
+ crc32_may_be_zero = 1;
+ break;
+ }
+ }
+
+ /* Values computed from the actual data in the archive. */
+ compressed_actual = (uint64_t)zip->entry_compressed_bytes_read;
+ uncompressed_actual = (uint64_t)zip->entry_uncompressed_bytes_read;
+
+
+ /* Longest: PK78 marker, all 64-bit fields (24 bytes total) */
+ if (archive_le32dec(p) == PK78
+ && ((archive_le32dec(p + 4) == crc32_actual)
+ || (crc32_may_be_zero && (archive_le32dec(p + 4) == 0))
+ || crc32_ignored)
+ && (archive_le64dec(p + 8) == compressed_actual)
+ && (archive_le64dec(p + 16) == uncompressed_actual)) {
+ if (!crc32_ignored) {
+ zip->entry->crc32 = crc32_actual;
+ }
+ zip->entry->compressed_size = compressed_actual;
+ zip->entry->uncompressed_size = uncompressed_actual;
+ zip->unconsumed += 24;
+ return;
+ }
+
+ /* No PK78 marker, 64-bit fields (20 bytes total) */
+ if (((archive_le32dec(p) == crc32_actual)
+ || (crc32_may_be_zero && (archive_le32dec(p + 4) == 0))
+ || crc32_ignored)
+ && (archive_le64dec(p + 4) == compressed_actual)
+ && (archive_le64dec(p + 12) == uncompressed_actual)) {
+ if (!crc32_ignored) {
+ zip->entry->crc32 = crc32_actual;
+ }
+ zip->entry->compressed_size = compressed_actual;
+ zip->entry->uncompressed_size = uncompressed_actual;
+ zip->unconsumed += 20;
+ return;
+ }
+
+ /* PK78 marker and 32-bit fields (16 bytes total) */
+ if (archive_le32dec(p) == PK78
+ && ((archive_le32dec(p + 4) == crc32_actual)
+ || (crc32_may_be_zero && (archive_le32dec(p + 4) == 0))
+ || crc32_ignored)
+ && (archive_le32dec(p + 8) == compressed_actual)
+ && (archive_le32dec(p + 12) == uncompressed_actual)) {
+ if (!crc32_ignored) {
+ zip->entry->crc32 = crc32_actual;
+ }
+ zip->entry->compressed_size = compressed_actual;
+ zip->entry->uncompressed_size = uncompressed_actual;
+ zip->unconsumed += 16;
+ return;
+ }
+
+ /* Shortest: No PK78 marker, all 32-bit fields (12 bytes total) */
+ if (((archive_le32dec(p) == crc32_actual)
+ || (crc32_may_be_zero && (archive_le32dec(p + 4) == 0))
+ || crc32_ignored)
+ && (archive_le32dec(p + 4) == compressed_actual)
+ && (archive_le32dec(p + 8) == uncompressed_actual)) {
+ if (!crc32_ignored) {
+ zip->entry->crc32 = crc32_actual;
+ }
+ zip->entry->compressed_size = compressed_actual;
+ zip->entry->uncompressed_size = uncompressed_actual;
+ zip->unconsumed += 12;
+ return;
+ }
+
+ /* If none of the above patterns gives us a full exact match,
+ * then there's something definitely amiss. The fallback code
+ * below will parse out some plausible values for error
+ * reporting purposes. Note that this won't actually
+ * consume anything:
+ *
+ * = If there really is a marker here, the logic to resync to
+ * the next entry will suffice to skip it.
+ *
+ * = There might not really be a marker: Corruption or bugs
+ * may have set the length-at-end bit without a marker ever
+ * having actually been written. In this case, we
+ * explicitly should not consume any bytes, since that would
+ * prevent us from correctly reading the next entry.
+ */
+ if (archive_le32dec(p) == PK78) {
+ p += 4; /* Ignore PK78 if it appears to be present */
+ }
+ zip->entry->crc32 = archive_le32dec(p); /* Parse CRC32 */
+ p += 4;
+
+ /* Consider both 32- and 64-bit interpretations */
+ compressed32 = archive_le32dec(p);
+ uncompressed32 = archive_le32dec(p + 4);
+ compressed64 = archive_le64dec(p);
+ uncompressed64 = archive_le64dec(p + 8);
+
+ /* The earlier patterns may have failed because of CRC32
+ * mismatch, so it's still possible that both sizes match.
+ * Try to match as many as we can...
+ */
+ if (compressed32 == compressed_actual
+ && uncompressed32 == uncompressed_actual) {
+ /* Both 32-bit fields match */
+ zip->entry->compressed_size = compressed32;
+ zip->entry->uncompressed_size = uncompressed32;
+ } else if (compressed64 == compressed_actual
+ || uncompressed64 == uncompressed_actual) {
+ /* One or both 64-bit fields match */
+ zip->entry->compressed_size = compressed64;
+ zip->entry->uncompressed_size = uncompressed64;
+ } else {
+ /* Zero or one 32-bit fields match */
+ zip->entry->compressed_size = compressed32;
+ zip->entry->uncompressed_size = uncompressed32;
+ }
+}
+
+/*
+ * Read "uncompressed" data.
+ *
+ * This is straightforward if we know the size of the data. This is
+ * always true for the seeking reader (we've examined the Central
+ * Directory already), and will often be true for the streaming reader
+ * (the writer was writing uncompressed so probably knows the size).
*
- * TODO: Technically, the PK\007\010 signature is optional.
- * In the original spec, the data descriptor contained CRC
- * and size fields but had no leading signature. In practice,
- * newer writers seem to provide the signature pretty consistently.
+ * If we don't know the size, then life is more interesting. Note
+ * that a careful reading of the Zip specification says that a writer
+ * must use ZIP_LENGTH_AT_END if it cannot write the CRC into the
+ * local header. And if it uses ZIP_LENGTH_AT_END, then it is
+ * prohibited from storing the sizes in the local header. This
+ * prevents fully-compliant streaming writers from providing any size
+ * clues to a streaming reader. In this case, we have to scan the
+ * data as we read to try to locate the end-of-file marker.
*
- * For uncompressed data, the PK\007\010 marker seems essential
- * to be sure we've actually seen the end of the entry.
+ * We assume here that the end-of-file marker always has the
+ * PK\007\010 signature. Although it's technically optional, newer
+ * writers seem to provide it pretty consistently, and it's not clear
+ * how to efficiently recognize an end-of-file marker that lacks it.
*
* Returns ARCHIVE_OK if successful, ARCHIVE_FATAL otherwise, sets
* zip->end_of_entry if it consumes all of the data.
@@ -1363,18 +1616,18 @@ zip_read_data_none(struct archive_read *a, const void **_buff,
struct zip *zip;
const char *buff;
ssize_t bytes_avail;
+ ssize_t trailing_extra;
int r;
(void)offset; /* UNUSED */
zip = (struct zip *)(a->format->data);
+ trailing_extra = zip->hctx_valid ? AUTH_CODE_SIZE : 0;
if (zip->entry->zip_flags & ZIP_LENGTH_AT_END) {
const char *p;
- ssize_t grabbing_bytes = 24;
+ ssize_t grabbing_bytes = 24 + trailing_extra;
- if (zip->hctx_valid)
- grabbing_bytes += AUTH_CODE_SIZE;
/* Grab at least 24 bytes. */
buff = __archive_read_ahead(a, grabbing_bytes, &bytes_avail);
if (bytes_avail < grabbing_bytes) {
@@ -1389,44 +1642,19 @@ zip_read_data_none(struct archive_read *a, const void **_buff,
}
/* Check for a complete PK\007\010 signature, followed
* by the correct 4-byte CRC. */
- p = buff;
- if (zip->hctx_valid)
- p += AUTH_CODE_SIZE;
+ p = buff + trailing_extra;
if (p[0] == 'P' && p[1] == 'K'
&& p[2] == '\007' && p[3] == '\010'
- && (archive_le32dec(p + 4) == zip->entry_crc32
+ && (archive_le32dec(p + 4) == zip->computed_crc32
|| zip->ignore_crc32
|| (zip->hctx_valid
&& zip->entry->aes_extra.vendor == AES_VENDOR_AE_2))) {
- if (zip->entry->flags & LA_USED_ZIP64) {
- uint64_t compressed, uncompressed;
- zip->entry->crc32 = archive_le32dec(p + 4);
- compressed = archive_le64dec(p + 8);
- uncompressed = archive_le64dec(p + 16);
- if (compressed > INT64_MAX || uncompressed >
- INT64_MAX) {
- archive_set_error(&a->archive,
- ARCHIVE_ERRNO_FILE_FORMAT,
- "Overflow of 64-bit file sizes");
- return ARCHIVE_FAILED;
- }
- zip->entry->compressed_size = compressed;
- zip->entry->uncompressed_size = uncompressed;
- zip->unconsumed = 24;
- } else {
- zip->entry->crc32 = archive_le32dec(p + 4);
- zip->entry->compressed_size =
- archive_le32dec(p + 8);
- zip->entry->uncompressed_size =
- archive_le32dec(p + 12);
- zip->unconsumed = 16;
- }
+ zip->end_of_entry = 1;
if (zip->hctx_valid) {
r = check_authentication_code(a, buff);
if (r != ARCHIVE_OK)
return (r);
}
- zip->end_of_entry = 1;
return (ARCHIVE_OK);
}
/* If not at EOF, ensure we consume at least one byte. */
@@ -1442,11 +1670,10 @@ zip_read_data_none(struct archive_read *a, const void **_buff,
else if (p[3] == '\007') { p += 1; }
else if (p[3] == '\010' && p[2] == '\007'
&& p[1] == 'K' && p[0] == 'P') {
- if (zip->hctx_valid)
- p -= AUTH_CODE_SIZE;
break;
} else { p += 4; }
}
+ p -= trailing_extra;
bytes_avail = p - buff;
} else {
if (zip->entry_bytes_remaining == 0) {
@@ -1489,59 +1716,15 @@ zip_read_data_none(struct archive_read *a, const void **_buff,
bytes_avail = dec_size;
buff = (const char *)zip->decrypted_buffer;
}
- *size = bytes_avail;
zip->entry_bytes_remaining -= bytes_avail;
zip->entry_uncompressed_bytes_read += bytes_avail;
zip->entry_compressed_bytes_read += bytes_avail;
zip->unconsumed += bytes_avail;
+ *size = bytes_avail;
*_buff = buff;
return (ARCHIVE_OK);
}
-static int
-consume_optional_marker(struct archive_read *a, struct zip *zip)
-{
- if (zip->end_of_entry && (zip->entry->zip_flags & ZIP_LENGTH_AT_END)) {
- const char *p;
-
- if (NULL == (p = __archive_read_ahead(a, 24, NULL))) {
- archive_set_error(&a->archive,
- ARCHIVE_ERRNO_FILE_FORMAT,
- "Truncated ZIP end-of-file record");
- return (ARCHIVE_FATAL);
- }
- /* Consume the optional PK\007\010 marker. */
- if (p[0] == 'P' && p[1] == 'K' &&
- p[2] == '\007' && p[3] == '\010') {
- p += 4;
- zip->unconsumed = 4;
- }
- if (zip->entry->flags & LA_USED_ZIP64) {
- uint64_t compressed, uncompressed;
- zip->entry->crc32 = archive_le32dec(p);
- compressed = archive_le64dec(p + 4);
- uncompressed = archive_le64dec(p + 12);
- if (compressed > INT64_MAX ||
- uncompressed > INT64_MAX) {
- archive_set_error(&a->archive,
- ARCHIVE_ERRNO_FILE_FORMAT,
- "Overflow of 64-bit file sizes");
- return ARCHIVE_FAILED;
- }
- zip->entry->compressed_size = compressed;
- zip->entry->uncompressed_size = uncompressed;
- zip->unconsumed += 20;
- } else {
- zip->entry->crc32 = archive_le32dec(p);
- zip->entry->compressed_size = archive_le32dec(p + 4);
- zip->entry->uncompressed_size = archive_le32dec(p + 8);
- zip->unconsumed += 12;
- }
- }
-
- return (ARCHIVE_OK);
-}
-
#if HAVE_LZMA_H && HAVE_LIBLZMA
static int
zipx_xz_init(struct archive_read *a, struct zip *zip)
@@ -1657,7 +1840,7 @@ zipx_lzma_alone_init(struct archive_read *a, struct zip *zip)
*/
/* Read magic1,magic2,lzma_params from the ZIPX stream. */
- if((p = __archive_read_ahead(a, 9, NULL)) == NULL) {
+ if(zip->entry_bytes_remaining < 9 || (p = __archive_read_ahead(a, 9, NULL)) == NULL) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"Truncated lzma data");
return (ARCHIVE_FATAL);
@@ -1793,10 +1976,6 @@ zip_read_data_zipx_xz(struct archive_read *a, const void **buff,
*size = zip->zipx_lzma_stream.total_out;
*buff = zip->uncompressed_buffer;
- ret = consume_optional_marker(a, zip);
- if (ret != ARCHIVE_OK)
- return (ret);
-
return (ARCHIVE_OK);
}
@@ -1861,8 +2040,6 @@ zip_read_data_zipx_lzma_alone(struct archive_read *a, const void **buff,
/* This case is optional in lzma alone format. It can happen,
* but most of the files don't have it. (GitHub #1257) */
case LZMA_STREAM_END:
- lzma_end(&zip->zipx_lzma_stream);
- zip->zipx_lzma_valid = 0;
if((int64_t) zip->zipx_lzma_stream.total_in !=
zip->entry_bytes_remaining)
{
@@ -1896,21 +2073,18 @@ zip_read_data_zipx_lzma_alone(struct archive_read *a, const void **buff,
zip->end_of_entry = 1;
}
- /* Return values. */
- *size = zip->zipx_lzma_stream.total_out;
- *buff = zip->uncompressed_buffer;
-
- /* Behave the same way as during deflate decompression. */
- ret = consume_optional_marker(a, zip);
- if (ret != ARCHIVE_OK)
- return (ret);
-
/* Free lzma decoder handle because we'll no longer need it. */
+ /* This cannot be folded into LZMA_STREAM_END handling above
+ * because the stream end marker is not required in this format. */
if(zip->end_of_entry) {
lzma_end(&zip->zipx_lzma_stream);
zip->zipx_lzma_valid = 0;
}
+ /* Return values. */
+ *size = zip->zipx_lzma_stream.total_out;
+ *buff = zip->uncompressed_buffer;
+
/* If we're here, then we're good! */
return (ARCHIVE_OK);
}
@@ -2068,10 +2242,6 @@ zip_read_data_zipx_ppmd(struct archive_read *a, const void **buff,
++consumed_bytes;
} while(consumed_bytes < zip->uncompressed_buffer_size);
- /* Update pointers for libarchive. */
- *buff = zip->uncompressed_buffer;
- *size = consumed_bytes;
-
/* Update pointers so we can continue decompression in another call. */
zip->entry_bytes_remaining -= zip->zipx_ppmd_read_compressed;
zip->entry_compressed_bytes_read += zip->zipx_ppmd_read_compressed;
@@ -2083,10 +2253,9 @@ zip_read_data_zipx_ppmd(struct archive_read *a, const void **buff,
zip->ppmd8_valid = 0;
}
- /* Seek for optional marker, same way as in each zip entry. */
- ret = consume_optional_marker(a, zip);
- if (ret != ARCHIVE_OK)
- return ret;
+ /* Update pointers for libarchive. */
+ *buff = zip->uncompressed_buffer;
+ *size = consumed_bytes;
return ARCHIVE_OK;
}
@@ -2176,11 +2345,11 @@ zip_read_data_zipx_bzip2(struct archive_read *a, const void **buff,
/* Setup buffer boundaries. */
zip->bzstream.next_in = (char*)(uintptr_t) compressed_buff;
- zip->bzstream.avail_in = in_bytes;
+ zip->bzstream.avail_in = (uint32_t)in_bytes;
zip->bzstream.total_in_hi32 = 0;
zip->bzstream.total_in_lo32 = 0;
zip->bzstream.next_out = (char*) zip->uncompressed_buffer;
- zip->bzstream.avail_out = zip->uncompressed_buffer_size;
+ zip->bzstream.avail_out = (uint32_t)zip->uncompressed_buffer_size;
zip->bzstream.total_out_hi32 = 0;
zip->bzstream.total_out_lo32 = 0;
@@ -2217,7 +2386,7 @@ zip_read_data_zipx_bzip2(struct archive_read *a, const void **buff,
to_consume = zip->bzstream.total_in_lo32;
__archive_read_consume(a, to_consume);
- total_out = ((uint64_t) zip->bzstream.total_out_hi32 << 32) +
+ total_out = ((uint64_t) zip->bzstream.total_out_hi32 << 32) |
zip->bzstream.total_out_lo32;
zip->entry_bytes_remaining -= to_consume;
@@ -2228,14 +2397,138 @@ zip_read_data_zipx_bzip2(struct archive_read *a, const void **buff,
*size = total_out;
*buff = zip->uncompressed_buffer;
- /* Seek for optional marker, like in other entries. */
- r = consume_optional_marker(a, zip);
- if(r != ARCHIVE_OK)
- return r;
+ return ARCHIVE_OK;
+}
+
+#endif
+
+#if HAVE_ZSTD_H && HAVE_LIBZSTD
+static int
+zipx_zstd_init(struct archive_read *a, struct zip *zip)
+{
+ size_t r;
+
+ /* Deallocate already existing Zstd decompression context if it
+ * exists. */
+ if(zip->zstdstream_valid) {
+ ZSTD_freeDStream(zip->zstdstream);
+ zip->zstdstream_valid = 0;
+ }
+
+ /* Allocate a new Zstd decompression context. */
+ zip->zstdstream = ZSTD_createDStream();
+
+ r = ZSTD_initDStream(zip->zstdstream);
+ if (ZSTD_isError(r)) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Error initializing zstd decompressor: %s",
+ ZSTD_getErrorName(r));
+
+ return ARCHIVE_FAILED;
+ }
+
+ /* Mark the zstdstream field to be released in cleanup phase. */
+ zip->zstdstream_valid = 1;
+
+ /* (Re)allocate the buffer that will contain decompressed bytes. */
+ free(zip->uncompressed_buffer);
+ zip->uncompressed_buffer_size = ZSTD_DStreamOutSize();
+ zip->uncompressed_buffer =
+ (uint8_t*) malloc(zip->uncompressed_buffer_size);
+ if (zip->uncompressed_buffer == NULL) {
+ archive_set_error(&a->archive, ENOMEM,
+ "No memory for Zstd decompression");
+
+ return ARCHIVE_FATAL;
+ }
+
+ /* Initialization done. */
+ zip->decompress_init = 1;
return ARCHIVE_OK;
}
+static int
+zip_read_data_zipx_zstd(struct archive_read *a, const void **buff,
+ size_t *size, int64_t *offset)
+{
+ struct zip *zip = (struct zip *)(a->format->data);
+ ssize_t bytes_avail = 0, in_bytes, to_consume;
+ const void *compressed_buff;
+ int r;
+ size_t ret;
+ uint64_t total_out;
+ ZSTD_outBuffer out;
+ ZSTD_inBuffer in;
+
+ (void) offset; /* UNUSED */
+
+ /* Initialize decompression context if we're here for the first time. */
+ if(!zip->decompress_init) {
+ r = zipx_zstd_init(a, zip);
+ if(r != ARCHIVE_OK)
+ return r;
+ }
+
+ /* Fetch more compressed bytes */
+ compressed_buff = __archive_read_ahead(a, 1, &bytes_avail);
+ if(bytes_avail < 0) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Truncated zstd file body");
+ return (ARCHIVE_FATAL);
+ }
+
+ in_bytes = 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
+ * undesirable. This is why we need to make this check
+ * manually. */
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Truncated zstd file body");
+ return (ARCHIVE_FATAL);
+ }
+
+ /* Setup buffer boundaries */
+ in.src = compressed_buff;
+ in.size = in_bytes;
+ in.pos = 0;
+ out = (ZSTD_outBuffer) { zip->uncompressed_buffer, zip->uncompressed_buffer_size, 0 };
+
+ /* Perform the decompression. */
+ ret = ZSTD_decompressStream(zip->zstdstream, &out, &in);
+ if (ZSTD_isError(ret)) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Error during zstd decompression: %s",
+ ZSTD_getErrorName(ret));
+ return (ARCHIVE_FATAL);
+ }
+
+ /* Check end of the stream. */
+ if (ret == 0) {
+ if ((in.pos == in.size) && (out.pos < out.size)) {
+ zip->end_of_entry = 1;
+ ZSTD_freeDStream(zip->zstdstream);
+ zip->zstdstream_valid = 0;
+ }
+ }
+
+ /* Update the pointers so decompressor can continue decoding. */
+ to_consume = in.pos;
+ __archive_read_consume(a, to_consume);
+
+ total_out = out.pos;
+
+ zip->entry_bytes_remaining -= to_consume;
+ zip->entry_compressed_bytes_read += to_consume;
+ zip->entry_uncompressed_bytes_read += total_out;
+
+ /* Give libarchive its due. */
+ *size = total_out;
+ *buff = zip->uncompressed_buffer;
+
+ return ARCHIVE_OK;
+}
#endif
#ifdef HAVE_ZLIB_H
@@ -2269,7 +2562,7 @@ zip_read_data_deflate(struct archive_read *a, const void **buff,
size_t *size, int64_t *offset)
{
struct zip *zip;
- ssize_t bytes_avail;
+ ssize_t bytes_avail, to_consume = 0;
const void *compressed_buff, *sp;
int r;
@@ -2390,34 +2683,33 @@ zip_read_data_deflate(struct archive_read *a, const void **buff,
}
/* Consume as much as the compressor actually used. */
- bytes_avail = zip->stream.total_in;
+ to_consume = zip->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->stream.total_out;
+
if (zip->tctx_valid || zip->cctx_valid) {
- zip->decrypted_bytes_remaining -= bytes_avail;
+ zip->decrypted_bytes_remaining -= to_consume;
if (zip->decrypted_bytes_remaining == 0)
zip->decrypted_ptr = zip->decrypted_buffer;
else
- zip->decrypted_ptr += bytes_avail;
+ zip->decrypted_ptr += to_consume;
}
- /* Calculate compressed data as much as we used.*/
if (zip->hctx_valid)
- archive_hmac_sha1_update(&zip->hctx, sp, bytes_avail);
- __archive_read_consume(a, bytes_avail);
- zip->entry_bytes_remaining -= bytes_avail;
- zip->entry_compressed_bytes_read += bytes_avail;
-
- *size = zip->stream.total_out;
- zip->entry_uncompressed_bytes_read += zip->stream.total_out;
- *buff = zip->uncompressed_buffer;
+ archive_hmac_sha1_update(&zip->hctx, sp, to_consume);
- if (zip->end_of_entry && zip->hctx_valid) {
- r = check_authentication_code(a, NULL);
- if (r != ARCHIVE_OK)
- return (r);
+ if (zip->end_of_entry) {
+ if (zip->hctx_valid) {
+ r = check_authentication_code(a, NULL);
+ if (r != ARCHIVE_OK) {
+ return (r);
+ }
+ }
}
- r = consume_optional_marker(a, zip);
- if (r != ARCHIVE_OK)
- return (r);
+ *size = zip->stream.total_out;
+ *buff = zip->uncompressed_buffer;
return (ARCHIVE_OK);
}
@@ -2858,6 +3150,11 @@ archive_read_format_zip_read_data(struct archive_read *a,
r = zip_read_data_zipx_xz(a, buff, size, offset);
break;
#endif
+#if HAVE_ZSTD_H && HAVE_LIBZSTD
+ case 93: /* ZIPx Zstd compression. */
+ r = zip_read_data_zipx_zstd(a, buff, size, offset);
+ break;
+#endif
/* PPMd support is built-in, so we don't need any #if guards. */
case 98: /* ZIPx PPMd compression. */
r = zip_read_data_zipx_ppmd(a, buff, size, offset);
@@ -2880,13 +3177,27 @@ archive_read_format_zip_read_data(struct archive_read *a,
}
if (r != ARCHIVE_OK)
return (r);
- /* Update checksum */
- if (*size)
- zip->entry_crc32 = zip->crc32func(zip->entry_crc32, *buff,
- (unsigned)*size);
- /* If we hit the end, swallow any end-of-data marker. */
+ if (*size > 0) {
+ zip->computed_crc32 = zip->crc32func(zip->computed_crc32, *buff,
+ (unsigned)*size);
+ }
+ /* If we hit the end, swallow any end-of-data marker and
+ * verify the final check values. */
if (zip->end_of_entry) {
- /* Check file size, CRC against these values. */
+ consume_end_of_file_marker(a, zip);
+
+ /* Check computed CRC against header */
+ if ((!zip->hctx_valid ||
+ zip->entry->aes_extra.vendor != AES_VENDOR_AE_2) &&
+ zip->entry->crc32 != zip->computed_crc32
+ && !zip->ignore_crc32) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "ZIP bad CRC: 0x%lx should be 0x%lx",
+ (unsigned long)zip->computed_crc32,
+ (unsigned long)zip->entry->crc32);
+ return (ARCHIVE_FAILED);
+ }
+ /* Check file size against header. */
if (zip->entry->compressed_size !=
zip->entry_compressed_bytes_read) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
@@ -2894,7 +3205,7 @@ archive_read_format_zip_read_data(struct archive_read *a,
"(read %jd, expected %jd)",
(intmax_t)zip->entry_compressed_bytes_read,
(intmax_t)zip->entry->compressed_size);
- return (ARCHIVE_WARN);
+ return (ARCHIVE_FAILED);
}
/* Size field only stores the lower 32 bits of the actual
* size. */
@@ -2905,18 +3216,7 @@ archive_read_format_zip_read_data(struct archive_read *a,
"(read %jd, expected %jd)\n",
(intmax_t)zip->entry_uncompressed_bytes_read,
(intmax_t)zip->entry->uncompressed_size);
- return (ARCHIVE_WARN);
- }
- /* Check computed CRC against header */
- if ((!zip->hctx_valid ||
- zip->entry->aes_extra.vendor != AES_VENDOR_AE_2) &&
- zip->entry->crc32 != zip->entry_crc32
- && !zip->ignore_crc32) {
- archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "ZIP bad CRC: 0x%lx should be 0x%lx",
- (unsigned long)zip->entry_crc32,
- (unsigned long)zip->entry->crc32);
- return (ARCHIVE_WARN);
+ return (ARCHIVE_FAILED);
}
}
@@ -2948,6 +3248,12 @@ archive_read_format_zip_cleanup(struct archive_read *a)
}
#endif
+#if HAVE_ZSTD_H && HAVE_LIBZSTD
+ if (zip->zstdstream_valid) {
+ ZSTD_freeDStream(zip->zstdstream);
+ }
+#endif
+
free(zip->uncompressed_buffer);
if (zip->ppmd8_valid)
@@ -3777,6 +4083,17 @@ slurp_central_directory(struct archive_read *a, struct archive_entry* entry,
} else {
/* Generate resource fork name to find its
* resource file at zip->tree_rsrc. */
+
+ /* If this is an entry ending with slash,
+ * make the resource for name slash-less
+ * as the actual resource fork doesn't end with '/'.
+ */
+ size_t tmp_length = filename_length;
+ if (tmp_length > 0 && name[tmp_length - 1] == '/') {
+ tmp_length--;
+ r = rsrc_basename(name, tmp_length);
+ }
+
archive_strcpy(&(zip_entry->rsrcname),
"__MACOSX/");
archive_strncat(&(zip_entry->rsrcname),
@@ -3784,7 +4101,7 @@ slurp_central_directory(struct archive_read *a, struct archive_entry* entry,
archive_strcat(&(zip_entry->rsrcname), "._");
archive_strncat(&(zip_entry->rsrcname),
name + (r - name),
- filename_length - (r - name));
+ tmp_length - (r - name));
/* Register an entry to RB tree to sort it by
* file offset. */
__archive_rb_tree_insert_node(&zip->tree,
diff --git a/contrib/libarchive/libarchive/archive_string.c b/contrib/libarchive/libarchive/archive_string.c
index fa52ecd4ce6f..f39677ad7a26 100644
--- a/contrib/libarchive/libarchive/archive_string.c
+++ b/contrib/libarchive/libarchive/archive_string.c
@@ -25,7 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
/*
* Basic resizable string support, to simplify manipulating arbitrary-sized
@@ -553,6 +552,8 @@ archive_wstring_append_from_mbs_in_codepage(struct archive_wstring *dest,
} else
mbflag = MB_PRECOMPOSED;
+ mbflag |= MB_ERR_INVALID_CHARS;
+
buffsize = dest->length + length + 1;
do {
/* Allocate memory for WCS. */
@@ -745,7 +746,7 @@ archive_string_append_from_wcs_in_codepage(struct archive_string *as,
dp = &defchar_used;
count = WideCharToMultiByte(to_cp, 0, ws, wslen,
as->s + as->length,
- (int)as->buffer_length - as->length - 1, NULL, dp);
+ (int)as->buffer_length - (int)as->length - 1, NULL, dp);
if (count == 0 &&
GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
/* Expand the MBS buffer and retry. */
@@ -1324,6 +1325,10 @@ free_sconv_object(struct archive_string_conv *sc)
}
#if defined(_WIN32) && !defined(__CYGWIN__)
+# if defined(WINAPI_FAMILY_PARTITION) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+# define GetOEMCP() CP_OEMCP
+# endif
+
static unsigned
my_atoi(const char *p)
{
@@ -1523,7 +1528,7 @@ get_current_codepage(void)
p = strrchr(locale, '.');
if (p == NULL)
return (GetACP());
- if (strcmp(p+1, "utf8") == 0)
+ if ((strcmp(p+1, "utf8") == 0) || (strcmp(p+1, "UTF-8") == 0))
return CP_UTF8;
cp = my_atoi(p+1);
if ((int)cp <= 0)
@@ -3988,10 +3993,10 @@ int
archive_mstring_get_mbs_l(struct archive *a, struct archive_mstring *aes,
const char **p, size_t *length, struct archive_string_conv *sc)
{
- int r, ret = 0;
-
- (void)r; /* UNUSED */
+ int ret = 0;
#if defined(_WIN32) && !defined(__CYGWIN__)
+ int r;
+
/*
* Internationalization programming on Windows must use Wide
* characters because Windows platform cannot make locale UTF-8.
@@ -4223,6 +4228,17 @@ archive_mstring_update_utf8(struct archive *a, struct archive_mstring *aes,
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
+
if (a == NULL)
free_sconv_object(sc);
if (r != 0)
diff --git a/contrib/libarchive/libarchive/archive_string.h b/contrib/libarchive/libarchive/archive_string.h
index ccd696100687..e8987867d3ce 100644
--- a/contrib/libarchive/libarchive/archive_string.h
+++ b/contrib/libarchive/libarchive/archive_string.h
@@ -21,9 +21,6 @@
* 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.
- *
- * $FreeBSD$
- *
*/
#ifndef ARCHIVE_STRING_H_INCLUDED
diff --git a/contrib/libarchive/libarchive/archive_string_composition.h b/contrib/libarchive/libarchive/archive_string_composition.h
index d0ac340961a0..e917036f1167 100644
--- a/contrib/libarchive/libarchive/archive_string_composition.h
+++ b/contrib/libarchive/libarchive/archive_string_composition.h
@@ -22,8 +22,6 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD$
- *
*/
/*
diff --git a/contrib/libarchive/libarchive/archive_string_sprintf.c b/contrib/libarchive/libarchive/archive_string_sprintf.c
index 3c9b4c601327..c785e12bdf6d 100644
--- a/contrib/libarchive/libarchive/archive_string_sprintf.c
+++ b/contrib/libarchive/libarchive/archive_string_sprintf.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
/*
* The use of printf()-family functions can be troublesome
diff --git a/contrib/libarchive/libarchive/archive_util.3 b/contrib/libarchive/libarchive/archive_util.3
index d5d4e7dfd7d5..3aa508f25aa2 100644
--- a/contrib/libarchive/libarchive/archive_util.3
+++ b/contrib/libarchive/libarchive/archive_util.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 2, 2012
.Dt ARCHIVE_UTIL 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_util.c b/contrib/libarchive/libarchive/archive_util.c
index 086e85d9df8e..7b918fef04b8 100644
--- a/contrib/libarchive/libarchive/archive_util.c
+++ b/contrib/libarchive/libarchive/archive_util.c
@@ -25,7 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -42,9 +41,20 @@ __FBSDID("$FreeBSD$");
#ifdef HAVE_STRING_H
#include <string.h>
#endif
-#if defined(HAVE_WINCRYPT_H) && !defined(__CYGWIN__)
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+/* don't use bcrypt when XP needs to be supported */
+#include <bcrypt.h>
+
+/* Common in other bcrypt implementations, but missing from VS2008. */
+#ifndef BCRYPT_SUCCESS
+#define BCRYPT_SUCCESS(r) ((NTSTATUS)(r) == STATUS_SUCCESS)
+#endif
+
+#elif defined(HAVE_WINCRYPT_H)
#include <wincrypt.h>
#endif
+#endif
#ifdef HAVE_ZLIB_H
#include <zlib.h>
#endif
@@ -233,20 +243,21 @@ __archive_mktempx(const char *tmpdir, wchar_t *template)
L'm', L'n', L'o', L'p', L'q', L'r', L's', L't',
L'u', L'v', L'w', L'x', L'y', L'z'
};
- HCRYPTPROV hProv;
struct archive_wstring temp_name;
wchar_t *ws;
DWORD attr;
wchar_t *xp, *ep;
int fd;
-
- hProv = (HCRYPTPROV)NULL;
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ BCRYPT_ALG_HANDLE hAlg = NULL;
+#else
+ HCRYPTPROV hProv = (HCRYPTPROV)NULL;
+#endif
fd = -1;
ws = NULL;
+ archive_string_init(&temp_name);
if (template == NULL) {
- archive_string_init(&temp_name);
-
/* Get a temporary directory. */
if (tmpdir == NULL) {
size_t l;
@@ -314,23 +325,42 @@ __archive_mktempx(const char *tmpdir, wchar_t *template)
abort();
}
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ if (!BCRYPT_SUCCESS(BCryptOpenAlgorithmProvider(&hAlg, BCRYPT_RNG_ALGORITHM,
+ NULL, 0))) {
+ la_dosmaperr(GetLastError());
+ goto exit_tmpfile;
+ }
+#else
if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT)) {
la_dosmaperr(GetLastError());
goto exit_tmpfile;
}
+#endif
for (;;) {
wchar_t *p;
HANDLE h;
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+ CREATEFILE2_EXTENDED_PARAMETERS createExParams;
+#endif
/* Generate a random file name through CryptGenRandom(). */
p = xp;
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ if (!BCRYPT_SUCCESS(BCryptGenRandom(hAlg, (PUCHAR)p,
+ (DWORD)(ep - p)*sizeof(wchar_t), 0))) {
+ la_dosmaperr(GetLastError());
+ goto exit_tmpfile;
+ }
+#else
if (!CryptGenRandom(hProv, (DWORD)(ep - p)*sizeof(wchar_t),
(BYTE*)p)) {
la_dosmaperr(GetLastError());
goto exit_tmpfile;
}
+#endif
for (; p < ep; p++)
*p = num[((DWORD)*p) % (sizeof(num)/sizeof(num[0]))];
@@ -347,6 +377,17 @@ __archive_mktempx(const char *tmpdir, wchar_t *template)
/* mkstemp */
attr = FILE_ATTRIBUTE_NORMAL;
}
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+ ZeroMemory(&createExParams, sizeof(createExParams));
+ createExParams.dwSize = sizeof(createExParams);
+ createExParams.dwFileAttributes = attr & 0xFFFF;
+ createExParams.dwFileFlags = attr & 0xFFF00000;
+ h = CreateFile2(ws,
+ GENERIC_READ | GENERIC_WRITE | DELETE,
+ 0,/* Not share */
+ CREATE_NEW,
+ &createExParams);
+#else
h = CreateFileW(ws,
GENERIC_READ | GENERIC_WRITE | DELETE,
0,/* Not share */
@@ -354,6 +395,7 @@ __archive_mktempx(const char *tmpdir, wchar_t *template)
CREATE_NEW,/* Create a new file only */
attr,
NULL);
+#endif
if (h == INVALID_HANDLE_VALUE) {
/* The same file already exists. retry with
* a new filename. */
@@ -372,8 +414,13 @@ __archive_mktempx(const char *tmpdir, wchar_t *template)
break;/* success! */
}
exit_tmpfile:
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ if (hAlg != NULL)
+ BCryptCloseAlgorithmProvider(hAlg, 0);
+#else
if (hProv != (HCRYPTPROV)NULL)
CryptReleaseContext(hProv, 0);
+#endif
free(ws);
if (template == temp_name.s)
archive_wstring_free(&temp_name);
diff --git a/contrib/libarchive/libarchive/archive_version_details.c b/contrib/libarchive/libarchive/archive_version_details.c
index bfb20eab2027..29be24f3222e 100644
--- a/contrib/libarchive/libarchive/archive_version_details.c
+++ b/contrib/libarchive/libarchive/archive_version_details.c
@@ -25,7 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/archive_util.c 201098 2009-12-28 02:58:14Z kientzle $");
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
diff --git a/contrib/libarchive/libarchive/archive_virtual.c b/contrib/libarchive/libarchive/archive_virtual.c
index ee663d6cfac2..97e0b8a0d7b7 100644
--- a/contrib/libarchive/libarchive/archive_virtual.c
+++ b/contrib/libarchive/libarchive/archive_virtual.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#include "archive.h"
#include "archive_entry.h"
diff --git a/contrib/libarchive/libarchive/archive_write.3 b/contrib/libarchive/libarchive/archive_write.3
index e7f7f1384ee8..227e4e028449 100644
--- a/contrib/libarchive/libarchive/archive_write.3
+++ b/contrib/libarchive/libarchive/archive_write.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 2, 2012
.Dt ARCHIVE_WRITE 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_write.c b/contrib/libarchive/libarchive/archive_write.c
index c20876341df0..b70bc785c738 100644
--- a/contrib/libarchive/libarchive/archive_write.c
+++ b/contrib/libarchive/libarchive/archive_write.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
/*
* This file contains the "essential" portions of the write API, that
@@ -60,8 +59,6 @@ __FBSDID("$FreeBSD$");
#include "archive_private.h"
#include "archive_write_private.h"
-static struct archive_vtable *archive_write_vtable(void);
-
static int _archive_filter_code(struct archive *, int);
static const char *_archive_filter_name(struct archive *, int);
static int64_t _archive_filter_bytes(struct archive *, int);
@@ -79,26 +76,18 @@ struct archive_none {
char *next;
};
-static struct archive_vtable *
-archive_write_vtable(void)
-{
- static struct archive_vtable av;
- static int inited = 0;
-
- if (!inited) {
- av.archive_close = _archive_write_close;
- av.archive_filter_bytes = _archive_filter_bytes;
- av.archive_filter_code = _archive_filter_code;
- av.archive_filter_name = _archive_filter_name;
- av.archive_filter_count = _archive_write_filter_count;
- av.archive_free = _archive_write_free;
- av.archive_write_header = _archive_write_header;
- av.archive_write_finish_entry = _archive_write_finish_entry;
- av.archive_write_data = _archive_write_data;
- inited = 1;
- }
- return (&av);
-}
+static const struct archive_vtable
+archive_write_vtable = {
+ .archive_close = _archive_write_close,
+ .archive_filter_bytes = _archive_filter_bytes,
+ .archive_filter_code = _archive_filter_code,
+ .archive_filter_name = _archive_filter_name,
+ .archive_filter_count = _archive_write_filter_count,
+ .archive_free = _archive_write_free,
+ .archive_write_header = _archive_write_header,
+ .archive_write_finish_entry = _archive_write_finish_entry,
+ .archive_write_data = _archive_write_data,
+};
/*
* Allocate, initialize and return an archive object.
@@ -114,7 +103,7 @@ archive_write_new(void)
return (NULL);
a->archive.magic = ARCHIVE_WRITE_MAGIC;
a->archive.state = ARCHIVE_STATE_NEW;
- a->archive.vtable = archive_write_vtable();
+ a->archive.vtable = &archive_write_vtable;
/*
* The value 10240 here matches the traditional tar default,
* but is otherwise arbitrary.
@@ -125,7 +114,7 @@ archive_write_new(void)
/* Initialize a block of nulls for padding purposes. */
a->null_length = 1024;
- nulls = (unsigned char *)calloc(1, a->null_length);
+ nulls = (unsigned char *)calloc(a->null_length, sizeof(unsigned char));
if (nulls == NULL) {
free(a);
return (NULL);
@@ -211,6 +200,10 @@ __archive_write_allocate_filter(struct archive *_a)
struct archive_write_filter *f;
f = calloc(1, sizeof(*f));
+
+ if (f == NULL)
+ return (NULL);
+
f->archive = _a;
f->state = ARCHIVE_WRITE_FILTER_STATE_NEW;
if (a->filter_first == NULL)
@@ -316,6 +309,25 @@ __archive_write_output(struct archive_write *a, const void *buff, size_t length)
return (__archive_write_filter(a->filter_first, buff, length));
}
+static int
+__archive_write_filters_flush(struct archive_write *a)
+{
+ struct archive_write_filter *f;
+ int ret, ret1;
+
+ ret = ARCHIVE_OK;
+ for (f = a->filter_first; f != NULL; f = f->next_filter) {
+ if (f->flush != NULL && f->bytes_written > 0) {
+ ret1 = (f->flush)(f);
+ if (ret1 < ret)
+ ret = ret1;
+ if (ret1 < ARCHIVE_WARN)
+ f->state = ARCHIVE_WRITE_FILTER_STATE_FATAL;
+ }
+ }
+ return (ret);
+}
+
int
__archive_write_nulls(struct archive_write *a, size_t length)
{
@@ -558,6 +570,10 @@ archive_write_open2(struct archive *_a, void *client_data,
a->client_data = client_data;
client_filter = __archive_write_allocate_filter(_a);
+
+ if (client_filter == NULL)
+ return (ARCHIVE_FATAL);
+
client_filter->open = archive_write_client_open;
client_filter->write = archive_write_client_write;
client_filter->close = archive_write_client_close;
@@ -742,6 +758,18 @@ _archive_write_header(struct archive *_a, struct archive_entry *entry)
return (ARCHIVE_FAILED);
}
+ /* Flush filters at boundary. */
+ r2 = __archive_write_filters_flush(a);
+ if (r2 == ARCHIVE_FAILED) {
+ return (ARCHIVE_FAILED);
+ }
+ if (r2 == ARCHIVE_FATAL) {
+ a->archive.state = ARCHIVE_STATE_FATAL;
+ return (ARCHIVE_FATAL);
+ }
+ if (r2 < ret)
+ ret = r2;
+
/* Format and write header. */
r2 = ((a->format_write_header)(a, entry));
if (r2 == ARCHIVE_FAILED) {
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter.c b/contrib/libarchive/libarchive/archive_write_add_filter.c
index 203f4142b5c9..aa962515a044 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c b/contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c
index 87fdb73ecb09..084d195402bc 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c
@@ -25,8 +25,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_by_name.c b/contrib/libarchive/libarchive/archive_write_add_filter_by_name.c
index ffa633c96371..fc62458c56ee 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_by_name.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_by_name.c
@@ -25,7 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c b/contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c
index 7001e9c6b309..561e11b5d70a 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c
@@ -26,8 +26,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_compression_bzip2.c 201091 2009-12-28 02:22:41Z kientzle $");
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
@@ -190,7 +188,7 @@ archive_compressor_bzip2_open(struct archive_write_filter *f)
memset(&data->stream, 0, sizeof(data->stream));
data->stream.next_out = data->compressed;
- data->stream.avail_out = data->compressed_buffer_size;
+ data->stream.avail_out = (uint32_t)data->compressed_buffer_size;
f->write = archive_compressor_bzip2_write;
/* Initialize compression library */
@@ -244,7 +242,7 @@ archive_compressor_bzip2_write(struct archive_write_filter *f,
/* Compress input data to output buffer */
SET_NEXT_IN(data, buff);
- data->stream.avail_in = length;
+ data->stream.avail_in = (uint32_t)length;
if (drive_compressor(f, data, 0))
return (ARCHIVE_FATAL);
return (ARCHIVE_OK);
@@ -313,7 +311,7 @@ drive_compressor(struct archive_write_filter *f,
return (ARCHIVE_FATAL);
}
data->stream.next_out = data->compressed;
- data->stream.avail_out = data->compressed_buffer_size;
+ data->stream.avail_out = (uint32_t)data->compressed_buffer_size;
}
/* If there's nothing to do, we're done. */
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_compress.c b/contrib/libarchive/libarchive/archive_write_add_filter_compress.c
index d404fae7dba4..78afebda3e35 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_compress.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_compress.c
@@ -58,8 +58,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_compression_compress.c 201111 2009-12-28 03:33:05Z kientzle $");
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
@@ -352,7 +350,7 @@ archive_compressor_compress_write(struct archive_write_filter *f,
while (length--) {
c = *bp++;
state->in_count++;
- state->cur_fcode = (c << 16) + state->cur_code;
+ state->cur_fcode = (c << 16) | state->cur_code;
i = ((c << HSHIFT) ^ state->cur_code); /* Xor hashing. */
if (state->hashtab[i] == state->cur_fcode) {
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_grzip.c b/contrib/libarchive/libarchive/archive_write_add_filter_grzip.c
index 371102d74c05..f8bb886061e5 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_grzip.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_grzip.c
@@ -25,8 +25,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_gzip.c b/contrib/libarchive/libarchive/archive_write_add_filter_gzip.c
index 8670d5ca7403..a7fabbfa6bd5 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_gzip.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_gzip.c
@@ -25,8 +25,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_compression_gzip.c 201081 2009-12-28 02:04:42Z kientzle $");
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_lrzip.c b/contrib/libarchive/libarchive/archive_write_add_filter_lrzip.c
index e215f8903259..fe974c93d5d0 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_lrzip.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_lrzip.c
@@ -25,8 +25,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_lz4.c b/contrib/libarchive/libarchive/archive_write_add_filter_lz4.c
index cf19fadd5633..24061a169521 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_lz4.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_lz4.c
@@ -25,8 +25,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
@@ -518,10 +516,10 @@ drive_compressor_independence(struct archive_write_filter *f, const char *p,
} else {
/* The buffer is not compressed. The compressed size was
* bigger than its uncompressed size. */
- archive_le32enc(data->out, length | 0x80000000);
+ archive_le32enc(data->out, (uint32_t)(length | 0x80000000));
data->out += 4;
memcpy(data->out, p, length);
- outsize = length;
+ outsize = (uint32_t)length;
}
data->out += outsize;
if (data->block_checksum) {
@@ -603,10 +601,10 @@ drive_compressor_dependence(struct archive_write_filter *f, const char *p,
} else {
/* The buffer is not compressed. The compressed size was
* bigger than its uncompressed size. */
- archive_le32enc(data->out, length | 0x80000000);
+ archive_le32enc(data->out, (uint32_t)(length | 0x80000000));
data->out += 4;
memcpy(data->out, p, length);
- outsize = length;
+ outsize = (uint32_t)length;
}
data->out += outsize;
if (data->block_checksum) {
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_lzop.c b/contrib/libarchive/libarchive/archive_write_add_filter_lzop.c
index 3bd9062e4d32..8580e58844af 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_lzop.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_lzop.c
@@ -25,7 +25,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
//#undef HAVE_LZO_LZOCONF_H
//#undef HAVE_LZO_LZO1X_H
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_none.c b/contrib/libarchive/libarchive/archive_write_add_filter_none.c
index 3c06c642e735..b7aa6d4bcd3c 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_none.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_none.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_compression_none.c 201080 2009-12-28 02:03:54Z kientzle $");
#include "archive.h"
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_program.c b/contrib/libarchive/libarchive/archive_write_add_filter_program.c
index c096e7227ba4..c661cc7f412f 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_program.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_program.c
@@ -25,7 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_compression_program.c 201104 2009-12-28 03:14:30Z kientzle $");
#ifdef HAVE_SYS_WAIT_H
# include <sys/wait.h>
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_uuencode.c b/contrib/libarchive/libarchive/archive_write_add_filter_uuencode.c
index 1ad458921928..42dec8def1f1 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_uuencode.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_uuencode.c
@@ -25,8 +25,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_xz.c b/contrib/libarchive/libarchive/archive_write_add_filter_xz.c
index 9dd2c30e5de7..18da08274d92 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_xz.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_xz.c
@@ -26,8 +26,6 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_compression_xz.c 201108 2009-12-28 03:28:21Z kientzle $");
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
@@ -251,13 +249,13 @@ archive_compressor_xz_init_stream(struct archive_write_filter *f,
int ds, log2dic, wedges;
/* Calculate a coded dictionary size */
- if (dict_size < (1 << 12) || dict_size > (1 << 27)) {
+ if (dict_size < (1 << 12) || dict_size > (1 << 29)) {
archive_set_error(f->archive, ARCHIVE_ERRNO_MISC,
"Unacceptable dictionary size for lzip: %d",
dict_size);
return (ARCHIVE_FATAL);
}
- for (log2dic = 27; log2dic >= 12; log2dic--) {
+ for (log2dic = 29; log2dic >= 12; log2dic--) {
if (dict_size & (1 << log2dic))
break;
}
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_zstd.c b/contrib/libarchive/libarchive/archive_write_add_filter_zstd.c
index c74a35cded20..7ea3d18c9b76 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_zstd.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_zstd.c
@@ -1,5 +1,6 @@
/*-
* Copyright (c) 2017 Sean Purcell
+ * Copyright (c) 2023-2024 Klara, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,18 +26,24 @@
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
-
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_STRING_H
#include <string.h>
#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
#ifdef HAVE_ZSTD_H
#include <zstd.h>
#endif
@@ -50,9 +57,24 @@ __FBSDID("$FreeBSD$");
struct private_data {
int compression_level;
-#if HAVE_ZSTD_H && HAVE_LIBZSTD
+ int threads;
+ int long_distance;
+#if HAVE_ZSTD_H && HAVE_ZSTD_compressStream
+ enum {
+ running,
+ finishing,
+ resetting,
+ } state;
+ int frame_per_file;
+ size_t min_frame_in;
+ size_t max_frame_in;
+ size_t min_frame_out;
+ size_t max_frame_out;
+ size_t cur_frame;
+ size_t cur_frame_in;
+ size_t cur_frame_out;
+ size_t total_in;
ZSTD_CStream *cstream;
- int64_t total_in;
ZSTD_outBuffer out;
#else
struct archive_write_program_data *pdata;
@@ -66,17 +88,21 @@ struct private_data {
#define CLEVEL_STD_MAX 19 /* without using --ultra */
#define CLEVEL_MAX 22
+#define LONG_STD 27
+
#define MINVER_NEGCLEVEL 10304
#define MINVER_MINCLEVEL 10306
+#define MINVER_LONG 10302
static int archive_compressor_zstd_options(struct archive_write_filter *,
const char *, const char *);
static int archive_compressor_zstd_open(struct archive_write_filter *);
static int archive_compressor_zstd_write(struct archive_write_filter *,
const void *, size_t);
+static int archive_compressor_zstd_flush(struct archive_write_filter *);
static int archive_compressor_zstd_close(struct archive_write_filter *);
static int archive_compressor_zstd_free(struct archive_write_filter *);
-#if HAVE_ZSTD_H && HAVE_LIBZSTD
+#if HAVE_ZSTD_H && HAVE_ZSTD_compressStream
static int drive_compressor(struct archive_write_filter *,
struct private_data *, int, const void *, size_t);
#endif
@@ -102,12 +128,22 @@ archive_write_add_filter_zstd(struct archive *_a)
f->data = data;
f->open = &archive_compressor_zstd_open;
f->options = &archive_compressor_zstd_options;
+ f->flush = &archive_compressor_zstd_flush;
f->close = &archive_compressor_zstd_close;
f->free = &archive_compressor_zstd_free;
f->code = ARCHIVE_FILTER_ZSTD;
f->name = "zstd";
data->compression_level = CLEVEL_DEFAULT;
-#if HAVE_ZSTD_H && HAVE_LIBZSTD
+ data->threads = 0;
+ data->long_distance = 0;
+#if HAVE_ZSTD_H && HAVE_ZSTD_compressStream
+ data->frame_per_file = 0;
+ data->min_frame_in = 0;
+ data->max_frame_in = SIZE_MAX;
+ data->min_frame_out = 0;
+ data->max_frame_out = SIZE_MAX;
+ data->cur_frame_in = 0;
+ data->cur_frame_out = 0;
data->cstream = ZSTD_createCStream();
if (data->cstream == NULL) {
free(data);
@@ -134,7 +170,7 @@ static int
archive_compressor_zstd_free(struct archive_write_filter *f)
{
struct private_data *data = (struct private_data *)f->data;
-#if HAVE_ZSTD_H && HAVE_LIBZSTD
+#if HAVE_ZSTD_H && HAVE_ZSTD_compressStream
ZSTD_freeCStream(data->cstream);
free(data->out.dst);
#else
@@ -145,30 +181,57 @@ archive_compressor_zstd_free(struct archive_write_filter *f)
return (ARCHIVE_OK);
}
-static int string_is_numeric (const char* value)
+static int
+string_to_number(const char *string, intmax_t *numberp)
+{
+ char *end;
+
+ if (string == NULL || *string == '\0')
+ return (ARCHIVE_WARN);
+ *numberp = strtoimax(string, &end, 10);
+ if (end == string || *end != '\0' || errno == EOVERFLOW) {
+ *numberp = 0;
+ return (ARCHIVE_WARN);
+ }
+ return (ARCHIVE_OK);
+}
+
+#if HAVE_ZSTD_H && HAVE_ZSTD_compressStream
+static int
+string_to_size(const char *string, size_t *numberp)
{
- size_t len = strlen(value);
- size_t i;
-
- if (len == 0) {
- return (ARCHIVE_WARN);
- }
- else if (len == 1 && !(value[0] >= '0' && value[0] <= '9')) {
- return (ARCHIVE_WARN);
- }
- else if (!(value[0] >= '0' && value[0] <= '9') &&
- value[0] != '-' && value[0] != '+') {
- return (ARCHIVE_WARN);
- }
-
- for (i = 1; i < len; i++) {
- if (!(value[i] >= '0' && value[i] <= '9')) {
- return (ARCHIVE_WARN);
- }
- }
-
- return (ARCHIVE_OK);
+ uintmax_t number;
+ char *end;
+ unsigned int shift = 0;
+
+ if (string == NULL || *string == '\0' || *string == '-')
+ return (ARCHIVE_WARN);
+ number = strtoumax(string, &end, 10);
+ if (end > string) {
+ if (*end == 'K' || *end == 'k') {
+ shift = 10;
+ end++;
+ } else if (*end == 'M' || *end == 'm') {
+ shift = 20;
+ end++;
+ } else if (*end == 'G' || *end == 'g') {
+ shift = 30;
+ end++;
+ }
+ if (*end == 'B' || *end == 'b') {
+ end++;
+ }
+ }
+ if (end == string || *end != '\0' || errno == EOVERFLOW) {
+ return (ARCHIVE_WARN);
+ }
+ if (number > (uintmax_t)SIZE_MAX >> shift) {
+ return (ARCHIVE_WARN);
+ }
+ *numberp = (size_t)(number << shift);
+ return (ARCHIVE_OK);
}
+#endif
/*
* Set write options.
@@ -180,14 +243,14 @@ archive_compressor_zstd_options(struct archive_write_filter *f, const char *key,
struct private_data *data = (struct private_data *)f->data;
if (strcmp(key, "compression-level") == 0) {
- int level = atoi(value);
+ intmax_t level;
+ if (string_to_number(value, &level) != ARCHIVE_OK) {
+ return (ARCHIVE_WARN);
+ }
/* If we don't have the library, hard-code the max level */
int minimum = CLEVEL_MIN;
int maximum = CLEVEL_MAX;
- if (string_is_numeric(value) != ARCHIVE_OK) {
- return (ARCHIVE_WARN);
- }
-#if HAVE_ZSTD_H && HAVE_LIBZSTD
+#if HAVE_ZSTD_H && HAVE_ZSTD_compressStream
maximum = ZSTD_maxCLevel();
#if ZSTD_VERSION_NUMBER >= MINVER_MINCLEVEL
if (ZSTD_versionNumber() >= MINVER_MINCLEVEL) {
@@ -202,7 +265,82 @@ archive_compressor_zstd_options(struct archive_write_filter *f, const char *key,
if (level < minimum || level > maximum) {
return (ARCHIVE_WARN);
}
- data->compression_level = level;
+ data->compression_level = (int)level;
+ return (ARCHIVE_OK);
+ } else if (strcmp(key, "threads") == 0) {
+ intmax_t threads;
+ if (string_to_number(value, &threads) != ARCHIVE_OK) {
+ return (ARCHIVE_WARN);
+ }
+
+#if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_ONLN)
+ if (threads == 0) {
+ threads = sysconf(_SC_NPROCESSORS_ONLN);
+ }
+#elif !defined(__CYGWIN__) && defined(_WIN32_WINNT) && \
+ _WIN32_WINNT >= 0x0601 /* _WIN32_WINNT_WIN7 */
+ if (threads == 0) {
+ DWORD winCores = GetActiveProcessorCount(
+ ALL_PROCESSOR_GROUPS);
+ threads = (intmax_t)winCores;
+ }
+#endif
+ if (threads < 0 || threads > INT_MAX) {
+ return (ARCHIVE_WARN);
+ }
+ data->threads = (int)threads;
+ return (ARCHIVE_OK);
+#if HAVE_ZSTD_H && HAVE_ZSTD_compressStream
+ } else if (strcmp(key, "frame-per-file") == 0) {
+ data->frame_per_file = 1;
+ return (ARCHIVE_OK);
+ } else if (strcmp(key, "min-frame-in") == 0) {
+ if (string_to_size(value, &data->min_frame_in) != ARCHIVE_OK) {
+ return (ARCHIVE_WARN);
+ }
+ return (ARCHIVE_OK);
+ } else if (strcmp(key, "min-frame-out") == 0 ||
+ strcmp(key, "min-frame-size") == 0) {
+ if (string_to_size(value, &data->min_frame_out) != ARCHIVE_OK) {
+ return (ARCHIVE_WARN);
+ }
+ return (ARCHIVE_OK);
+ } else if (strcmp(key, "max-frame-in") == 0 ||
+ strcmp(key, "max-frame-size") == 0) {
+ if (string_to_size(value, &data->max_frame_in) != ARCHIVE_OK ||
+ data->max_frame_in < 1024) {
+ return (ARCHIVE_WARN);
+ }
+ return (ARCHIVE_OK);
+ } else if (strcmp(key, "max-frame-out") == 0) {
+ if (string_to_size(value, &data->max_frame_out) != ARCHIVE_OK ||
+ data->max_frame_out < 1024) {
+ return (ARCHIVE_WARN);
+ }
+ return (ARCHIVE_OK);
+#endif
+ }
+ else if (strcmp(key, "long") == 0) {
+ intmax_t long_distance;
+ if (string_to_number(value, &long_distance) != ARCHIVE_OK) {
+ return (ARCHIVE_WARN);
+ }
+#if HAVE_ZSTD_H && HAVE_ZSTD_compressStream && ZSTD_VERSION_NUMBER >= MINVER_LONG
+ ZSTD_bounds bounds = ZSTD_cParam_getBounds(ZSTD_c_windowLog);
+ if (ZSTD_isError(bounds.error)) {
+ int max_distance = ((int)(sizeof(size_t) == 4 ? 30 : 31));
+ if (((int)long_distance) < 10 || (int)long_distance > max_distance)
+ return (ARCHIVE_WARN);
+ } else {
+ if ((int)long_distance < bounds.lowerBound || (int)long_distance > bounds.upperBound)
+ return (ARCHIVE_WARN);
+ }
+#else
+ int max_distance = ((int)(sizeof(size_t) == 4 ? 30 : 31));
+ if (((int)long_distance) < 10 || (int)long_distance > max_distance)
+ return (ARCHIVE_WARN);
+#endif
+ data->long_distance = (int)long_distance;
return (ARCHIVE_OK);
}
@@ -212,7 +350,7 @@ archive_compressor_zstd_options(struct archive_write_filter *f, const char *key,
return (ARCHIVE_WARN);
}
-#if HAVE_ZSTD_H && HAVE_LIBZSTD
+#if HAVE_ZSTD_H && HAVE_ZSTD_compressStream
/*
* Setup callback.
*/
@@ -252,6 +390,12 @@ archive_compressor_zstd_open(struct archive_write_filter *f)
return (ARCHIVE_FATAL);
}
+ ZSTD_CCtx_setParameter(data->cstream, ZSTD_c_nbWorkers, data->threads);
+
+#if ZSTD_VERSION_NUMBER >= MINVER_LONG
+ ZSTD_CCtx_setParameter(data->cstream, ZSTD_c_windowLog, data->long_distance);
+#endif
+
return (ARCHIVE_OK);
}
@@ -263,15 +407,25 @@ archive_compressor_zstd_write(struct archive_write_filter *f, const void *buff,
size_t length)
{
struct private_data *data = (struct private_data *)f->data;
- int ret;
- /* Update statistics */
- data->total_in += length;
+ return (drive_compressor(f, data, 0, buff, length));
+}
- if ((ret = drive_compressor(f, data, 0, buff, length)) != ARCHIVE_OK)
- return (ret);
+/*
+ * Flush the compressed stream.
+ */
+static int
+archive_compressor_zstd_flush(struct archive_write_filter *f)
+{
+ struct private_data *data = (struct private_data *)f->data;
- return (ARCHIVE_OK);
+ if (data->frame_per_file && data->state == running) {
+ if (data->cur_frame_in > data->min_frame_in &&
+ data->cur_frame_out > data->min_frame_out) {
+ data->state = finishing;
+ }
+ }
+ return (drive_compressor(f, data, 1, NULL, 0));
}
/*
@@ -282,60 +436,77 @@ archive_compressor_zstd_close(struct archive_write_filter *f)
{
struct private_data *data = (struct private_data *)f->data;
- /* Finish zstd frame */
- return drive_compressor(f, data, 1, NULL, 0);
+ if (data->state == running)
+ data->state = finishing;
+ return (drive_compressor(f, data, 1, NULL, 0));
}
/*
* Utility function to push input data through compressor,
* writing full output blocks as necessary.
- *
- * Note that this handles both the regular write case (finishing ==
- * false) and the end-of-archive case (finishing == true).
*/
static int
drive_compressor(struct archive_write_filter *f,
- struct private_data *data, int finishing, const void *src, size_t length)
+ struct private_data *data, int flush, const void *src, size_t length)
{
- ZSTD_inBuffer in = (ZSTD_inBuffer) { src, length, 0 };
+ ZSTD_inBuffer in = { .src = src, .size = length, .pos = 0 };
+ size_t ipos, opos, zstdret = 0;
+ int ret;
for (;;) {
- if (data->out.pos == data->out.size) {
- const int ret = __archive_write_filter(f->next_filter,
- data->out.dst, data->out.size);
- if (ret != ARCHIVE_OK)
- return (ARCHIVE_FATAL);
- data->out.pos = 0;
+ ipos = in.pos;
+ opos = data->out.pos;
+ switch (data->state) {
+ case running:
+ if (in.pos == in.size)
+ return (ARCHIVE_OK);
+ zstdret = ZSTD_compressStream(data->cstream,
+ &data->out, &in);
+ if (ZSTD_isError(zstdret))
+ goto zstd_fatal;
+ break;
+ case finishing:
+ zstdret = ZSTD_endStream(data->cstream, &data->out);
+ if (ZSTD_isError(zstdret))
+ goto zstd_fatal;
+ if (zstdret == 0)
+ data->state = resetting;
+ break;
+ case resetting:
+ ZSTD_CCtx_reset(data->cstream, ZSTD_reset_session_only);
+ data->cur_frame++;
+ data->cur_frame_in = 0;
+ data->cur_frame_out = 0;
+ data->state = running;
+ break;
}
-
- /* If there's nothing to do, we're done. */
- if (!finishing && in.pos == in.size)
- return (ARCHIVE_OK);
-
- {
- const size_t zstdret = !finishing ?
- ZSTD_compressStream(data->cstream, &data->out, &in)
- : ZSTD_endStream(data->cstream, &data->out);
-
- if (ZSTD_isError(zstdret)) {
- archive_set_error(f->archive,
- ARCHIVE_ERRNO_MISC,
- "Zstd compression failed: %s",
- ZSTD_getErrorName(zstdret));
- return (ARCHIVE_FATAL);
- }
-
- /* If we're finishing, 0 means nothing left to flush */
- if (finishing && zstdret == 0) {
- const int ret = __archive_write_filter(f->next_filter,
- data->out.dst, data->out.pos);
- return (ret);
+ data->total_in += in.pos - ipos;
+ data->cur_frame_in += in.pos - ipos;
+ data->cur_frame_out += data->out.pos - opos;
+ if (data->state == running) {
+ if (data->cur_frame_in >= data->max_frame_in ||
+ data->cur_frame_out >= data->max_frame_out) {
+ data->state = finishing;
}
}
+ if (data->out.pos == data->out.size ||
+ (flush && data->out.pos > 0)) {
+ ret = __archive_write_filter(f->next_filter,
+ data->out.dst, data->out.pos);
+ if (ret != ARCHIVE_OK)
+ goto fatal;
+ data->out.pos = 0;
+ }
}
+zstd_fatal:
+ archive_set_error(f->archive, ARCHIVE_ERRNO_MISC,
+ "Zstd compression failed: %s",
+ ZSTD_getErrorName(zstdret));
+fatal:
+ return (ARCHIVE_FATAL);
}
-#else /* HAVE_ZSTD_H && HAVE_LIBZSTD */
+#else /* HAVE_ZSTD_H && HAVE_ZSTD_compressStream */
static int
archive_compressor_zstd_open(struct archive_write_filter *f)
@@ -349,23 +520,23 @@ archive_compressor_zstd_open(struct archive_write_filter *f)
archive_strcpy(&as, "zstd --no-check");
if (data->compression_level < CLEVEL_STD_MIN) {
- struct archive_string as2;
- archive_string_init(&as2);
- archive_string_sprintf(&as2, " --fast=%d", -data->compression_level);
- archive_string_concat(&as, &as2);
- archive_string_free(&as2);
+ archive_string_sprintf(&as, " --fast=%d", -data->compression_level);
} else {
- struct archive_string as2;
- archive_string_init(&as2);
- archive_string_sprintf(&as2, " -%d", data->compression_level);
- archive_string_concat(&as, &as2);
- archive_string_free(&as2);
+ archive_string_sprintf(&as, " -%d", data->compression_level);
}
if (data->compression_level > CLEVEL_STD_MAX) {
archive_strcat(&as, " --ultra");
}
+ if (data->threads != 0) {
+ archive_string_sprintf(&as, " --threads=%d", data->threads);
+ }
+
+ if (data->long_distance != 0) {
+ archive_string_sprintf(&as, " --long=%d", data->long_distance);
+ }
+
f->write = archive_compressor_zstd_write;
r = __archive_write_program_open(f, data->pdata, as.s);
archive_string_free(&as);
@@ -382,6 +553,14 @@ archive_compressor_zstd_write(struct archive_write_filter *f, const void *buff,
}
static int
+archive_compressor_zstd_flush(struct archive_write_filter *f)
+{
+ (void)f; /* UNUSED */
+
+ return (ARCHIVE_OK);
+}
+
+static int
archive_compressor_zstd_close(struct archive_write_filter *f)
{
struct private_data *data = (struct private_data *)f->data;
@@ -389,4 +568,4 @@ archive_compressor_zstd_close(struct archive_write_filter *f)
return __archive_write_program_close(f, data->pdata);
}
-#endif /* HAVE_ZSTD_H && HAVE_LIBZSTD */
+#endif /* HAVE_ZSTD_H && HAVE_ZSTD_compressStream */
diff --git a/contrib/libarchive/libarchive/archive_write_blocksize.3 b/contrib/libarchive/libarchive/archive_write_blocksize.3
index 4973f9990566..3508851cefab 100644
--- a/contrib/libarchive/libarchive/archive_write_blocksize.3
+++ b/contrib/libarchive/libarchive/archive_write_blocksize.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 2, 2012
.Dt ARCHIVE_WRITE_BLOCKSIZE 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_write_data.3 b/contrib/libarchive/libarchive/archive_write_data.3
index bc208b45d53a..9f239f7c9ece 100644
--- a/contrib/libarchive/libarchive/archive_write_data.3
+++ b/contrib/libarchive/libarchive/archive_write_data.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 28, 2017
.Dt ARCHIVE_WRITE_DATA 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_write_disk.3 b/contrib/libarchive/libarchive/archive_write_disk.3
index 2fa016e4547b..b046168c338c 100644
--- a/contrib/libarchive/libarchive/archive_write_disk.3
+++ b/contrib/libarchive/libarchive/archive_write_disk.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd January 19, 2020
.Dt ARCHIVE_WRITE_DISK 3
.Os
@@ -163,14 +161,14 @@ caused by archives that (deliberately or otherwise) extract
files outside of the current directory.
The default is not to perform this check.
If
-.It Cm ARCHIVE_EXTRACT_SPARSE
-Scan data for blocks of NUL bytes and try to recreate them with holes.
-This results in sparse files, independent of whether the archive format
-supports or uses them.
.Cm ARCHIVE_EXTRACT_UNLINK
is specified together with this option, the library will
remove any intermediate symlinks it finds and return an
error only if such symlink could not be removed.
+.It Cm ARCHIVE_EXTRACT_SPARSE
+Scan data for blocks of NUL bytes and try to recreate them with holes.
+This results in sparse files, independent of whether the archive format
+supports or uses them.
.It Cm ARCHIVE_EXTRACT_TIME
The timestamps (mtime, ctime, and atime) should be restored.
By default, they are ignored.
diff --git a/contrib/libarchive/libarchive/archive_write_disk_posix.c b/contrib/libarchive/libarchive/archive_write_disk_posix.c
index 1aa00840bf4c..d69c77ea0517 100644
--- a/contrib/libarchive/libarchive/archive_write_disk_posix.c
+++ b/contrib/libarchive/libarchive/archive_write_disk_posix.c
@@ -26,7 +26,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#if !defined(_WIN32) || defined(__CYGWIN__)
@@ -397,8 +396,7 @@ static int set_times_from_entry(struct archive_write_disk *);
static struct fixup_entry *sort_dir_list(struct fixup_entry *p);
static ssize_t write_data_block(struct archive_write_disk *,
const char *, size_t);
-
-static struct archive_vtable *archive_write_disk_vtable(void);
+static void close_file_descriptor(struct archive_write_disk *);
static int _archive_write_disk_close(struct archive *);
static int _archive_write_disk_free(struct archive *);
@@ -516,7 +514,12 @@ lazy_stat(struct archive_write_disk *a)
* XXX At this point, symlinks should not be hit, otherwise
* XXX a race occurred. Do we want to check explicitly for that?
*/
- if (lstat(a->name, &a->st) == 0) {
+#ifdef HAVE_LSTAT
+ if (lstat(a->name, &a->st) == 0)
+#else
+ if (la_stat(a->name, &a->st) == 0)
+#endif
+ {
a->pst = &a->st;
return (ARCHIVE_OK);
}
@@ -524,25 +527,16 @@ lazy_stat(struct archive_write_disk *a)
return (ARCHIVE_WARN);
}
-static struct archive_vtable *
-archive_write_disk_vtable(void)
-{
- static struct archive_vtable av;
- static int inited = 0;
-
- if (!inited) {
- av.archive_close = _archive_write_disk_close;
- av.archive_filter_bytes = _archive_write_disk_filter_bytes;
- av.archive_free = _archive_write_disk_free;
- av.archive_write_header = _archive_write_disk_header;
- av.archive_write_finish_entry
- = _archive_write_disk_finish_entry;
- av.archive_write_data = _archive_write_disk_data;
- av.archive_write_data_block = _archive_write_disk_data_block;
- inited = 1;
- }
- return (&av);
-}
+static const struct archive_vtable
+archive_write_disk_vtable = {
+ .archive_close = _archive_write_disk_close,
+ .archive_filter_bytes = _archive_write_disk_filter_bytes,
+ .archive_free = _archive_write_disk_free,
+ .archive_write_header = _archive_write_disk_header,
+ .archive_write_finish_entry = _archive_write_disk_finish_entry,
+ .archive_write_data = _archive_write_disk_data,
+ .archive_write_data_block = _archive_write_disk_data_block,
+};
static int64_t
_archive_write_disk_filter_bytes(struct archive *_a, int n)
@@ -1616,12 +1610,12 @@ hfs_write_data_block(struct archive_write_disk *a, const char *buff,
"Seek failed");
return (ARCHIVE_FATAL);
} else if (a->offset > a->fd_offset) {
- int64_t skip = a->offset - a->fd_offset;
+ uint64_t skip = a->offset - a->fd_offset;
char nullblock[1024];
memset(nullblock, 0, sizeof(nullblock));
while (skip > 0) {
- if (skip > (int64_t)sizeof(nullblock))
+ if (skip > sizeof(nullblock))
bytes_written = hfs_write_decmpfs_block(
a, nullblock, sizeof(nullblock));
else
@@ -1736,8 +1730,10 @@ _archive_write_disk_finish_entry(struct archive *_a)
else
r = hfs_write_data_block(
a, null_d, a->file_remaining_bytes);
- if (r < 0)
+ if (r < 0) {
+ close_file_descriptor(a);
return ((int)r);
+ }
}
#endif
} else {
@@ -1746,6 +1742,7 @@ _archive_write_disk_finish_entry(struct archive *_a)
a->filesize == 0) {
archive_set_error(&a->archive, errno,
"File size could not be restored");
+ close_file_descriptor(a);
return (ARCHIVE_FAILED);
}
#endif
@@ -1755,8 +1752,10 @@ _archive_write_disk_finish_entry(struct archive *_a)
* to see what happened.
*/
a->pst = NULL;
- if ((ret = lazy_stat(a)) != ARCHIVE_OK)
- return (ret);
+ if ((ret = lazy_stat(a)) != ARCHIVE_OK) {
+ close_file_descriptor(a);
+ return (ret);
+ }
/* We can use lseek()/write() to extend the file if
* ftruncate didn't work or isn't available. */
if (a->st.st_size < a->filesize) {
@@ -1764,11 +1763,13 @@ _archive_write_disk_finish_entry(struct archive *_a)
if (lseek(a->fd, a->filesize - 1, SEEK_SET) < 0) {
archive_set_error(&a->archive, errno,
"Seek failed");
+ close_file_descriptor(a);
return (ARCHIVE_FATAL);
}
if (write(a->fd, &nul, 1) < 0) {
archive_set_error(&a->archive, errno,
"Write to restore size failed");
+ close_file_descriptor(a);
return (ARCHIVE_FATAL);
}
a->pst = NULL;
@@ -1996,7 +1997,7 @@ archive_write_disk_new(void)
a->archive.magic = ARCHIVE_WRITE_DISK_MAGIC;
/* We're ready to write a header immediately. */
a->archive.state = ARCHIVE_STATE_HEADER;
- a->archive.vtable = archive_write_disk_vtable();
+ a->archive.vtable = &archive_write_disk_vtable;
a->start_time = time(NULL);
/* Query and restore the umask. */
umask(a->user_umask = umask(0));
@@ -2007,6 +2008,8 @@ archive_write_disk_new(void)
free(a);
return (NULL);
}
+ a->path_safe.s[0] = 0;
+
#ifdef HAVE_ZLIB_H
a->decmpfs_compression_level = 5;
#endif
@@ -2163,7 +2166,11 @@ restore_entry(struct archive_write_disk *a)
* then don't follow it.
*/
if (r != 0 || !S_ISDIR(a->mode))
+#ifdef HAVE_LSTAT
r = lstat(a->name, &a->st);
+#else
+ r = la_stat(a->name, &a->st);
+#endif
if (r != 0) {
archive_set_error(&a->archive, errno,
"Can't stat existing object");
@@ -2559,7 +2566,12 @@ _archive_write_disk_close(struct archive *_a)
goto skip_fixup_entry;
} else
#endif
- if (lstat(p->name, &st) != 0 ||
+ if (
+#ifdef HAVE_LSTAT
+ lstat(p->name, &st) != 0 ||
+#else
+ la_stat(p->name, &st) != 0 ||
+#endif
la_verify_filetype(st.st_mode,
p->filetype) == 0) {
goto skip_fixup_entry;
@@ -2574,7 +2586,12 @@ _archive_write_disk_close(struct archive *_a)
goto skip_fixup_entry;
} else
#endif
- if (lstat(p->name, &st) != 0 ||
+ if (
+#ifdef HAVE_LSTAT
+ lstat(p->name, &st) != 0 ||
+#else
+ la_stat(p->name, &st) != 0 ||
+#endif
la_verify_filetype(st.st_mode,
p->filetype) == 0) {
goto skip_fixup_entry;
@@ -2794,8 +2811,8 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
!(defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT))
/* Platform doesn't have lstat, so we can't look for symlinks. */
(void)path; /* UNUSED */
- (void)error_number; /* UNUSED */
- (void)error_string; /* UNUSED */
+ (void)a_eno; /* UNUSED */
+ (void)a_estr; /* UNUSED */
(void)flags; /* UNUSED */
(void)checking_linkname; /* UNUSED */
return (ARCHIVE_OK);
@@ -2804,7 +2821,7 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
char *tail;
char *head;
int last;
- char c;
+ char c = '\0';
int r;
struct stat st;
int chdir_fd;
@@ -2868,8 +2885,10 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
/* Check that we haven't hit a symlink. */
#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
r = fstatat(chdir_fd, head, &st, AT_SYMLINK_NOFOLLOW);
-#else
+#elif defined(HAVE_LSTAT)
r = lstat(head, &st);
+#else
+ r = la_stat(head, &st);
#endif
if (r != 0) {
tail[0] = c;
@@ -3567,7 +3586,9 @@ set_time(int fd, int mode, const char *name,
(void)fd; /* UNUSED */
(void)mode; /* UNUSED */
(void)name; /* UNUSED */
+ (void)atime; /* UNUSED */
(void)atime_nsec; /* UNUSED */
+ (void)mtime; /* UNUSED */
(void)mtime_nsec; /* UNUSED */
return (ARCHIVE_WARN);
#endif
@@ -4400,8 +4421,14 @@ fixup_appledouble(struct archive_write_disk *a, const char *pathname)
*/
archive_strncpy(&datafork, pathname, p - pathname);
archive_strcat(&datafork, p + 2);
- if (lstat(datafork.s, &st) == -1 ||
- (st.st_mode & AE_IFMT) != AE_IFREG)
+ if (
+#ifdef HAVE_LSTAT
+ lstat(datafork.s, &st) == -1 ||
+#else
+ la_stat(datafork.s, &st) == -1 ||
+#endif
+ (((st.st_mode & AE_IFMT) != AE_IFREG) &&
+ ((st.st_mode & AE_IFMT) != AE_IFDIR)))
goto skip_appledouble;
/*
@@ -4716,5 +4743,17 @@ archive_write_disk_set_acls(struct archive *a, int fd, const char *name,
}
#endif
+/*
+ * Close the file descriptor if one is open.
+ */
+static void close_file_descriptor(struct archive_write_disk* a)
+{
+ if (a->fd >= 0) {
+ close(a->fd);
+ a->fd = -1;
+ }
+}
+
+
#endif /* !_WIN32 || __CYGWIN__ */
diff --git a/contrib/libarchive/libarchive/archive_write_disk_private.h b/contrib/libarchive/libarchive/archive_write_disk_private.h
index 7c5e6f815d72..3efe2bad336a 100644
--- a/contrib/libarchive/libarchive/archive_write_disk_private.h
+++ b/contrib/libarchive/libarchive/archive_write_disk_private.h
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef ARCHIVE_WRITE_DISK_PRIVATE_H_INCLUDED
diff --git a/contrib/libarchive/libarchive/archive_write_disk_set_standard_lookup.c b/contrib/libarchive/libarchive/archive_write_disk_set_standard_lookup.c
index a66964a94cec..964169898e45 100644
--- a/contrib/libarchive/libarchive/archive_write_disk_set_standard_lookup.c
+++ b/contrib/libarchive/libarchive/archive_write_disk_set_standard_lookup.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
diff --git a/contrib/libarchive/libarchive/archive_write_filter.3 b/contrib/libarchive/libarchive/archive_write_filter.3
index c83eb77b6a5e..b39cabe04782 100644
--- a/contrib/libarchive/libarchive/archive_write_filter.3
+++ b/contrib/libarchive/libarchive/archive_write_filter.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd August 14, 2014
.Dt ARCHIVE_WRITE_FILTER 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_write_finish_entry.3 b/contrib/libarchive/libarchive/archive_write_finish_entry.3
index 5797e16a6dbc..574d6008581e 100644
--- a/contrib/libarchive/libarchive/archive_write_finish_entry.3
+++ b/contrib/libarchive/libarchive/archive_write_finish_entry.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 28, 2017
.Dt ARCHIVE_WRITE_FINISH_ENTRY 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_write_format.3 b/contrib/libarchive/libarchive/archive_write_format.3
index 653089f7795d..9e331368aeef 100644
--- a/contrib/libarchive/libarchive/archive_write_format.3
+++ b/contrib/libarchive/libarchive/archive_write_format.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 14, 2013
.Dt ARCHIVE_WRITE_FORMAT 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_write_free.3 b/contrib/libarchive/libarchive/archive_write_free.3
index 5210e2a633de..f6b84eae918f 100644
--- a/contrib/libarchive/libarchive/archive_write_free.3
+++ b/contrib/libarchive/libarchive/archive_write_free.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 2, 2012
.Dt ARCHIVE_WRITE_FREE 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_write_header.3 b/contrib/libarchive/libarchive/archive_write_header.3
index 2217b1871bba..9c6ecec4e097 100644
--- a/contrib/libarchive/libarchive/archive_write_header.3
+++ b/contrib/libarchive/libarchive/archive_write_header.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 2, 2012
.Dt ARCHIVE_WRITE_HEADER 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_write_new.3 b/contrib/libarchive/libarchive/archive_write_new.3
index 788cbb855985..15a7c40703bf 100644
--- a/contrib/libarchive/libarchive/archive_write_new.3
+++ b/contrib/libarchive/libarchive/archive_write_new.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 2, 2012
.Dt ARCHIVE_WRITE_NEW 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_write_open.3 b/contrib/libarchive/libarchive/archive_write_open.3
index 29bffe49eb97..b12d097028c0 100644
--- a/contrib/libarchive/libarchive/archive_write_open.3
+++ b/contrib/libarchive/libarchive/archive_write_open.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd November 12, 2020
.Dt ARCHIVE_WRITE_OPEN 3
.Os
@@ -218,6 +216,7 @@ On failure, the callback should invoke
.Fn archive_set_error
to register an error code and message and
return
+.Cm ARCHIVE_FATAL .
.Bl -item -offset indent
.It
.Ft typedef int
diff --git a/contrib/libarchive/libarchive/archive_write_open_fd.c b/contrib/libarchive/libarchive/archive_write_open_fd.c
index 1e6971d554db..a58ae047967b 100644
--- a/contrib/libarchive/libarchive/archive_write_open_fd.c
+++ b/contrib/libarchive/libarchive/archive_write_open_fd.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
diff --git a/contrib/libarchive/libarchive/archive_write_open_file.c b/contrib/libarchive/libarchive/archive_write_open_file.c
index fb5c9c734cd0..d787da3af388 100644
--- a/contrib/libarchive/libarchive/archive_write_open_file.c
+++ b/contrib/libarchive/libarchive/archive_write_open_file.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
diff --git a/contrib/libarchive/libarchive/archive_write_open_filename.c b/contrib/libarchive/libarchive/archive_write_open_filename.c
index 965f40e3bae5..7dc73d55f43e 100644
--- a/contrib/libarchive/libarchive/archive_write_open_filename.c
+++ b/contrib/libarchive/libarchive/archive_write_open_filename.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
diff --git a/contrib/libarchive/libarchive/archive_write_open_memory.c b/contrib/libarchive/libarchive/archive_write_open_memory.c
index 9ef446bd1e8d..609cc47d964a 100644
--- a/contrib/libarchive/libarchive/archive_write_open_memory.c
+++ b/contrib/libarchive/libarchive/archive_write_open_memory.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#include <errno.h>
#include <stdlib.h>
diff --git a/contrib/libarchive/libarchive/archive_write_private.h b/contrib/libarchive/libarchive/archive_write_private.h
index 98518a39c39b..f259ccb16546 100644
--- a/contrib/libarchive/libarchive/archive_write_private.h
+++ b/contrib/libarchive/libarchive/archive_write_private.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef ARCHIVE_WRITE_PRIVATE_H_INCLUDED
@@ -53,6 +51,7 @@ struct archive_write_filter {
const char *key, const char *value);
int (*open)(struct archive_write_filter *);
int (*write)(struct archive_write_filter *, const void *, size_t);
+ int (*flush)(struct archive_write_filter *);
int (*close)(struct archive_write_filter *);
int (*free)(struct archive_write_filter *);
void *data;
@@ -159,7 +158,7 @@ int __archive_write_program_write(struct archive_write_filter *,
struct archive_write_program_data *, const void *, size_t);
/*
- * Get a encryption passphrase.
+ * Get an encryption passphrase.
*/
const char * __archive_write_get_passphrase(struct archive_write *a);
#endif
diff --git a/contrib/libarchive/libarchive/archive_write_set_format.c b/contrib/libarchive/libarchive/archive_write_set_format.c
index 5395915e6569..f636cff74714 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_7zip.c b/contrib/libarchive/libarchive/archive_write_set_format_7zip.c
index d5ca9a665654..f7d8890ba3bf 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_7zip.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_7zip.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -91,6 +90,26 @@ __FBSDID("$FreeBSD$");
#define kAttributes 0x15
#define kEncodedHeader 0x17
+// Check that some windows file attribute constants are defined.
+// Reference: https://learn.microsoft.com/en-us/windows/win32/fileio/file-attribute-constants
+#ifndef FILE_ATTRIBUTE_READONLY
+#define FILE_ATTRIBUTE_READONLY 0x00000001
+#endif
+
+#ifndef FILE_ATTRIBUTE_DIRECTORY
+#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
+#endif
+
+#ifndef FILE_ATTRIBUTE_ARCHIVE
+#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
+#endif
+
+// This value is defined in 7zip with the comment "trick for Unix".
+//
+// 7z archives created on unix have this bit set in the high 16 bits of
+// the attr field along with the unix permissions.
+#define FILE_ATTRIBUTE_UNIX_EXTENSION 0x8000
+
enum la_zaction {
ARCHIVE_Z_FINISH,
ARCHIVE_Z_RUN
@@ -165,7 +184,7 @@ struct file {
mode_t mode;
uint32_t crc32;
- signed int dir:1;
+ unsigned int dir:1;
};
struct _7zip {
@@ -1424,14 +1443,19 @@ make_header(struct archive_write *a, uint64_t offset, uint64_t pack_size,
* High 16bits is unix mode.
* Low 16bits is Windows attributes.
*/
- uint32_t encattr, attr;
+ uint32_t encattr, attr = 0;
+
if (file->dir)
- attr = 0x8010;
+ attr |= FILE_ATTRIBUTE_DIRECTORY;
else
- attr = 0x8020;
+ attr |= FILE_ATTRIBUTE_ARCHIVE;
+
if ((file->mode & 0222) == 0)
- attr |= 1;/* Read Only. */
+ attr |= FILE_ATTRIBUTE_READONLY;
+
+ attr |= FILE_ATTRIBUTE_UNIX_EXTENSION;
attr |= ((uint32_t)file->mode) << 16;
+
archive_le32enc(&encattr, attr);
r = (int)compress_out(a, &encattr, 4, ARCHIVE_Z_RUN);
if (r < 0)
@@ -1809,11 +1833,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 = (uint32_t)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 = (uint32_t)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) {
@@ -1842,11 +1866,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 = (uint32_t)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 = (uint32_t)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_ar.c b/contrib/libarchive/libarchive/archive_write_set_format_ar.c
index b25ffbcc40ec..38689d89be0e 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_ar.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_ar.c
@@ -26,7 +26,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_by_name.c b/contrib/libarchive/libarchive/archive_write_set_format_by_name.c
index bf75fc022e06..09519b123894 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_by_name.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_by_name.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_cpio.c b/contrib/libarchive/libarchive/archive_write_set_format_cpio.c
index 29a7cada1064..47152cc6a988 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_cpio.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_cpio.c
@@ -1,3 +1,4 @@
+#include "archive_platform.h"
#include "archive.h"
/*
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 c1e2f65aa94a..7a010ee00f22 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_cpio_binary.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_cpio_binary.c
@@ -25,7 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_format_cpio.c 201170 2009-12-29 06:34:23Z kientzle $");
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -124,7 +123,7 @@ PACKED(struct cpio_binary_header {
* ...but it feels a little better to do it like this:
*/
-static uint16_t swap16(uint16_t in) {
+static uint16_t la_swap16(uint16_t in) {
union {
uint16_t s[2];
uint8_t c[4];
@@ -141,7 +140,7 @@ static uint16_t swap16(uint16_t in) {
/* NOTREACHED */
}
-static uint32_t swap32(uint32_t in) {
+static uint32_t la_swap32(uint32_t in) {
union {
uint32_t l;
uint16_t s[2];
@@ -156,8 +155,8 @@ static uint32_t swap32(uint32_t in) {
U.s[1] = t;
} else if (U.c[3]) { /* Big-endian */
U.l = in;
- U.s[0] = swap16(U.s[0]);
- U.s[1] = swap16(U.s[1]);
+ U.s[0] = la_swap16(U.s[0]);
+ U.s[1] = la_swap16(U.s[1]);
} else { /* PDP-endian */
U.l = in;
}
@@ -426,8 +425,8 @@ write_header(struct archive_write *a, struct archive_entry *entry)
/* Include trailing null */
pathlength = (int)len + 1;
- h.h_magic = swap16(070707);
- h.h_dev = swap16(archive_entry_dev(entry));
+ h.h_magic = la_swap16(070707);
+ h.h_dev = la_swap16(archive_entry_dev(entry));
ino = synthesize_ino_value(cpio, entry);
if (ino < 0) {
@@ -441,7 +440,7 @@ write_header(struct archive_write *a, struct archive_entry *entry)
ret_final = ARCHIVE_FATAL;
goto exit_write_header;
}
- h.h_ino = swap16(ino);
+ h.h_ino = la_swap16((uint16_t)ino);
h.h_mode = archive_entry_mode(entry);
if (((h.h_mode & AE_IFMT) == AE_IFSOCK) || ((h.h_mode & AE_IFMT) == AE_IFIFO)) {
@@ -460,20 +459,20 @@ write_header(struct archive_write *a, struct archive_entry *entry)
/* we could turn off AE_IFREG here, but it does no harm, */
/* and allows v7 cpio to read the entry without confusion */
}
- h.h_mode = swap16(h.h_mode);
+ h.h_mode = la_swap16(h.h_mode);
- h.h_uid = swap16(archive_entry_uid(entry));
- h.h_gid = swap16(archive_entry_gid(entry));
- h.h_nlink = swap16(archive_entry_nlink(entry));
+ h.h_uid = la_swap16((uint16_t)archive_entry_uid(entry));
+ h.h_gid = la_swap16((uint16_t)archive_entry_gid(entry));
+ h.h_nlink = la_swap16((uint16_t)archive_entry_nlink(entry));
if (archive_entry_filetype(entry) == AE_IFBLK
|| archive_entry_filetype(entry) == AE_IFCHR)
- h.h_majmin = swap16(archive_entry_rdev(entry));
+ h.h_majmin = la_swap16(archive_entry_rdev(entry));
else
h.h_majmin = 0;
- h.h_mtime = swap32(archive_entry_mtime(entry));
- h.h_namesize = swap16(pathlength);
+ h.h_mtime = la_swap32((uint32_t)archive_entry_mtime(entry));
+ h.h_namesize = la_swap16(pathlength);
/* Non-regular files don't store bodies. */
if (archive_entry_filetype(entry) != AE_IFREG)
@@ -502,7 +501,7 @@ write_header(struct archive_write *a, struct archive_entry *entry)
ret_final = ARCHIVE_FATAL;
goto exit_write_header;
}
- h.h_filesize = swap32(strlen(p)); /* symlink */
+ h.h_filesize = la_swap32((uint32_t)strlen(p)); /* symlink */
} else {
if ((a->archive.archive_format == ARCHIVE_FORMAT_CPIO_PWB) &&
(archive_entry_size(entry) > 256*256*256-1)) {
@@ -516,7 +515,7 @@ write_header(struct archive_write *a, struct archive_entry *entry)
ret_final = ARCHIVE_FAILED;
goto exit_write_header;
}
- h.h_filesize = swap32(archive_entry_size(entry)); /* file */
+ h.h_filesize = la_swap32((uint32_t)archive_entry_size(entry)); /* file */
}
ret = __archive_write_output(a, &h, HSIZE);
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 9075616f9d71..006736a1fa22 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_cpio_newc.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_cpio_newc.c
@@ -26,7 +26,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
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 091925a2f9f2..426f779a2b0b 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_cpio_odc.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_cpio_odc.c
@@ -25,7 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_format_cpio.c 201170 2009-12-29 06:34:23Z kientzle $");
#ifdef HAVE_ERRNO_H
#include <errno.h>
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_filter_by_ext.c b/contrib/libarchive/libarchive/archive_write_set_format_filter_by_ext.c
index 9fe21e4542a0..1bb33b04bf91 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_filter_by_ext.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_filter_by_ext.c
@@ -25,7 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_format_by_name.c 201168 2009-12-29 06:15:32Z kientzle $");
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c b/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c
index ec29c5c418e4..a88350b87411 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c
@@ -27,8 +27,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_format_gnu_tar.c 191579 2009-04-27 18:35:03Z gastal $");
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -389,7 +387,7 @@ archive_write_gnutar_header(struct archive_write *a,
if (r != 0) {
if (errno == ENOMEM) {
archive_set_error(&a->archive, ENOMEM,
- "Can't allocate memory for Pathame");
+ "Can't allocate memory for pathname");
ret = ARCHIVE_FATAL;
goto exit_write_header;
}
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c b/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c
index faabd28ea640..2a3ae07fa2b2 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c
@@ -289,12 +289,12 @@ struct isoent {
struct extr_rec *current;
} extr_rec_list;
- signed int virtual:1;
+ unsigned int virtual:1;
/* If set to one, this file type is a directory.
* A convenience flag to be used as
* "archive_entry_filetype(isoent->file->entry) == AE_IFDIR".
*/
- signed int dir:1;
+ unsigned int dir:1;
};
struct hardlink {
@@ -652,7 +652,7 @@ struct iso_option {
#define VOLUME_IDENTIFIER_SIZE 32
/*
- * Usage : !zisofs [DEFAULT]
+ * Usage : !zisofs [DEFAULT]
* : Disable to generate RRIP 'ZF' extension.
* : zisofs
* : Make files zisofs file and generate RRIP 'ZF'
@@ -689,7 +689,7 @@ struct iso9660 {
uint64_t bytes_remaining;
int need_multi_extent;
- /* Temporary string buffer for Joliet extension. */
+ /* Temporary string buffer for Joliet extension. */
struct archive_string utf16be;
struct archive_string mbs;
@@ -755,9 +755,9 @@ struct iso9660 {
/* Used for making zisofs. */
struct {
- signed int detect_magic:1;
- signed int making:1;
- signed int allzero:1;
+ unsigned int detect_magic:1;
+ unsigned int making:1;
+ unsigned int allzero:1;
unsigned char magic_buffer[64];
int magic_cnt;
@@ -2521,12 +2521,11 @@ get_gmoffset(struct tm *tm)
static void
get_tmfromtime(struct tm *tm, time_t *t)
{
-#if HAVE_LOCALTIME_R
+#if HAVE_LOCALTIME_S
+ localtime_s(tm, t);
+#elif HAVE_LOCALTIME_R
tzset();
localtime_r(t, tm);
-#elif HAVE__LOCALTIME64_S
- __time64_t tmp_t = (__time64_t) *t; //time_t may be shorter than 64 bits
- _localtime64_s(tm, &tmp_t);
#else
memcpy(tm, localtime(t), sizeof(*tm));
#endif
@@ -4074,11 +4073,8 @@ write_information_block(struct archive_write *a)
}
memset(info.s, 0, info_size);
opt = 0;
-#if defined(HAVE__CTIME64_S)
- {
- __time64_t iso9660_birth_time_tmp = (__time64_t) iso9660->birth_time; //time_t may be shorter than 64 bits
- _ctime64_s(buf, sizeof(buf), &(iso9660_birth_time_tmp));
- }
+#if defined(HAVE_CTIME_S)
+ ctime_s(buf, sizeof(buf), &(iso9660->birth_time));
#elif defined(HAVE_CTIME_R)
ctime_r(&(iso9660->birth_time), buf);
#else
@@ -6802,6 +6798,7 @@ isoent_rr_move(struct archive_write *a)
* This comparing rule is according to ISO9660 Standard 6.9.1
*/
static int
+__LA_LIBC_CC
_compare_path_table(const void *v1, const void *v2)
{
const struct isoent *p1, *p2;
@@ -6844,6 +6841,7 @@ _compare_path_table(const void *v1, const void *v2)
}
static int
+__LA_LIBC_CC
_compare_path_table_joliet(const void *v1, const void *v2)
{
const struct isoent *p1, *p2;
@@ -7800,8 +7798,8 @@ struct zisofs_extract {
uint64_t pz_uncompressed_size;
size_t uncompressed_buffer_size;
- signed int initialized:1;
- signed int header_passed:1;
+ unsigned int initialized:1;
+ unsigned int header_passed:1;
uint32_t pz_offset;
unsigned char *block_pointers;
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_mtree.c b/contrib/libarchive/libarchive/archive_write_set_format_mtree.c
index 183071266bbf..6db9d27848af 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_mtree.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_mtree.c
@@ -25,7 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_pax.c b/contrib/libarchive/libarchive/archive_write_set_format_pax.c
index 439b3bf282e4..e93333074a6a 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_pax.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_pax.c
@@ -26,7 +26,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -100,6 +99,7 @@ static int has_non_ASCII(const char *);
static void sparse_list_clear(struct pax *);
static int sparse_list_add(struct pax *, int64_t, int64_t);
static char *url_encode(const char *in);
+static time_t get_ustar_max_mtime(void);
/*
* Set output format to 'restricted pax' format.
@@ -367,10 +367,12 @@ archive_write_pax_header_xattr(struct pax *pax, const char *encoded_name,
struct archive_string s;
char *encoded_value;
+ if (encoded_name == NULL)
+ return;
+
if (pax->flags & WRITE_LIBARCHIVE_XATTR) {
encoded_value = base64_encode((const char *)value, value_len);
-
- if (encoded_name != NULL && encoded_value != NULL) {
+ if (encoded_value != NULL) {
archive_string_init(&s);
archive_strcpy(&s, "LIBARCHIVE.xattr.");
archive_strcat(&s, encoded_name);
@@ -403,17 +405,22 @@ archive_write_pax_header_xattrs(struct archive_write *a,
archive_entry_xattr_next(entry, &name, &value, &size);
url_encoded_name = url_encode(name);
- if (url_encoded_name != NULL) {
+ if (url_encoded_name == NULL)
+ goto malloc_error;
+ else {
/* Convert narrow-character to UTF-8. */
r = archive_strcpy_l(&(pax->l_url_encoded_name),
url_encoded_name, pax->sconv_utf8);
free(url_encoded_name); /* Done with this. */
if (r == 0)
encoded_name = pax->l_url_encoded_name.s;
- else if (errno == ENOMEM) {
- archive_set_error(&a->archive, ENOMEM,
- "Can't allocate memory for Linkname");
- return (ARCHIVE_FATAL);
+ else if (r == -1)
+ goto malloc_error;
+ else {
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_MISC,
+ "Error encoding pax extended attribute");
+ return (ARCHIVE_FAILED);
}
}
@@ -422,6 +429,9 @@ archive_write_pax_header_xattrs(struct archive_write *a,
}
return (ARCHIVE_OK);
+malloc_error:
+ archive_set_error(&a->archive, ENOMEM, "Can't allocate memory");
+ return (ARCHIVE_FATAL);
}
static int
@@ -595,6 +605,8 @@ archive_write_pax_header(struct archive_write *a,
need_extension = 0;
pax = (struct pax *)a->format_data;
+ const time_t ustar_max_mtime = get_ustar_max_mtime();
+
/* Sanity check. */
if (archive_entry_pathname(entry_original) == NULL) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
@@ -1028,10 +1040,8 @@ archive_write_pax_header(struct archive_write *a,
archive_string_init(&entry_name);
archive_strcpy(&entry_name, archive_entry_pathname(entry_main));
- /* If file size is too large, add 'size' to pax extended attrs. */
+ /* If file size is too large, we need pax extended attrs. */
if (archive_entry_size(entry_main) >= (((int64_t)1) << 33)) {
- add_pax_attr_int(&(pax->pax_header), "size",
- archive_entry_size(entry_main));
need_extension = 1;
}
@@ -1118,16 +1128,13 @@ archive_write_pax_header(struct archive_write *a,
}
/*
- * Technically, the mtime field in the ustar header can
- * support 33 bits, but many platforms use signed 32-bit time
- * values. The cutoff of 0x7fffffff here is a compromise.
* Yes, this check is duplicated just below; this helps to
* avoid writing an mtime attribute just to handle a
* high-resolution timestamp in "restricted pax" mode.
*/
if (!need_extension &&
((archive_entry_mtime(entry_main) < 0)
- || (archive_entry_mtime(entry_main) >= 0x7fffffff)))
+ || (archive_entry_mtime(entry_main) >= ustar_max_mtime)))
need_extension = 1;
/* I use a star-compatible file flag attribute. */
@@ -1192,7 +1199,7 @@ archive_write_pax_header(struct archive_write *a,
if (a->archive.archive_format != ARCHIVE_FORMAT_TAR_PAX_RESTRICTED ||
need_extension) {
if (archive_entry_mtime(entry_main) < 0 ||
- archive_entry_mtime(entry_main) >= 0x7fffffff ||
+ archive_entry_mtime(entry_main) >= ustar_max_mtime ||
archive_entry_mtime_nsec(entry_main) != 0)
add_pax_attr_time(&(pax->pax_header), "mtime",
archive_entry_mtime(entry_main),
@@ -1347,6 +1354,12 @@ archive_write_pax_header(struct archive_write *a,
mapsize + pax->sparse_map_padding + sparse_total);
}
+ /* If file size is too large, add 'size' to pax extended attrs. */
+ if (archive_entry_size(entry_main) >= (((int64_t)1) << 33)) {
+ add_pax_attr_int(&(pax->pax_header), "size",
+ archive_entry_size(entry_main));
+ }
+
/* Format 'ustar' header for main entry.
*
* The trouble with file size: If the reader can't understand
@@ -1424,7 +1437,7 @@ archive_write_pax_header(struct archive_write *a,
/* Copy mtime, but clip to ustar limits. */
s = archive_entry_mtime(entry_main);
if (s < 0) { s = 0; }
- if (s >= 0x7fffffff) { s = 0x7fffffff; }
+ if (s > ustar_max_mtime) { s = ustar_max_mtime; }
archive_entry_set_mtime(pax_attr_entry, s, 0);
/* Standard ustar doesn't support atime. */
@@ -1713,7 +1726,7 @@ build_pax_attribute_name(char *dest, const char *src)
* to having clients override it.
*/
#if HAVE_GETPID && 0 /* Disable this for now; see above comment. */
- sprintf(buff, "PaxHeader.%d", getpid());
+ snprintf(buff, sizeof(buff), "PaxHeader.%d", getpid());
#else
/* If the platform can't fetch the pid, don't include it. */
strcpy(buff, "PaxHeader");
@@ -1900,14 +1913,19 @@ url_encode(const char *in)
{
const char *s;
char *d;
- int out_len = 0;
+ size_t out_len = 0;
char *out;
for (s = in; *s != '\0'; s++) {
- if (*s < 33 || *s > 126 || *s == '%' || *s == '=')
+ if (*s < 33 || *s > 126 || *s == '%' || *s == '=') {
+ if (SIZE_MAX - out_len < 4)
+ return (NULL);
out_len += 3;
- else
+ } else {
+ if (SIZE_MAX - out_len < 2)
+ return (NULL);
out_len++;
+ }
}
out = (char *)malloc(out_len + 1);
@@ -2042,3 +2060,18 @@ sparse_list_add(struct pax *pax, int64_t offset, int64_t length)
return (_sparse_list_add_block(pax, offset, length, 0));
}
+static time_t
+get_ustar_max_mtime(void)
+{
+ /*
+ * Technically, the mtime field in the ustar header can
+ * support 33 bits. We are using all of them to keep
+ * tar/test/test_option_C_mtree.c simple and passing after 2038.
+ * For platforms that use signed 32-bit time values we
+ * use the 32-bit maximum.
+ */
+ if (sizeof(time_t) > sizeof(int32_t))
+ return (time_t)0x1ffffffff;
+ else
+ return (time_t)0x7fffffff;
+}
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_private.h b/contrib/libarchive/libarchive/archive_write_set_format_private.h
index e20022755f8b..ef9dee9d808c 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_private.h
+++ b/contrib/libarchive/libarchive/archive_write_set_format_private.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef ARCHIVE_WRITE_SET_FORMAT_PRIVATE_H_INCLUDED
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_shar.c b/contrib/libarchive/libarchive/archive_write_set_format_shar.c
index 625a86475a81..52ea6adc2264 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_shar.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_shar.c
@@ -25,7 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_ustar.c b/contrib/libarchive/libarchive/archive_write_set_format_ustar.c
index b1536dc97d16..673487b27fe3 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_ustar.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_ustar.c
@@ -25,8 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_v7tar.c b/contrib/libarchive/libarchive/archive_write_set_format_v7tar.c
index 599407144121..e3724a096da7 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_v7tar.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_v7tar.c
@@ -25,8 +25,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
-
#ifdef HAVE_ERRNO_H
#include <errno.h>
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_warc.c b/contrib/libarchive/libarchive/archive_write_set_format_warc.c
index 46b05734121c..3d22e1f4ba57 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_warc.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_warc.c
@@ -26,7 +26,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -329,30 +328,21 @@ xstrftime(struct archive_string *as, const char *fmt, time_t t)
{
/** like strftime(3) but for time_t objects */
struct tm *rt;
-#if defined(HAVE_GMTIME_R) || defined(HAVE__GMTIME64_S)
+#if defined(HAVE_GMTIME_R) || defined(HAVE_GMTIME_S)
struct tm timeHere;
#endif
-#if defined(HAVE__GMTIME64_S)
- errno_t terr;
- __time64_t tmptime;
-#endif
char strtime[100];
size_t len;
-#ifdef HAVE_GMTIME_R
- if ((rt = gmtime_r(&t, &timeHere)) == NULL)
- return;
-#elif defined(HAVE__GMTIME64_S)
- tmptime = t;
- terr = _gmtime64_s(&timeHere, &tmptime);
- if (terr)
- rt = NULL;
- else
- rt = &timeHere;
+#if defined(HAVE_GMTIME_S)
+ rt = gmtime_s(&timeHere, &t) ? NULL : &timeHere;
+#elif defined(HAVE_GMTIME_R)
+ rt = gmtime_r(&t, &timeHere);
#else
- if ((rt = gmtime(&t)) == NULL)
- return;
+ rt = gmtime(&t);
#endif
+ if (!rt)
+ return;
/* leave the hard yacker to our role model strftime() */
len = strftime(strtime, sizeof(strtime)-1, fmt, rt);
archive_strncat(as, strtime, len);
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_xar.c b/contrib/libarchive/libarchive/archive_write_set_format_xar.c
index d885f5c256d3..2cf655da186a 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_xar.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_xar.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -212,8 +211,8 @@ struct file {
struct heap_data data;
struct archive_string script;
- signed int virtual:1;
- signed int dir:1;
+ unsigned int virtual:1;
+ unsigned int dir:1;
};
struct hardlink {
@@ -906,15 +905,11 @@ xmlwrite_time(struct archive_write *a, xmlTextWriterPtr writer,
{
char timestr[100];
struct tm tm;
-#if defined(HAVE__GMTIME64_S)
- __time64_t tmptime;
-#endif
-#if defined(HAVE_GMTIME_R)
+#if defined(HAVE_GMTIME_S)
+ gmtime_s(&tm, &t);
+#elif defined(HAVE_GMTIME_R)
gmtime_r(&t, &tm);
-#elif defined(HAVE__GMTIME64_S)
- tmptime = t;
- _gmtime64_s(&tm, &tmptime);
#else
memcpy(&tm, gmtime(&t), sizeof(tm));
#endif
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_zip.c b/contrib/libarchive/libarchive/archive_write_set_format_zip.c
index da7b2604d259..e37e7b5edda1 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_zip.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_zip.c
@@ -30,7 +30,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -132,7 +131,6 @@ struct zip {
enum compression entry_compression;
enum encryption entry_encryption;
int entry_flags;
- int entry_uses_zip64;
int experiments;
struct trad_enc_ctx tctx;
char tctx_valid;
@@ -523,6 +521,7 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
int ret, ret2 = ARCHIVE_OK;
mode_t type;
int version_needed = 10;
+#define MIN_VERSION_NEEDED(x) do { if (version_needed < x) { version_needed = x; } } while (0)
/* Ignore types of entries that we don't support. */
type = archive_entry_filetype(entry);
@@ -557,12 +556,12 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
/* Reset information from last entry. */
zip->entry_offset = zip->written_bytes;
zip->entry_uncompressed_limit = INT64_MAX;
+ /* Zero size values implies that we're using a trailing data descriptor */
zip->entry_compressed_size = 0;
zip->entry_uncompressed_size = 0;
zip->entry_compressed_written = 0;
zip->entry_uncompressed_written = 0;
zip->entry_flags = 0;
- zip->entry_uses_zip64 = 0;
zip->entry_crc32 = zip->crc32func(0, NULL, 0);
zip->entry_encryption = 0;
archive_entry_free(zip->entry);
@@ -672,11 +671,11 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
zip->entry_crc32 = zip->crc32func(zip->entry_crc32,
(const unsigned char *)slink, slink_size);
zip->entry_compression = COMPRESSION_STORE;
- version_needed = 20;
+ MIN_VERSION_NEEDED(20);
} else if (type != AE_IFREG) {
zip->entry_compression = COMPRESSION_STORE;
zip->entry_uncompressed_limit = 0;
- version_needed = 20;
+ MIN_VERSION_NEEDED(20);
} else if (archive_entry_size_is_set(zip->entry)) {
int64_t size = archive_entry_size(zip->entry);
int64_t additional_size = 0;
@@ -689,27 +688,27 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
if (zip->entry_compression == COMPRESSION_STORE) {
zip->entry_compressed_size = size;
zip->entry_uncompressed_size = size;
- version_needed = 10;
+ MIN_VERSION_NEEDED(10);
} else {
zip->entry_uncompressed_size = size;
- version_needed = 20;
+ MIN_VERSION_NEEDED(20);
}
if (zip->entry_flags & ZIP_ENTRY_FLAG_ENCRYPTED) {
switch (zip->entry_encryption) {
case ENCRYPTION_TRADITIONAL:
additional_size = TRAD_HEADER_SIZE;
- version_needed = 20;
+ MIN_VERSION_NEEDED(20);
break;
case ENCRYPTION_WINZIP_AES128:
additional_size = WINZIP_AES128_HEADER_SIZE
+ AUTH_CODE_SIZE;
- version_needed = 20;
+ MIN_VERSION_NEEDED(20);
break;
case ENCRYPTION_WINZIP_AES256:
additional_size = WINZIP_AES256_HEADER_SIZE
+ AUTH_CODE_SIZE;
- version_needed = 20;
+ MIN_VERSION_NEEDED(20);
break;
case ENCRYPTION_NONE:
default:
@@ -733,27 +732,29 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
|| (zip->entry_uncompressed_size + additional_size > ZIP_4GB_MAX)
|| (zip->entry_uncompressed_size > ZIP_4GB_MAX_UNCOMPRESSED
&& zip->entry_compression != COMPRESSION_STORE)) {
- zip->entry_uses_zip64 = 1;
- version_needed = 45;
+ MIN_VERSION_NEEDED(45);
}
/* We may know the size, but never the CRC. */
zip->entry_flags |= ZIP_ENTRY_FLAG_LENGTH_AT_END;
} else {
- /* We don't know the size. In this case, we prefer
- * deflate (it has a clear end-of-data marker which
- * makes length-at-end more reliable) and will
- * enable Zip64 extensions unless we're told not to.
+ /* We don't know the size. Use the default
+ * compression unless specified otherwise.
*/
- zip->entry_compression = COMPRESSION_DEFAULT;
+
+ zip->entry_compression = zip->requested_compression;
+ if(zip->entry_compression == COMPRESSION_UNSPECIFIED){
+ zip->entry_compression = COMPRESSION_DEFAULT;
+ }
+
zip->entry_flags |= ZIP_ENTRY_FLAG_LENGTH_AT_END;
if ((zip->flags & ZIP_FLAG_AVOID_ZIP64) == 0) {
- zip->entry_uses_zip64 = 1;
- version_needed = 45;
+ /* We might use zip64 extensions, so require 4.5 */
+ MIN_VERSION_NEEDED(45);
} else if (zip->entry_compression == COMPRESSION_STORE) {
- version_needed = 10;
+ MIN_VERSION_NEEDED(10);
} else {
- version_needed = 20;
+ MIN_VERSION_NEEDED(20);
}
if (zip->entry_flags & ZIP_ENTRY_FLAG_ENCRYPTED) {
@@ -761,8 +762,7 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
case ENCRYPTION_TRADITIONAL:
case ENCRYPTION_WINZIP_AES128:
case ENCRYPTION_WINZIP_AES256:
- if (version_needed < 20)
- version_needed = 20;
+ MIN_VERSION_NEEDED(20);
break;
case ENCRYPTION_NONE:
default:
@@ -783,16 +783,8 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
archive_le16enc(local_header + 8, zip->entry_compression);
archive_le32enc(local_header + 10,
dos_time(archive_entry_mtime(zip->entry)));
- archive_le32enc(local_header + 14, zip->entry_crc32);
- if (zip->entry_uses_zip64) {
- /* Zip64 data in the local header "must" include both
- * compressed and uncompressed sizes AND those fields
- * are included only if these are 0xffffffff;
- * THEREFORE these must be set this way, even if we
- * know one of them is smaller. */
- archive_le32enc(local_header + 18, ZIP_4GB_MAX);
- archive_le32enc(local_header + 22, ZIP_4GB_MAX);
- } else {
+ if ((zip->entry_flags & ZIP_ENTRY_FLAG_LENGTH_AT_END) == 0) {
+ archive_le32enc(local_header + 14, zip->entry_crc32);
archive_le32enc(local_header + 18, (uint32_t)zip->entry_compressed_size);
archive_le32enc(local_header + 22, (uint32_t)zip->entry_uncompressed_size);
}
@@ -838,42 +830,19 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
* the local file header and the central directory.
* We format them once and then duplicate them. */
- /* UT timestamp, length depends on what timestamps are set. */
- memcpy(e, "UT", 2);
- archive_le16enc(e + 2,
- 1
- + (archive_entry_mtime_is_set(entry) ? 4 : 0)
- + (archive_entry_atime_is_set(entry) ? 4 : 0)
- + (archive_entry_ctime_is_set(entry) ? 4 : 0));
- e += 4;
- *e++ =
- (archive_entry_mtime_is_set(entry) ? 1 : 0)
- | (archive_entry_atime_is_set(entry) ? 2 : 0)
- | (archive_entry_ctime_is_set(entry) ? 4 : 0);
- if (archive_entry_mtime_is_set(entry)) {
- archive_le32enc(e, (uint32_t)archive_entry_mtime(entry));
- e += 4;
- }
- if (archive_entry_atime_is_set(entry)) {
- archive_le32enc(e, (uint32_t)archive_entry_atime(entry));
+ /* ux Unix extra data, length 11, version 1 */
+ if (archive_entry_uid_is_set(entry) || archive_entry_gid_is_set(entry)) {
+ /* TODO: If uid < 64k, use 2 bytes, ditto for gid. */
+ memcpy(e, "ux\013\000\001", 5);
+ e += 5;
+ *e++ = 4; /* Length of following UID */
+ archive_le32enc(e, (uint32_t)archive_entry_uid(entry));
e += 4;
- }
- if (archive_entry_ctime_is_set(entry)) {
- archive_le32enc(e, (uint32_t)archive_entry_ctime(entry));
+ *e++ = 4; /* Length of following GID */
+ archive_le32enc(e, (uint32_t)archive_entry_gid(entry));
e += 4;
}
- /* ux Unix extra data, length 11, version 1 */
- /* TODO: If uid < 64k, use 2 bytes, ditto for gid. */
- memcpy(e, "ux\013\000\001", 5);
- e += 5;
- *e++ = 4; /* Length of following UID */
- archive_le32enc(e, (uint32_t)archive_entry_uid(entry));
- e += 4;
- *e++ = 4; /* Length of following GID */
- archive_le32enc(e, (uint32_t)archive_entry_gid(entry));
- e += 4;
-
/* AES extra data field: WinZIP AES information, ID=0x9901 */
if ((zip->entry_flags & ZIP_ENTRY_FLAG_ENCRYPTED)
&& (zip->entry_encryption == ENCRYPTION_WINZIP_AES128
@@ -900,7 +869,7 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
e += 2;
}
- /* Copy UT ,ux, and AES-extra into central directory as well. */
+ /* Copy ux, AES-extra into central directory as well. */
zip->file_header_extra_offset = zip->central_directory_bytes;
cd_extra = cd_alloc(zip, e - local_extra);
memcpy(cd_extra, local_extra, e - local_extra);
@@ -912,17 +881,50 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
* archive_write_zip_finish_entry() below.
*/
- /* "[Zip64 entry] in the local header MUST include BOTH
- * original [uncompressed] and compressed size fields." */
- if (zip->entry_uses_zip64) {
- unsigned char *zip64_start = e;
- memcpy(e, "\001\000\020\000", 4);
+ /* UT timestamp: length depends on what timestamps are set.
+ * This header appears in the Central Directory also, but
+ * according to Info-Zip specification, the CD form
+ * only holds mtime, so we format it separately. */
+ if (archive_entry_mtime_is_set(entry)
+ || archive_entry_atime_is_set(entry)
+ || archive_entry_ctime_is_set(entry)) {
+ unsigned char *ut = e;
+ memcpy(e, "UT\000\000", 4);
+ e += 4;
+ *e++ = (archive_entry_mtime_is_set(entry) ? 1 : 0)
+ | (archive_entry_atime_is_set(entry) ? 2 : 0)
+ | (archive_entry_ctime_is_set(entry) ? 4 : 0);
+ if (archive_entry_mtime_is_set(entry)) {
+ archive_le32enc(e, (uint32_t)archive_entry_mtime(entry));
+ e += 4;
+ }
+ if (archive_entry_atime_is_set(entry)) {
+ archive_le32enc(e, (uint32_t)archive_entry_atime(entry));
+ e += 4;
+ }
+ if (archive_entry_ctime_is_set(entry)) {
+ archive_le32enc(e, (uint32_t)archive_entry_ctime(entry));
+ e += 4;
+ }
+ archive_le16enc(ut + 2, e - ut - 4);
+ }
+
+ /*
+ * Note about Zip64 Extended Information Extra Field:
+ * Because libarchive always writes in a streaming
+ * fashion, we never know the CRC when we're writing
+ * the local header. So we have to use length-at-end, which
+ * prevents us from putting size information into a Zip64
+ * extra field. However, apparently some readers find it
+ * a helpful clue to have an empty such field so they
+ * can expect a 64-bit length-at-end marker.
+ */
+ if (archive_entry_size_is_set(zip->entry)
+ && (zip->entry_uncompressed_size > ZIP_4GB_MAX
+ || zip->entry_compressed_size > ZIP_4GB_MAX)) {
+ /* Header ID 0x0001, size 0 */
+ memcpy(e, "\001\000\000\000", 4);
e += 4;
- archive_le64enc(e, zip->entry_uncompressed_size);
- e += 8;
- archive_le64enc(e, zip->entry_compressed_size);
- e += 8;
- archive_le16enc(zip64_start + 2, (uint16_t)(e - (zip64_start + 4)));
}
if (zip->flags & ZIP_FLAG_EXPERIMENT_xl) {
@@ -1201,7 +1203,9 @@ archive_write_zip_finish_entry(struct archive_write *a)
archive_le32enc(d + 4, 0);/* no CRC.*/
else
archive_le32enc(d + 4, zip->entry_crc32);
- if (zip->entry_uses_zip64) {
+ if (zip->entry_compressed_written > ZIP_4GB_MAX
+ || zip->entry_uncompressed_written > ZIP_4GB_MAX
+ || zip->flags & ZIP_FLAG_FORCE_ZIP64) {
archive_le64enc(d + 8,
(uint64_t)zip->entry_compressed_written);
archive_le64enc(d + 16,
@@ -1220,23 +1224,60 @@ archive_write_zip_finish_entry(struct archive_write *a)
return (ARCHIVE_FATAL);
}
- /* Append Zip64 extra data to central directory information. */
- if (zip->entry_compressed_written > ZIP_4GB_MAX
- || zip->entry_uncompressed_written > ZIP_4GB_MAX
+ /* UT timestamp: Info-Zip specifies that _only_ the mtime should
+ * be recorded here; ctime and atime are also included in the
+ * local file descriptor. */
+ if (archive_entry_mtime_is_set(zip->entry)) {
+ unsigned char ut[9];
+ unsigned char *u = ut, *ud;
+ memcpy(u, "UT\005\000\001", 5);
+ u += 5;
+ archive_le32enc(u, (uint32_t)archive_entry_mtime(zip->entry));
+ u += 4;
+ ud = cd_alloc(zip, u - ut);
+ if (ud == NULL) {
+ archive_set_error(&a->archive, ENOMEM,
+ "Can't allocate zip data");
+ return (ARCHIVE_FATAL);
+ }
+ memcpy(ud, ut, u - ut);
+ }
+
+ /* Fill in size information in the central directory entry. */
+ /* Fix up central directory file header. */
+ if (zip->cctx_valid && zip->aes_vendor == AES_VENDOR_AE_2)
+ archive_le32enc(zip->file_header + 16, 0);/* no CRC.*/
+ else
+ archive_le32enc(zip->file_header + 16, zip->entry_crc32);
+ /* Truncate to 32 bits; we'll fix up below. */
+ archive_le32enc(zip->file_header + 20, (uint32_t)zip->entry_compressed_written);
+ archive_le32enc(zip->file_header + 24, (uint32_t)zip->entry_uncompressed_written);
+ archive_le16enc(zip->file_header + 30,
+ (uint16_t)(zip->central_directory_bytes - zip->file_header_extra_offset));
+ archive_le32enc(zip->file_header + 42, (uint32_t)zip->entry_offset);
+
+ /* If any of the values immediately above are too large, we'll
+ * need to put the corresponding value in a Zip64 extra field
+ * and set the central directory value to 0xffffffff as a flag. */
+ if (zip->entry_compressed_written >= ZIP_4GB_MAX
+ || zip->entry_uncompressed_written >= ZIP_4GB_MAX
|| zip->entry_offset > ZIP_4GB_MAX) {
unsigned char zip64[32];
unsigned char *z = zip64, *zd;
memcpy(z, "\001\000\000\000", 4);
z += 4;
if (zip->entry_uncompressed_written >= ZIP_4GB_MAX) {
+ archive_le32enc(zip->file_header + 24, ZIP_4GB_MAX);
archive_le64enc(z, zip->entry_uncompressed_written);
z += 8;
}
if (zip->entry_compressed_written >= ZIP_4GB_MAX) {
+ archive_le32enc(zip->file_header + 20, ZIP_4GB_MAX);
archive_le64enc(z, zip->entry_compressed_written);
z += 8;
}
if (zip->entry_offset >= ZIP_4GB_MAX) {
+ archive_le32enc(zip->file_header + 42, ZIP_4GB_MAX);
archive_le64enc(z, zip->entry_offset);
z += 8;
}
@@ -1378,25 +1419,14 @@ dos_time(const time_t unix_time)
{
struct tm *t;
unsigned int dt;
-#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S)
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
struct tm tmbuf;
#endif
-#if defined(HAVE__LOCALTIME64_S)
- errno_t terr;
- __time64_t tmptime;
-#endif
- /* This will not preserve time when creating/extracting the archive
- * on two systems with different time zones. */
-#if defined(HAVE_LOCALTIME_R)
+#if defined(HAVE_LOCALTIME_S)
+ t = localtime_s(&tmbuf, &unix_time) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
t = localtime_r(&unix_time, &tmbuf);
-#elif defined(HAVE__LOCALTIME64_S)
- tmptime = unix_time;
- terr = _localtime64_s(&tmbuf, &tmptime);
- if (terr)
- t = NULL;
- else
- t = &tmbuf;
#else
t = localtime(&unix_time);
#endif
diff --git a/contrib/libarchive/libarchive/archive_write_set_options.3 b/contrib/libarchive/libarchive/archive_write_set_options.3
index dd573588d573..454c79671b93 100644
--- a/contrib/libarchive/libarchive/archive_write_set_options.3
+++ b/contrib/libarchive/libarchive/archive_write_set_options.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd January 31, 2020
.Dt ARCHIVE_WRITE_OPTIONS 3
.Os
@@ -257,12 +255,22 @@ If supported, the default value is read from
The value is interpreted as a decimal integer specifying the
compression level. Supported values depend on the library version,
common values are from 1 to 22.
+.It Cm long
+Enables long distance matching. The value is interpreted as a
+decimal integer specifying log2 window size in bytes. Values from
+10 to 30 for 32 bit, or 31 for 64 bit, are supported.
+.It Cm threads
+The value is interpreted as a decimal integer specifying the
+number of threads for multi-threaded zstd compression.
+If set to 0, zstd will attempt to detect and use the number
+of physical CPU cores.
.El
.It Format 7zip
.Bl -tag -compact -width indent
.It Cm compression
The value is one of
.Dq store ,
+.Dq copy ,
.Dq deflate ,
.Dq bzip2 ,
.Dq lzma1 ,
@@ -270,12 +278,18 @@ The value is one of
or
.Dq ppmd
to indicate how the following entries should be compressed.
+The values
+.Dq store
+and
+.Dq copy
+are synonyms.
Note that this setting is ignored for directories, symbolic links,
and other special entries.
.It Cm compression-level
The value is interpreted as a decimal integer specifying the
compression level.
-Values between 0 and 9 are supported.
+Values between 0 and 9 are supported, with the exception of bzip2
+which only supports values between 1 and 9.
The interpretation of the compression level depends on the chosen
compression method.
.El
diff --git a/contrib/libarchive/libarchive/archive_write_set_options.c b/contrib/libarchive/libarchive/archive_write_set_options.c
index 962309ada5ce..be2a6063188b 100644
--- a/contrib/libarchive/libarchive/archive_write_set_options.c
+++ b/contrib/libarchive/libarchive/archive_write_set_options.c
@@ -24,7 +24,6 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#include "archive_write_private.h"
#include "archive_options_private.h"
diff --git a/contrib/libarchive/libarchive/archive_write_set_passphrase.3 b/contrib/libarchive/libarchive/archive_write_set_passphrase.3
index 2db77034c76e..629e059b2372 100644
--- a/contrib/libarchive/libarchive/archive_write_set_passphrase.3
+++ b/contrib/libarchive/libarchive/archive_write_set_passphrase.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd September 21, 2014
.Dt ARCHIVE_WRITE_SET_PASSPHRASE 3
.Os
diff --git a/contrib/libarchive/libarchive/archive_write_set_passphrase.c b/contrib/libarchive/libarchive/archive_write_set_passphrase.c
index 710ecba52c3d..f871c8e2f810 100644
--- a/contrib/libarchive/libarchive/archive_write_set_passphrase.c
+++ b/contrib/libarchive/libarchive/archive_write_set_passphrase.c
@@ -24,21 +24,15 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
#include "archive_write_private.h"
-int
-archive_write_set_passphrase(struct archive *_a, const char *p)
+static int
+set_passphrase(struct archive_write *a, const char *p)
{
- struct archive_write *a = (struct archive_write *)_a;
-
- archive_check_magic(_a, ARCHIVE_WRITE_MAGIC, ARCHIVE_STATE_NEW,
- "archive_write_set_passphrase");
-
if (p == NULL || p[0] == '\0') {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Empty passphrase is unacceptable");
@@ -56,6 +50,18 @@ archive_write_set_passphrase(struct archive *_a, const char *p)
int
+archive_write_set_passphrase(struct archive *_a, const char *p)
+{
+ struct archive_write *a = (struct archive_write *)_a;
+
+ archive_check_magic(_a, ARCHIVE_WRITE_MAGIC, ARCHIVE_STATE_NEW,
+ "archive_write_set_passphrase");
+
+ return (set_passphrase(a, p));
+}
+
+
+int
archive_write_set_passphrase_callback(struct archive *_a, void *client_data,
archive_passphrase_callback *cb)
{
@@ -81,15 +87,9 @@ __archive_write_get_passphrase(struct archive_write *a)
const char *p;
p = a->passphrase_callback(&a->archive,
a->passphrase_client_data);
- if (p != NULL) {
- a->passphrase = strdup(p);
- if (a->passphrase == NULL) {
- archive_set_error(&a->archive, ENOMEM,
- "Can't allocate data for passphrase");
- return (NULL);
- }
- return (a->passphrase);
- }
+ set_passphrase(a, p);
+ a->passphrase_callback = NULL;
+ a->passphrase_client_data = NULL;
}
- return (NULL);
+ return (a->passphrase);
}
diff --git a/contrib/libarchive/libarchive/cpio.5 b/contrib/libarchive/libarchive/cpio.5
index 837a45692e3b..21c30d78d3c5 100644
--- a/contrib/libarchive/libarchive/cpio.5
+++ b/contrib/libarchive/libarchive/cpio.5
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd December 23, 2011
.Dt CPIO 5
.Os
@@ -354,7 +352,7 @@ while working in AT&T's Unix Support Group.
It appeared in 1977 as part of PWB/UNIX 1.0, the
.Dq Programmer's Work Bench
derived from
-.At 6th Edition UNIX
+.At v6
that was used internally at AT&T.
Both the new binary and old character formats were in use
by 1980, according to the System III source released
diff --git a/contrib/libarchive/libarchive/filter_fork.h b/contrib/libarchive/libarchive/filter_fork.h
index 934795b7c307..aeab70ae634a 100644
--- a/contrib/libarchive/libarchive/filter_fork.h
+++ b/contrib/libarchive/libarchive/filter_fork.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef FILTER_FORK_H
diff --git a/contrib/libarchive/libarchive/filter_fork_posix.c b/contrib/libarchive/libarchive/filter_fork_posix.c
index ac255c4f8b20..c895c08e59b3 100644
--- a/contrib/libarchive/libarchive/filter_fork_posix.c
+++ b/contrib/libarchive/libarchive/filter_fork_posix.c
@@ -30,8 +30,6 @@
#if defined(HAVE_PIPE) && defined(HAVE_FCNTL) && \
(defined(HAVE_FORK) || defined(HAVE_VFORK) || defined(HAVE_POSIX_SPAWNP))
-__FBSDID("$FreeBSD: head/lib/libarchive/filter_fork.c 182958 2008-09-12 05:33:00Z kientzle $");
-
#if defined(HAVE_SYS_TYPES_H)
# include <sys/types.h>
#endif
@@ -76,7 +74,7 @@ int
__archive_create_child(const char *cmd, int *child_stdin, int *child_stdout,
pid_t *out_child)
{
- pid_t child;
+ pid_t child = -1;
int stdin_pipe[2], stdout_pipe[2], tmp;
#if HAVE_POSIX_SPAWNP
posix_spawn_file_actions_t actions;
diff --git a/contrib/libarchive/libarchive/libarchive-formats.5 b/contrib/libarchive/libarchive/libarchive-formats.5
index 5a118ff5d240..fab2f8660270 100644
--- a/contrib/libarchive/libarchive/libarchive-formats.5
+++ b/contrib/libarchive/libarchive/libarchive-formats.5
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd December 27, 2016
.Dt LIBARCHIVE-FORMATS 5
.Os
diff --git a/contrib/libarchive/libarchive/libarchive.3 b/contrib/libarchive/libarchive/libarchive.3
index 1ef4b7c312ba..c67172bf654f 100644
--- a/contrib/libarchive/libarchive/libarchive.3
+++ b/contrib/libarchive/libarchive/libarchive.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd March 18, 2012
.Dt LIBARCHIVE 3
.Os
@@ -62,30 +60,40 @@ GNU-format tar archives,
.It
most common cpio archive formats,
.It
-ISO9660 CD images (including RockRidge and Joliet extensions),
-.It
-Zip archives,
+7-Zip archives,
.It
ar archives (including GNU/SysV and BSD extensions),
.It
Microsoft CAB archives,
.It
+ISO9660 CD images (including RockRidge and Joliet extensions),
+.It
LHA archives,
.It
mtree file tree descriptions,
.It
-RAR archives,
+RAR and most RAR5 archives,
+.It
+WARC archives,
+.It
+XAR archives,
.It
-XAR archives.
+Zip archives.
.El
The library automatically detects archives compressed with
-.Xr gzip 1 ,
+.Xr compress 1 ,
.Xr bzip2 1 ,
-.Xr xz 1 ,
+.Xr grzip 1 ,
+.Xr gzip 1 ,
+.Xr lrzip 1 ,
+.Xr lz4 1 ,
.Xr lzip 1 ,
+.Xr lzop 1 ,
+.Xr xz 1 ,
or
-.Xr compress 1
-and decompresses them transparently.
+.Xr zstd 1
+and decompresses them transparently. Decompression of some formats
+requires external decompressor utilities.
It can similarly detect and decode archives processed with
.Xr uuencode 1
or which have an
@@ -107,19 +115,19 @@ archives,
.It
cpio archives,
.It
-Zip archive,
+7-Zip archives,
+.It
+ar archives,
.It
two different variants of shar archives,
.It
ISO9660 CD images,
.It
-7-Zip archives,
-.It
-ar archives,
-.It
mtree file tree descriptions,
.It
-XAR archives.
+XAR archives,
+.It
+Zip archive.
.El
Pax interchange format is an extension of the tar archive format that
eliminates essentially all of the limitations of historic tar formats
diff --git a/contrib/libarchive/libarchive/libarchive_changes.3 b/contrib/libarchive/libarchive/libarchive_changes.3
index 6bf8db038c73..fd0e721053ca 100644
--- a/contrib/libarchive/libarchive/libarchive_changes.3
+++ b/contrib/libarchive/libarchive/libarchive_changes.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd December 23, 2011
.Dt LIBARCHIVE_CHANGES 3
.Os
diff --git a/contrib/libarchive/libarchive/libarchive_internals.3 b/contrib/libarchive/libarchive/libarchive_internals.3
index d672f3e8a64d..2978b48c3e97 100644
--- a/contrib/libarchive/libarchive/libarchive_internals.3
+++ b/contrib/libarchive/libarchive/libarchive_internals.3
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd January 26, 2011
.Dt LIBARCHIVE_INTERNALS 3
.Os
@@ -126,7 +124,7 @@ to read the entire file into memory at once and return the
entire file to libarchive as a single block;
other clients may begin asynchronous I/O operations for the
next block on each request.
-.Ss Decompresssion Layer
+.Ss Decompression Layer
The decompression layer not only handles decompression,
it also buffers data so that the format handlers see a
much nicer I/O model.
diff --git a/contrib/libarchive/libarchive/tar.5 b/contrib/libarchive/libarchive/tar.5
index 34ad4f79315e..725a7d68374a 100644
--- a/contrib/libarchive/libarchive/tar.5
+++ b/contrib/libarchive/libarchive/tar.5
@@ -23,8 +23,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd December 27, 2016
.Dt TAR 5
.Os
diff --git a/contrib/libarchive/libarchive/test/README b/contrib/libarchive/libarchive/test/README
index 51f065fe1d17..facf62030c9c 100644
--- a/contrib/libarchive/libarchive/test/README
+++ b/contrib/libarchive/libarchive/test/README
@@ -1,5 +1,3 @@
-$FreeBSD$
-
This is the test harness for libarchive.
It compiles into a single program "libarchive_test" that is intended
diff --git a/contrib/libarchive/libarchive/test/read_open_memory.c b/contrib/libarchive/libarchive/test/read_open_memory.c
index 3aa327f94cfb..6d2468cd10a6 100644
--- a/contrib/libarchive/libarchive/test/read_open_memory.c
+++ b/contrib/libarchive/libarchive/test/read_open_memory.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#include <errno.h>
#include <stdlib.h>
diff --git a/contrib/libarchive/libarchive/test/test_acl_nfs4.c b/contrib/libarchive/libarchive/test/test_acl_nfs4.c
index fdc0191516e1..98d39689df69 100644
--- a/contrib/libarchive/libarchive/test/test_acl_nfs4.c
+++ b/contrib/libarchive/libarchive/test/test_acl_nfs4.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Exercise the system-independent portion of the ACL support.
diff --git a/contrib/libarchive/libarchive/test/test_acl_pax.c b/contrib/libarchive/libarchive/test/test_acl_pax.c
index 8566f55a51a4..659073170fad 100644
--- a/contrib/libarchive/libarchive/test/test_acl_pax.c
+++ b/contrib/libarchive/libarchive/test/test_acl_pax.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Exercise the system-independent portion of the ACL support.
diff --git a/contrib/libarchive/libarchive/test/test_acl_platform_nfs4.c b/contrib/libarchive/libarchive/test/test_acl_platform_nfs4.c
index ae4bb5a10125..18f047b149e6 100644
--- a/contrib/libarchive/libarchive/test/test_acl_platform_nfs4.c
+++ b/contrib/libarchive/libarchive/test/test_acl_platform_nfs4.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#if ARCHIVE_ACL_NFS4
#if HAVE_SYS_ACL_H
@@ -907,7 +906,7 @@ DEFINE_TEST(test_acl_platform_nfs4)
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
for (i = 0; i < acls_dir_cnt; ++i) {
- sprintf(buff, "dir%d", i);
+ snprintf(buff, sizeof(buff), "dir%d", i);
archive_entry_set_pathname(ae, buff);
archive_entry_set_filetype(ae, AE_IFDIR);
archive_entry_set_perm(ae, 0654);
@@ -960,7 +959,7 @@ DEFINE_TEST(test_acl_platform_nfs4)
/* Verify single-permission dirs on disk. */
for (i = 0; i < dircnt; ++i) {
- sprintf(buff, "dir%d", i);
+ snprintf(buff, sizeof(buff), "dir%d", i);
assertEqualInt(0, stat(buff, &st));
assertEqualInt(st.st_mtime, 123456 + i);
#if ARCHIVE_ACL_SUNOS_NFS4
diff --git a/contrib/libarchive/libarchive/test/test_acl_platform_posix1e.c b/contrib/libarchive/libarchive/test/test_acl_platform_posix1e.c
index c34f7c2e299d..f23eec0d336a 100644
--- a/contrib/libarchive/libarchive/test/test_acl_platform_posix1e.c
+++ b/contrib/libarchive/libarchive/test/test_acl_platform_posix1e.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/test/test_acl_freebsd.c 189427 2009-03-06 04:21:23Z kientzle $");
#if ARCHIVE_ACL_POSIX1E
#include <sys/acl.h>
diff --git a/contrib/libarchive/libarchive/test/test_acl_posix1e.c b/contrib/libarchive/libarchive/test/test_acl_posix1e.c
index fa2628dbe794..3f9c9850f495 100644
--- a/contrib/libarchive/libarchive/test/test_acl_posix1e.c
+++ b/contrib/libarchive/libarchive/test/test_acl_posix1e.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/test/test_acl_basic.c,v 1.6 2008/10/19 00:13:57 kientzle Exp $");
/*
* Exercise the system-independent portion of the ACL support.
diff --git a/contrib/libarchive/libarchive/test/test_acl_text.c b/contrib/libarchive/libarchive/test/test_acl_text.c
index 80728932cb54..f0931adc8adc 100644
--- a/contrib/libarchive/libarchive/test/test_acl_text.c
+++ b/contrib/libarchive/libarchive/test/test_acl_text.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Test converting ACLs to text, both wide and non-wide
diff --git a/contrib/libarchive/libarchive/test/test_archive_api_feature.c b/contrib/libarchive/libarchive/test/test_archive_api_feature.c
index e4239feba178..597d0ed40245 100644
--- a/contrib/libarchive/libarchive/test/test_archive_api_feature.c
+++ b/contrib/libarchive/libarchive/test/test_archive_api_feature.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_archive_api_feature)
{
@@ -32,7 +31,7 @@ DEFINE_TEST(test_archive_api_feature)
/* This is the (hopefully) final versioning API. */
assertEqualInt(ARCHIVE_VERSION_NUMBER, archive_version_number());
- sprintf(buff, "libarchive %d.%d.%d",
+ snprintf(buff, sizeof(buff), "libarchive %d.%d.%d",
archive_version_number() / 1000000,
(archive_version_number() / 1000) % 1000,
archive_version_number() % 1000);
diff --git a/contrib/libarchive/libarchive/test/test_archive_clear_error.c b/contrib/libarchive/libarchive/test/test_archive_clear_error.c
index 66dbe93ec9e8..8b7609e07f2b 100644
--- a/contrib/libarchive/libarchive/test/test_archive_clear_error.c
+++ b/contrib/libarchive/libarchive/test/test_archive_clear_error.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_archive_clear_error)
{
diff --git a/contrib/libarchive/libarchive/test/test_archive_cmdline.c b/contrib/libarchive/libarchive/test/test_archive_cmdline.c
index a8236105af0b..e72acb4e9d37 100644
--- a/contrib/libarchive/libarchive/test/test_archive_cmdline.c
+++ b/contrib/libarchive/libarchive/test/test_archive_cmdline.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define __LIBARCHIVE_TEST
#include "archive_cmdline_private.h"
diff --git a/contrib/libarchive/libarchive/test/test_archive_getdate.c b/contrib/libarchive/libarchive/test/test_archive_getdate.c
index 9e91b83ba81d..e5b8bf7fa8f8 100644
--- a/contrib/libarchive/libarchive/test/test_archive_getdate.c
+++ b/contrib/libarchive/libarchive/test/test_archive_getdate.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#include <time.h>
diff --git a/contrib/libarchive/libarchive/test/test_archive_match_owner.c b/contrib/libarchive/libarchive/test/test_archive_match_owner.c
index 6bf9c6f08cfd..dc31c525941c 100644
--- a/contrib/libarchive/libarchive/test/test_archive_match_owner.c
+++ b/contrib/libarchive/libarchive/test/test_archive_match_owner.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
test_uid(void)
diff --git a/contrib/libarchive/libarchive/test/test_archive_match_path.c b/contrib/libarchive/libarchive/test/test_archive_match_path.c
index 5e9b9a8cbf63..ce48263f7614 100644
--- a/contrib/libarchive/libarchive/test/test_archive_match_path.c
+++ b/contrib/libarchive/libarchive/test/test_archive_match_path.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
test_exclusion_mbs(void)
diff --git a/contrib/libarchive/libarchive/test/test_archive_match_time.c b/contrib/libarchive/libarchive/test/test_archive_match_time.c
index c6864b3265e4..25a0623a7e5a 100644
--- a/contrib/libarchive/libarchive/test/test_archive_match_time.c
+++ b/contrib/libarchive/libarchive/test/test_archive_match_time.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define __LIBARCHIVE_BUILD 1
#include "archive_getdate.h"
@@ -321,6 +320,11 @@ test_newer_ctime_than_file_mbs(void)
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)) {
@@ -435,6 +439,11 @@ test_newer_ctime_than_file_wcs(void)
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)) {
@@ -782,6 +791,11 @@ test_older_ctime_than_file_mbs(void)
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)) {
@@ -897,6 +911,11 @@ test_older_ctime_than_file_wcs(void)
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)) {
@@ -1073,6 +1092,11 @@ test_ctime_between_files_mbs(void)
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)) {
@@ -1132,6 +1156,11 @@ test_ctime_between_files_wcs(void)
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)) {
diff --git a/contrib/libarchive/libarchive/test/test_archive_pathmatch.c b/contrib/libarchive/libarchive/test/test_archive_pathmatch.c
index 0116df0288d2..3696d38fcf19 100644
--- a/contrib/libarchive/libarchive/test/test_archive_pathmatch.c
+++ b/contrib/libarchive/libarchive/test/test_archive_pathmatch.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define __LIBARCHIVE_TEST
#include "archive_pathmatch.h"
diff --git a/contrib/libarchive/libarchive/test/test_archive_read_add_passphrase.c b/contrib/libarchive/libarchive/test/test_archive_read_add_passphrase.c
index 0ce5a76aedbc..c9b051101433 100644
--- a/contrib/libarchive/libarchive/test/test_archive_read_add_passphrase.c
+++ b/contrib/libarchive/libarchive/test/test_archive_read_add_passphrase.c
@@ -25,7 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
struct archive_read;
extern void __archive_read_reset_passphrase(struct archive_read *);
diff --git a/contrib/libarchive/libarchive/test/test_archive_read_close_twice.c b/contrib/libarchive/libarchive/test/test_archive_read_close_twice.c
index 16cc805fe027..2f5ee77f117e 100644
--- a/contrib/libarchive/libarchive/test/test_archive_read_close_twice.c
+++ b/contrib/libarchive/libarchive/test/test_archive_read_close_twice.c
@@ -24,8 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
-
DEFINE_TEST(test_archive_read_close_twice)
{
diff --git a/contrib/libarchive/libarchive/test/test_archive_read_close_twice_open_fd.c b/contrib/libarchive/libarchive/test/test_archive_read_close_twice_open_fd.c
index 3aba31791357..62a6a90df1fa 100644
--- a/contrib/libarchive/libarchive/test/test_archive_read_close_twice_open_fd.c
+++ b/contrib/libarchive/libarchive/test/test_archive_read_close_twice_open_fd.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_archive_read_close_twice_open_fd)
{
diff --git a/contrib/libarchive/libarchive/test/test_archive_read_close_twice_open_filename.c b/contrib/libarchive/libarchive/test/test_archive_read_close_twice_open_filename.c
index 9a194fdc4a8b..4824319b42bf 100644
--- a/contrib/libarchive/libarchive/test/test_archive_read_close_twice_open_filename.c
+++ b/contrib/libarchive/libarchive/test/test_archive_read_close_twice_open_filename.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_archive_read_close_twice_open_filename)
{
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 9962cf7fdf33..f5adb5b7b567 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
@@ -25,7 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#if defined(_WIN32) && !defined(__CYGWIN__)
#define open _open
@@ -185,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(1, BLOCK_SIZE)) == NULL)
+ if ((mydata->buffer = (void*)calloc(BLOCK_SIZE, 1)) == NULL)
return (ARCHIVE_FAILED);
}
}
@@ -287,7 +286,7 @@ test_customized_multiple_data_objects(void)
return;
}
assert((mydata->filename =
- (char *)calloc(1, strlen(filename) + 1)) != NULL);
+ (char *)calloc(strlen(filename) + 1, sizeof(char))) != NULL);
if (mydata->filename == NULL) {
free(mydata);
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
diff --git a/contrib/libarchive/libarchive/test/test_archive_read_next_header_empty.c b/contrib/libarchive/libarchive/test/test_archive_read_next_header_empty.c
index f43cbd934288..ee00291b51cd 100644
--- a/contrib/libarchive/libarchive/test/test_archive_read_next_header_empty.c
+++ b/contrib/libarchive/libarchive/test/test_archive_read_next_header_empty.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
test_empty_file1(void)
diff --git a/contrib/libarchive/libarchive/test/test_archive_read_next_header_raw.c b/contrib/libarchive/libarchive/test/test_archive_read_next_header_raw.c
index 1c8af20f8c3e..c3fbb8c21ac4 100644
--- a/contrib/libarchive/libarchive/test/test_archive_read_next_header_raw.c
+++ b/contrib/libarchive/libarchive/test/test_archive_read_next_header_raw.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define DATA "random garbage for testing purposes"
diff --git a/contrib/libarchive/libarchive/test/test_archive_read_open2.c b/contrib/libarchive/libarchive/test/test_archive_read_open2.c
index 0a801ac5d26d..6ba27cc4a134 100644
--- a/contrib/libarchive/libarchive/test/test_archive_read_open2.c
+++ b/contrib/libarchive/libarchive/test/test_archive_read_open2.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static int
open_cb(struct archive *a, void *client)
diff --git a/contrib/libarchive/libarchive/test/test_archive_read_set_filter_option.c b/contrib/libarchive/libarchive/test/test_archive_read_set_filter_option.c
index 31d575fc737e..68494abbc1e9 100644
--- a/contrib/libarchive/libarchive/test/test_archive_read_set_filter_option.c
+++ b/contrib/libarchive/libarchive/test/test_archive_read_set_filter_option.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define should(__a, __code, __m, __o, __v) \
assertEqualInt(__code, archive_read_set_filter_option(__a, __m, __o, __v))
diff --git a/contrib/libarchive/libarchive/test/test_archive_read_set_format_option.c b/contrib/libarchive/libarchive/test/test_archive_read_set_format_option.c
index 2d7acf3a0aa4..e32d8112445c 100644
--- a/contrib/libarchive/libarchive/test/test_archive_read_set_format_option.c
+++ b/contrib/libarchive/libarchive/test/test_archive_read_set_format_option.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define should(__a, __code, __m, __o, __v) \
assertEqualInt(__code, archive_read_set_format_option(__a, __m, __o, __v))
diff --git a/contrib/libarchive/libarchive/test/test_archive_read_set_option.c b/contrib/libarchive/libarchive/test/test_archive_read_set_option.c
index 0b816b7cd838..195c1eaa3e13 100644
--- a/contrib/libarchive/libarchive/test/test_archive_read_set_option.c
+++ b/contrib/libarchive/libarchive/test/test_archive_read_set_option.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define should(__a, __code, __m, __o, __v) \
assertEqualInt(__code, archive_read_set_option(__a, __m, __o, __v))
diff --git a/contrib/libarchive/libarchive/test/test_archive_read_set_options.c b/contrib/libarchive/libarchive/test/test_archive_read_set_options.c
index a8c68d7dd4cf..2f1f344eaad3 100644
--- a/contrib/libarchive/libarchive/test/test_archive_read_set_options.c
+++ b/contrib/libarchive/libarchive/test/test_archive_read_set_options.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define should(__a, __code, __opts) \
assertEqualInt(__code, archive_read_set_options(__a, __opts))
diff --git a/contrib/libarchive/libarchive/test/test_archive_read_support.c b/contrib/libarchive/libarchive/test/test_archive_read_support.c
index c6eb9346c627..b0c928023e8c 100644
--- a/contrib/libarchive/libarchive/test/test_archive_read_support.c
+++ b/contrib/libarchive/libarchive/test/test_archive_read_support.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Verify that the various archive_read_support_* functions
diff --git a/contrib/libarchive/libarchive/test/test_archive_set_error.c b/contrib/libarchive/libarchive/test/test_archive_set_error.c
index b83c08c884e9..402d5522a661 100644
--- a/contrib/libarchive/libarchive/test/test_archive_set_error.c
+++ b/contrib/libarchive/libarchive/test/test_archive_set_error.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
test(struct archive *a, int code, const char *msg)
diff --git a/contrib/libarchive/libarchive/test/test_archive_string.c b/contrib/libarchive/libarchive/test/test_archive_string.c
index 7fa743ba9ed2..f8f1e337bf73 100644
--- a/contrib/libarchive/libarchive/test/test_archive_string.c
+++ b/contrib/libarchive/libarchive/test/test_archive_string.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define __LIBARCHIVE_TEST
#include "archive_string.h"
@@ -406,7 +405,7 @@ DEFINE_TEST(test_archive_string_sort)
srand((unsigned int)time(NULL));
size = sizeof(strings) / sizeof(char *);
- assert((test_strings = (char **)calloc(1, sizeof(strings))) != NULL);
+ assert((test_strings = (char **)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 fb5359b6f349..d8c75888a4b3 100644
--- a/contrib/libarchive/libarchive/test/test_archive_string_conversion.c
+++ b/contrib/libarchive/libarchive/test/test_archive_string_conversion.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#include <locale.h>
@@ -42,8 +41,7 @@ if [ ! -f ${if} ]; then
exit 0
fi
of=test_archive_string_conversion.txt.Z
-echo "\$FreeBSD\$" > ${of}.uu
-awk -F ';' '$0 ~/^[0-9A-F]+/ {printf "%s;%s\n", $2, $3}' ${if} | compress | uuencode ${of} >> ${of}.uu
+awk -F ';' '$0 ~/^[0-9A-F]+/ {printf "%s;%s\n", $2, $3}' ${if} | compress | uuencode ${of} > ${of}.uu
exit 1
*/
@@ -847,6 +845,7 @@ test_archive_string_set_get(void)
assertEqualInt(0, archive_mstring_update_utf8(a, &mstr, "EEEEE---H"));
check_string(a, &mstr, sc, "EEEEE---H", L"EEEEE---H");
+ archive_mstring_clean(&mstr);
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
diff --git a/contrib/libarchive/libarchive/test/test_archive_string_conversion.txt.Z.uu b/contrib/libarchive/libarchive/test/test_archive_string_conversion.txt.Z.uu
index 33c2e03bf7a2..a36323393720 100644
--- a/contrib/libarchive/libarchive/test/test_archive_string_conversion.txt.Z.uu
+++ b/contrib/libarchive/libarchive/test/test_archive_string_conversion.txt.Z.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_archive_string_conversion.txt.Z
M'YV0,8K`"+(#!@P:-$#`F`'CAH*`,(84/)APH8P9#P4.4<CPQD2$'"]R;)@Q
MXDB/!D%:G'&RY,:%#3]6G"$2ID.(+SO*#,G29LD@'&,(V;E0:$N<08>FG&ET
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 ba8c1d0472f6..c80e161c3b58 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
@@ -23,9 +23,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
test_filter_by_name(const char *filter_name, int filter_code,
@@ -38,7 +36,7 @@ test_filter_by_name(const char *filter_name, int filter_code,
char *buff;
int r;
- assert((buff = calloc(1, buffsize)) != NULL);
+ assert((buff = calloc(buffsize, sizeof(char))) != NULL);
if (buff == NULL)
return;
@@ -142,12 +140,6 @@ canAlways(void)
return 1;
}
-static int
-cannot(void)
-{
- return 0;
-}
-
DEFINE_TEST(test_archive_write_add_filter_by_name_b64encode)
{
test_filter_by_name("b64encode", ARCHIVE_FILTER_UU, canAlways);
@@ -185,12 +177,12 @@ DEFINE_TEST(test_archive_write_add_filter_by_name_lz4)
DEFINE_TEST(test_archive_write_add_filter_by_name_lzip)
{
- test_filter_by_name("lzip", ARCHIVE_FILTER_LZIP, cannot);
+ test_filter_by_name("lzip", ARCHIVE_FILTER_LZIP, canLzip);
}
DEFINE_TEST(test_archive_write_add_filter_by_name_lzma)
{
- test_filter_by_name("lzma", ARCHIVE_FILTER_LZMA, cannot);
+ test_filter_by_name("lzma", ARCHIVE_FILTER_LZMA, canLzma);
}
DEFINE_TEST(test_archive_write_add_filter_by_name_lzop)
@@ -205,7 +197,7 @@ DEFINE_TEST(test_archive_write_add_filter_by_name_uuencode)
DEFINE_TEST(test_archive_write_add_filter_by_name_xz)
{
- test_filter_by_name("xz", ARCHIVE_FILTER_XZ, cannot);
+ test_filter_by_name("xz", ARCHIVE_FILTER_XZ, canXz);
}
DEFINE_TEST(test_archive_write_add_filter_by_name_zstd)
diff --git a/contrib/libarchive/libarchive/test/test_archive_write_set_filter_option.c b/contrib/libarchive/libarchive/test/test_archive_write_set_filter_option.c
index ab8e67773b50..6b90a831b469 100644
--- a/contrib/libarchive/libarchive/test/test_archive_write_set_filter_option.c
+++ b/contrib/libarchive/libarchive/test/test_archive_write_set_filter_option.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define should(__a, __code, __m, __o, __v) \
assertEqualInt(__code, archive_write_set_filter_option(__a, __m, __o, __v))
diff --git a/contrib/libarchive/libarchive/test/test_archive_write_set_format_by_name.c b/contrib/libarchive/libarchive/test/test_archive_write_set_format_by_name.c
index ef1327431b37..07942f6bffc8 100644
--- a/contrib/libarchive/libarchive/test/test_archive_write_set_format_by_name.c
+++ b/contrib/libarchive/libarchive/test/test_archive_write_set_format_by_name.c
@@ -23,9 +23,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
test_format_by_name(const char *format_name, const char *compression_type,
diff --git a/contrib/libarchive/libarchive/test/test_archive_write_set_format_filter_by_ext.c b/contrib/libarchive/libarchive/test/test_archive_write_set_format_filter_by_ext.c
index 22345038609a..fe6c350e48e7 100644
--- a/contrib/libarchive/libarchive/test/test_archive_write_set_format_filter_by_ext.c
+++ b/contrib/libarchive/libarchive/test/test_archive_write_set_format_filter_by_ext.c
@@ -24,9 +24,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
test_format_filter_by_ext(const char *output_file,
diff --git a/contrib/libarchive/libarchive/test/test_archive_write_set_format_option.c b/contrib/libarchive/libarchive/test/test_archive_write_set_format_option.c
index d964df44d7fa..38f83aba2ede 100644
--- a/contrib/libarchive/libarchive/test/test_archive_write_set_format_option.c
+++ b/contrib/libarchive/libarchive/test/test_archive_write_set_format_option.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define should(__a, __code, __m, __o, __v) \
assertEqualInt(__code, archive_write_set_format_option(__a, __m, __o, __v))
diff --git a/contrib/libarchive/libarchive/test/test_archive_write_set_option.c b/contrib/libarchive/libarchive/test/test_archive_write_set_option.c
index 27782342f330..aa44edad653d 100644
--- a/contrib/libarchive/libarchive/test/test_archive_write_set_option.c
+++ b/contrib/libarchive/libarchive/test/test_archive_write_set_option.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define should(__a, __code, __m, __o, __v) \
assertEqualInt(__code, archive_write_set_option(__a, __m, __o, __v))
diff --git a/contrib/libarchive/libarchive/test/test_archive_write_set_options.c b/contrib/libarchive/libarchive/test/test_archive_write_set_options.c
index db7e50e7f0f8..6a0198de35e1 100644
--- a/contrib/libarchive/libarchive/test/test_archive_write_set_options.c
+++ b/contrib/libarchive/libarchive/test/test_archive_write_set_options.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define should(__a, __code, __opts) \
assertEqualInt(__code, archive_write_set_options(__a, __opts))
diff --git a/contrib/libarchive/libarchive/test/test_archive_write_set_passphrase.c b/contrib/libarchive/libarchive/test/test_archive_write_set_passphrase.c
index 4bfcbb2c2dab..6e7e66531427 100644
--- a/contrib/libarchive/libarchive/test/test_archive_write_set_passphrase.c
+++ b/contrib/libarchive/libarchive/test/test_archive_write_set_passphrase.c
@@ -25,7 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
struct archive_write;
extern const char * __archive_write_get_passphrase(struct archive_write *);
diff --git a/contrib/libarchive/libarchive/test/test_bad_fd.c b/contrib/libarchive/libarchive/test/test_bad_fd.c
index 87dd4aa2b73e..11697da49d71 100644
--- a/contrib/libarchive/libarchive/test/test_bad_fd.c
+++ b/contrib/libarchive/libarchive/test/test_bad_fd.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/* Verify that attempting to open an invalid fd returns correct error. */
DEFINE_TEST(test_bad_fd)
diff --git a/contrib/libarchive/libarchive/test/test_compat_bzip2.c b/contrib/libarchive/libarchive/test/test_compat_bzip2.c
index 21417be0783f..e126e6f7d329 100644
--- a/contrib/libarchive/libarchive/test/test_compat_bzip2.c
+++ b/contrib/libarchive/libarchive/test/test_compat_bzip2.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Verify our ability to read sample files compatibly with bunzip2.
diff --git a/contrib/libarchive/libarchive/test/test_compat_bzip2_1.tbz.uu b/contrib/libarchive/libarchive/test/test_compat_bzip2_1.tbz.uu
index 8c944140b039..8de9101478a9 100644
--- a/contrib/libarchive/libarchive/test/test_compat_bzip2_1.tbz.uu
+++ b/contrib/libarchive/libarchive/test/test_compat_bzip2_1.tbz.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_compat_bzip2_1.tbz
M0EIH.3%!62936;12^)(``#-;D=$00`!_@``!8RT>$`0`$```""``5#5/*'J>
MD#(&30_5!H4_5-ZH`T``327U4@&L('"(9-%8<7&$I,`:7FXH<P(<:8)$*)(U
diff --git a/contrib/libarchive/libarchive/test/test_compat_bzip2_2.tbz.uu b/contrib/libarchive/libarchive/test/test_compat_bzip2_2.tbz.uu
index 286b3673b602..cd0dc6b93d3e 100644
--- a/contrib/libarchive/libarchive/test/test_compat_bzip2_2.tbz.uu
+++ b/contrib/libarchive/libarchive/test/test_compat_bzip2_2.tbz.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_compat_bzip2_2.tbz
M0EIH.3%!629361HI1P<``4#;D-$00`#_@``)9RT>$`0``!@P`/@#&$Q,F`F`
M`,83$R8"8``1133"1/2-J-#$/U3@;XVF9V'`Y3882XA$*KO6\WTL`]QU&J"8
diff --git a/contrib/libarchive/libarchive/test/test_compat_cpio.c b/contrib/libarchive/libarchive/test/test_compat_cpio.c
index 3c74cc373328..12512881112b 100644
--- a/contrib/libarchive/libarchive/test/test_compat_cpio.c
+++ b/contrib/libarchive/libarchive/test/test_compat_cpio.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Verify our ability to read various sample files.
diff --git a/contrib/libarchive/libarchive/test/test_compat_cpio_1.cpio.uu b/contrib/libarchive/libarchive/test/test_compat_cpio_1.cpio.uu
index 3f0ee524c9fc..5cfc0d29f2f5 100644
--- a/contrib/libarchive/libarchive/test/test_compat_cpio_1.cpio.uu
+++ b/contrib/libarchive/libarchive/test/test_compat_cpio_1.cpio.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_compat_cpio_1.cpio
M,#<P-S`Q,#`U-CEE8F4P,#`P.#%A-#`P,#`P,V4X,#`P,#`S93@P,#`P,#`P
M,31B,61E-#<T,#`P,#`P,#0P,#`P,#`P,#`P,#`P,#4T,#`P,#`P,#`P,#`P
diff --git a/contrib/libarchive/libarchive/test/test_compat_gtar.c b/contrib/libarchive/libarchive/test/test_compat_gtar.c
index 975b824c4ba0..ba42e726cf78 100644
--- a/contrib/libarchive/libarchive/test/test_compat_gtar.c
+++ b/contrib/libarchive/libarchive/test/test_compat_gtar.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Verify our ability to read sample files created by GNU tar.
diff --git a/contrib/libarchive/libarchive/test/test_compat_gtar_1.tar.uu b/contrib/libarchive/libarchive/test/test_compat_gtar_1.tar.uu
index 1e8d25be8bfc..fbcd1aa3af2a 100644
--- a/contrib/libarchive/libarchive/test/test_compat_gtar_1.tar.uu
+++ b/contrib/libarchive/libarchive/test/test_compat_gtar_1.tar.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_compat_gtar_1.tar
M+B\N+T!,;VYG3&EN:P``````````````````````````````````````````
M````````````````````````````````````````````````````````````
diff --git a/contrib/libarchive/libarchive/test/test_compat_gtar_2.tar.uu b/contrib/libarchive/libarchive/test/test_compat_gtar_2.tar.uu
index 7843a2cbaeb6..63303056f47f 100644
--- a/contrib/libarchive/libarchive/test/test_compat_gtar_2.tar.uu
+++ b/contrib/libarchive/libarchive/test/test_compat_gtar_2.tar.uu
@@ -1,4 +1,4 @@
-begin 660 test_compat_gtar_2.tar.uu
+begin 660 test_compat_gtar_2.tar
M9FEL95]W:71H7V)I9U]U:61?9VED````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````#`P,#`V-C8`@``````@```Q,#`P,#`P,#`P,#`P,#`P,38W
diff --git a/contrib/libarchive/libarchive/test/test_compat_gzip.c b/contrib/libarchive/libarchive/test/test_compat_gzip.c
index af7164161312..20fce7af432d 100644
--- a/contrib/libarchive/libarchive/test/test_compat_gzip.c
+++ b/contrib/libarchive/libarchive/test/test_compat_gzip.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Verify our ability to read sample files compatibly with gunzip.
diff --git a/contrib/libarchive/libarchive/test/test_compat_gzip_1.tgz.uu b/contrib/libarchive/libarchive/test/test_compat_gzip_1.tgz.uu
index 814ef67c09d7..c4793a634c00 100644
--- a/contrib/libarchive/libarchive/test/test_compat_gzip_1.tgz.uu
+++ b/contrib/libarchive/libarchive/test/test_compat_gzip_1.tgz.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_compat_gzip_1.tgz
M'XL(")B^(DD``W1E<W0M<W!L:70N=&%R86$`2S-DH#DP,#`P,S%1`-*&YJ:&
MR#0,&"L8`H&!J;&9F:&A@H&AH9&),8."`>V=QL!06ER26`1T2G9F:EY)54XJ
diff --git a/contrib/libarchive/libarchive/test/test_compat_gzip_2.tgz.uu b/contrib/libarchive/libarchive/test/test_compat_gzip_2.tgz.uu
index bbc62fec8b96..92c0940b93f1 100644
--- a/contrib/libarchive/libarchive/test/test_compat_gzip_2.tgz.uu
+++ b/contrib/libarchive/libarchive/test/test_compat_gzip_2.tgz.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_compat_gzip_2.tgz
M'XL(`&76(DD``^W800["(!"%8=:>@ALXPP`]CXF=Q&A<:-UX>EN)C5M,AL;P
MO@V[0A=_.E39F2.B'*.?5QX2?Z\?XGE&27)F]L0<HCA/]D=S[G&?#K?Y*.?3
diff --git a/contrib/libarchive/libarchive/test/test_compat_lz4.c b/contrib/libarchive/libarchive/test/test_compat_lz4.c
index eb763c1a7021..9e309a9fbd20 100644
--- a/contrib/libarchive/libarchive/test/test_compat_lz4.c
+++ b/contrib/libarchive/libarchive/test/test_compat_lz4.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Verify our ability to read sample files compatibly with 'lz4 -d'.
diff --git a/contrib/libarchive/libarchive/test/test_compat_lzip.c b/contrib/libarchive/libarchive/test/test_compat_lzip.c
index 8f4e06d3af77..1420e5bb9ac0 100644
--- a/contrib/libarchive/libarchive/test/test_compat_lzip.c
+++ b/contrib/libarchive/libarchive/test/test_compat_lzip.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
Execute the following to rebuild the data for this program:
@@ -130,6 +129,84 @@ compat_lzip(const char *name)
}
+static void
+compat_lzip_3(const char *name)
+{
+ struct archive_entry *ae;
+ struct archive *a;
+ int r;
+ const int data_size = 65537;
+ static uint8_t buff[65537];
+
+ assert((a = archive_read_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ r = archive_read_support_filter_lzip(a);
+ if (r == ARCHIVE_WARN) {
+ skipping("lzip reading not fully supported on this platform");
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ return;
+ }
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_raw(a));
+ extract_reference_file(name);
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_open_filename(a, name, 64 * 1024));
+
+ /* Read an entry. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("data", archive_entry_pathname(ae));
+ /* Verify that whole data could be read. */
+ assertEqualInt(data_size, archive_read_data(a, buff, data_size));
+
+ /* 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_LZIP);
+ assertEqualString(archive_filter_name(a, 0), "lzip");
+ assertEqualInt(archive_format(a), ARCHIVE_FORMAT_RAW);
+
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+
+static void
+compat_lzip_4(const char *name)
+{
+ struct archive_entry *ae;
+ struct archive *a;
+ int r;
+
+ assert((a = archive_read_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ r = archive_read_support_filter_lzip(a);
+ if (r == ARCHIVE_WARN) {
+ skipping("lzip reading not fully supported on this platform");
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ return;
+ }
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+ extract_reference_file(name);
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_open_filename(a, name, 64 * 1024));
+
+ /* Read an entry. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("test.bin", archive_entry_pathname(ae));
+
+ /* 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_LZIP);
+ assertEqualString(archive_filter_name(a, 0), "lzip");
+ assertEqualInt(archive_format(a), ARCHIVE_FORMAT_TAR_USTAR);
+
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+
DEFINE_TEST(test_compat_lzip)
{
/* This sample has been 'split', each piece compressed separately,
@@ -138,4 +215,9 @@ DEFINE_TEST(test_compat_lzip)
/* This sample has been compressed as a single stream, but then
* some unrelated garbage text has been appended to the end. */
compat_lzip("test_compat_lzip_2.tlz");
+
+ /* These samples have been compressed as multi stream and an eof
+ * of a member is at a read buffer boundary. */
+ compat_lzip_3("test_compat_lzip_3.lz");
+ compat_lzip_4("test_compat_lzip_4.tlz");
}
diff --git a/contrib/libarchive/libarchive/test/test_compat_lzip_3.lz.uu b/contrib/libarchive/libarchive/test/test_compat_lzip_3.lz.uu
new file mode 100644
index 000000000000..d72f533f8e5a
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_compat_lzip_3.lz.uu
@@ -0,0 +1,1461 @@
+begin 644 test_compat_lzip_3.lz
+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
+B4`$,`![!^____^````"<HVJ*`0`````````E````````````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_compat_lzip_4.tlz.uu b/contrib/libarchive/libarchive/test/test_compat_lzip_4.tlz.uu
new file mode 100644
index 000000000000..6a230c5e1322
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_compat_lzip_4.tlz.uu
@@ -0,0 +1,1474 @@
+begin 644 test_compat_lzip_4.tlz
+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
+%````````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_compat_lzma.c b/contrib/libarchive/libarchive/test/test_compat_lzma.c
index 3e3db0260345..b9cad55514a1 100644
--- a/contrib/libarchive/libarchive/test/test_compat_lzma.c
+++ b/contrib/libarchive/libarchive/test/test_compat_lzma.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
Execute the following to rebuild the data for this program:
diff --git a/contrib/libarchive/libarchive/test/test_compat_lzma_1.tlz.uu b/contrib/libarchive/libarchive/test/test_compat_lzma_1.tlz.uu
index 3b6321114220..ceee3b979069 100644
--- a/contrib/libarchive/libarchive/test/test_compat_lzma_1.tlz.uu
+++ b/contrib/libarchive/libarchive/test/test_compat_lzma_1.tlz.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_compat_lzma_1.tlz
M70``@`#__________P`S##P;IXPT!HUK`DO\DC[V2OB%Z^'=ZT59ANYMTD(/
M^W;\8!%O7<+P&=#(9W<_!$Z.7/Y<&\(8+E0^,_-\Z"D^P'N0J^4-UH"WMJ<&
diff --git a/contrib/libarchive/libarchive/test/test_compat_lzma_2.tlz.uu b/contrib/libarchive/libarchive/test/test_compat_lzma_2.tlz.uu
index 3d738989b808..b57d990fe333 100644
--- a/contrib/libarchive/libarchive/test/test_compat_lzma_2.tlz.uu
+++ b/contrib/libarchive/libarchive/test/test_compat_lzma_2.tlz.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_compat_lzma_2.tlz
M7@``@`#__________P`S##P;IXPT!HUK`DO\DC[V2OB%Z^'<FN`(!=!,)@8W
M9R(6\QIOTA6SGM20X;2'6#3B&HC%2XOX2?D['5WD"`>`W2"/3R1F1:P:&Q9A
diff --git a/contrib/libarchive/libarchive/test/test_compat_lzma_3.tlz.uu b/contrib/libarchive/libarchive/test/test_compat_lzma_3.tlz.uu
index b8d61b70afd3..1976f364d211 100644
--- a/contrib/libarchive/libarchive/test/test_compat_lzma_3.tlz.uu
+++ b/contrib/libarchive/libarchive/test/test_compat_lzma_3.tlz.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_compat_lzma_3.tlz
M70`0````'``````````S##P;IXPT!HUK`DO\DC[V2OB%Z^'=ZT59ANYMTD(1
M$Y^=;\4%U_CXKQ*F$OFZKEQUG)1U8="](V<2K"U1\Z6%H(UNQ[Y3.=D'>_G-
diff --git a/contrib/libarchive/libarchive/test/test_compat_lzop.c b/contrib/libarchive/libarchive/test/test_compat_lzop.c
index cd43afcf3e99..2da4e8eb6dc2 100644
--- a/contrib/libarchive/libarchive/test/test_compat_lzop.c
+++ b/contrib/libarchive/libarchive/test/test_compat_lzop.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Verify our ability to read sample files compatibly with lzop.
diff --git a/contrib/libarchive/libarchive/test/test_compat_mac.c b/contrib/libarchive/libarchive/test/test_compat_mac.c
index 5caa17f83e63..976f04a473f6 100644
--- a/contrib/libarchive/libarchive/test/test_compat_mac.c
+++ b/contrib/libarchive/libarchive/test/test_compat_mac.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/* The sample has some files in a directory with a very long name. */
#define TESTPATH "abcdefghijklmnopqrstuvwxyz/" \
diff --git a/contrib/libarchive/libarchive/test/test_compat_perl_archive_tar.c b/contrib/libarchive/libarchive/test/test_compat_perl_archive_tar.c
index 165a519a3432..94abe3f056a3 100644
--- a/contrib/libarchive/libarchive/test/test_compat_perl_archive_tar.c
+++ b/contrib/libarchive/libarchive/test/test_compat_perl_archive_tar.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
/*
* Verify our ability to read sample files created by Perl module Archive::Tar
diff --git a/contrib/libarchive/libarchive/test/test_compat_plexus_archiver_tar.c b/contrib/libarchive/libarchive/test/test_compat_plexus_archiver_tar.c
index 0f8bedc2df5f..419e84b1c4c9 100644
--- a/contrib/libarchive/libarchive/test/test_compat_plexus_archiver_tar.c
+++ b/contrib/libarchive/libarchive/test/test_compat_plexus_archiver_tar.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
/*
* Verify our ability to read sample files created by plexus-archiver version
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 0ab333bb180b..c25c4eb8f51e 100644
--- a/contrib/libarchive/libarchive/test/test_compat_solaris_pax_sparse.c
+++ b/contrib/libarchive/libarchive/test/test_compat_solaris_pax_sparse.c
@@ -23,8 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
-
/*
* Verify our ability to read sample files created by Solaris pax for
* a sparse file.
diff --git a/contrib/libarchive/libarchive/test/test_compat_solaris_tar_acl.c b/contrib/libarchive/libarchive/test/test_compat_solaris_tar_acl.c
index 815977290670..df7435c7cbec 100644
--- a/contrib/libarchive/libarchive/test/test_compat_solaris_tar_acl.c
+++ b/contrib/libarchive/libarchive/test/test_compat_solaris_tar_acl.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Verify reading entries with POSIX.1e and NFSv4 ACLs from archives created
diff --git a/contrib/libarchive/libarchive/test/test_compat_star_acl.c b/contrib/libarchive/libarchive/test/test_compat_star_acl.c
index 824710194c18..749f5ce34294 100644
--- a/contrib/libarchive/libarchive/test/test_compat_star_acl.c
+++ b/contrib/libarchive/libarchive/test/test_compat_star_acl.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Verify reading entries with POSIX.1e and NFSv4 ACLs from archives created
diff --git a/contrib/libarchive/libarchive/test/test_compat_tar_directory.c b/contrib/libarchive/libarchive/test/test_compat_tar_directory.c
new file mode 100644
index 000000000000..3d086f1da7bc
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_compat_tar_directory.c
@@ -0,0 +1,76 @@
+/*-
+ * Copyright (c) 2021 Samanta Navarro
+ * 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"
+
+/*
+ * Background: Original tar file format did not use its linkflag to
+ * specify directories. Instead regular files simply have a slash
+ * appended to their names. No data blocks follow directories in
+ * archives. This means that a possibly specified file size must not
+ * be used to determine the amount of data blocks to skip.
+ */
+
+static void
+test_compat_tar_directory_1(void)
+{
+ char name[] = "test_compat_tar_directory_1.tar";
+ 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, which is a directory in a regular file header. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("directory1/", archive_entry_pathname(ae));
+ assertEqualInt(AE_IFDIR, archive_entry_filetype(ae));
+ assertEqualInt(1, archive_entry_size(ae));
+
+ /* Read second entry, which is a ustar directory entry. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("directory2/", archive_entry_pathname(ae));
+ assertEqualInt(AE_IFDIR, archive_entry_filetype(ae));
+ assertEqualInt(0, archive_entry_size(ae));
+
+ /* 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_NONE);
+ assertEqualInt(archive_format(a), ARCHIVE_FORMAT_TAR);
+
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_compat_tar_directory)
+{
+ test_compat_tar_directory_1();
+}
+
+
diff --git a/contrib/libarchive/libarchive/test/test_compat_tar_directory_1.tar.uu b/contrib/libarchive/libarchive/test/test_compat_tar_directory_1.tar.uu
new file mode 100644
index 000000000000..513d55ffcb78
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_compat_tar_directory_1.tar.uu
@@ -0,0 +1,49 @@
+begin 644 test_compat_tar_directory_1.tar
+M9&ER96-T;W)Y,2\`````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````#`P,#`W,#``,#`P,#`P,``P,#`P,#`P`#`P,#`P,#`P,#`Q
+M`#`P,#`P,#`P,#`P`#`P-C4Q-0`@````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````!D:7)E8W1O<GDR+P``````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````,#`P,#<P,``P,#`P,#`P`#`P
+M,#`P,#``,#`P,#`P,#`P,#``,#`P,#`P,#`P,#``,#`V-3$U`"``````````
+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````````````````````````````````````````````````````````````
+7````````````````````````````````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_compat_tar_hardlink.c b/contrib/libarchive/libarchive/test/test_compat_tar_hardlink.c
index 6459fed13792..b8517440aea5 100644
--- a/contrib/libarchive/libarchive/test/test_compat_tar_hardlink.c
+++ b/contrib/libarchive/libarchive/test/test_compat_tar_hardlink.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Background: There are two written standards for the tar file format.
diff --git a/contrib/libarchive/libarchive/test/test_compat_tar_hardlink_1.tar.uu b/contrib/libarchive/libarchive/test/test_compat_tar_hardlink_1.tar.uu
index f1658a27514a..eeb31786da7e 100644
--- a/contrib/libarchive/libarchive/test/test_compat_tar_hardlink_1.tar.uu
+++ b/contrib/libarchive/libarchive/test/test_compat_tar_hardlink_1.tar.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_compat_tar_hardlink_1.tar
M>&UC9"TS+C,N,B]D;V-S7V0O4D5!1$UF````````````````````````````
M````````````````````````````````````````````````````````````
diff --git a/contrib/libarchive/libarchive/test/test_compat_uudecode.c b/contrib/libarchive/libarchive/test/test_compat_uudecode.c
index cfb17c85788d..d6936d9dcd5d 100644
--- a/contrib/libarchive/libarchive/test/test_compat_uudecode.c
+++ b/contrib/libarchive/libarchive/test/test_compat_uudecode.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static char archive_data[] = {
"begin 644 test_read_uu.Z\n"
diff --git a/contrib/libarchive/libarchive/test/test_compat_uudecode_large.c b/contrib/libarchive/libarchive/test/test_compat_uudecode_large.c
index a2ffd22663a5..c4ab0ec3fd0d 100644
--- a/contrib/libarchive/libarchive/test/test_compat_uudecode_large.c
+++ b/contrib/libarchive/libarchive/test/test_compat_uudecode_large.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_compat_uudecode_large)
{
diff --git a/contrib/libarchive/libarchive/test/test_compat_xz.c b/contrib/libarchive/libarchive/test/test_compat_xz.c
index 2ced94331a5f..f904583782d2 100644
--- a/contrib/libarchive/libarchive/test/test_compat_xz.c
+++ b/contrib/libarchive/libarchive/test/test_compat_xz.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Verify our ability to read sample files compatibly with unxz.
diff --git a/contrib/libarchive/libarchive/test/test_compat_xz_1.txz.uu b/contrib/libarchive/libarchive/test/test_compat_xz_1.txz.uu
index 82794fd8c278..af47f4eee314 100644
--- a/contrib/libarchive/libarchive/test/test_compat_xz_1.txz.uu
+++ b/contrib/libarchive/libarchive/test/test_compat_xz_1.txz.uu
@@ -1,5 +1,4 @@
-$FreeBSD$
-begin 644 test_compat_gzip_1.txz
+begin 644 test_compat_xz_1.txz
M_3=Z6%H```3FUK1&`@`A`18```!T+^6CX`^?`(-=`#,,/!NGC#0&C6L"2_R2
M/O9*^(7KX=WM^(=KA(RH"\09$$)!Q_+JUHQ*`]R;ITL_F3/I6:^Q0550A&)B
MHS@=K]7@K1-9FOIP#PU!I<PUHW+W#<F(6FSL/<?5:4*>?E5&IHH&Q=N>_C&G
diff --git a/contrib/libarchive/libarchive/test/test_compat_zip.c b/contrib/libarchive/libarchive/test/test_compat_zip.c
index 898d3e5ce8d0..e2d41cc9b439 100644
--- a/contrib/libarchive/libarchive/test/test_compat_zip.c
+++ b/contrib/libarchive/libarchive/test/test_compat_zip.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/* Copy this function for each test file and adjust it accordingly. */
DEFINE_TEST(test_compat_zip_1)
diff --git a/contrib/libarchive/libarchive/test/test_compat_zip_1.zip.uu b/contrib/libarchive/libarchive/test/test_compat_zip_1.zip.uu
index 1ed2d69966bf..e13a6cac29d9 100644
--- a/contrib/libarchive/libarchive/test/test_compat_zip_1.zip.uu
+++ b/contrib/libarchive/libarchive/test/test_compat_zip_1.zip.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_compat_zip_1.zip
M4$L#!!0`"``(``B$@S<````````````````4````345402U)3D8O34%.249%
M4U0N34;S3<S+3$LM+M$-2RTJSLS/LU(PU#/@Y7+,0Q)Q+$A,SDA5`(H!)<U!
diff --git a/contrib/libarchive/libarchive/test/test_compat_zip_8.zip.uu b/contrib/libarchive/libarchive/test/test_compat_zip_8.zip.uu
index 316b6f62d4bb..2ab6cf70c670 100644
--- a/contrib/libarchive/libarchive/test/test_compat_zip_8.zip.uu
+++ b/contrib/libarchive/libarchive/test/test_compat_zip_8.zip.uu
@@ -1,6 +1,6 @@
-begin 666 test_compat_zip_8.zip
-M4$L#!!0````(`%A\;TOY6""D$`````X````(````87)C7'1E<W3[_Z^$(96A
-MF*&$@9>!BP$`4$L!`A0`%`````@`6'QO2_E8(*00````#@````@`````````
-H`````````````&%R8UQT97-T4$L%!@`````!``$`-@```#8`````````
-`
-end
+begin 666 test_compat_zip_8.zip
+M4$L#!!0````(`%A\;TOY6""D$`````X````(````87)C7'1E<W3[_Z^$(96A
+MF*&$@9>!BP$`4$L!`A0`%`````@`6'QO2_E8(*00````#@````@`````````
+H`````````````&%R8UQT97-T4$L%!@`````!``$`-@```#8`````````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_compat_zstd.c b/contrib/libarchive/libarchive/test/test_compat_zstd.c
index 134775816a94..34b8edeb924d 100644
--- a/contrib/libarchive/libarchive/test/test_compat_zstd.c
+++ b/contrib/libarchive/libarchive/test/test_compat_zstd.c
@@ -23,8 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
-
/*
* Verify our ability to read sample files compatibly with 'zstd -d'.
*
diff --git a/contrib/libarchive/libarchive/test/test_empty_write.c b/contrib/libarchive/libarchive/test/test_empty_write.c
index 34830078285f..b5572f73d77a 100644
--- a/contrib/libarchive/libarchive/test/test_empty_write.c
+++ b/contrib/libarchive/libarchive/test/test_empty_write.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_empty_write)
{
diff --git a/contrib/libarchive/libarchive/test/test_entry.c b/contrib/libarchive/libarchive/test/test_entry.c
index a5777b148711..228fdd8bcc56 100644
--- a/contrib/libarchive/libarchive/test/test_entry.c
+++ b/contrib/libarchive/libarchive/test/test_entry.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#include <locale.h>
diff --git a/contrib/libarchive/libarchive/test/test_entry_strmode.c b/contrib/libarchive/libarchive/test/test_entry_strmode.c
index 70c0e7556968..abeed4c483b2 100644
--- a/contrib/libarchive/libarchive/test/test_entry_strmode.c
+++ b/contrib/libarchive/libarchive/test/test_entry_strmode.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_entry_strmode)
{
diff --git a/contrib/libarchive/libarchive/test/test_extattr_freebsd.c b/contrib/libarchive/libarchive/test/test_extattr_freebsd.c
index ff05aa4a04b1..f69275854df8 100644
--- a/contrib/libarchive/libarchive/test/test_extattr_freebsd.c
+++ b/contrib/libarchive/libarchive/test/test_extattr_freebsd.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#if defined(__FreeBSD__) && __FreeBSD__ > 4
#include <sys/extattr.h>
diff --git a/contrib/libarchive/libarchive/test/test_filter_count.c b/contrib/libarchive/libarchive/test/test_filter_count.c
index 4885ab89a52e..8b28795ee0d5 100644
--- a/contrib/libarchive/libarchive/test/test_filter_count.c
+++ b/contrib/libarchive/libarchive/test/test_filter_count.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/test/test_read_file_nonexistent.c 189473 2009-03-07 02:09:21Z kientzle $");
static void read_test(const char *name);
static void write_test(void);
diff --git a/contrib/libarchive/libarchive/test/test_fuzz.c b/contrib/libarchive/libarchive/test/test_fuzz.c
index 7ca0fd1dad26..dcb4f73ca372 100644
--- a/contrib/libarchive/libarchive/test/test_fuzz.c
+++ b/contrib/libarchive/libarchive/test/test_fuzz.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* This was inspired by an ISO fuzz tester written by Michal Zalewski
@@ -124,10 +123,9 @@ test_fuzz(const struct files *filesets)
newraw = realloc(rawimage, oldsize + size);
if (!assert(newraw != NULL))
{
- free(rawimage);
- rawimage = NULL;
free(tmp);
- continue;
+ size = 0;
+ break;
}
rawimage = newraw;
memcpy(rawimage + oldsize, tmp, size);
@@ -428,6 +426,10 @@ DEFINE_TEST(test_fuzz_tar)
NULL
};
#endif
+ static const char *fileset11[] = {
+ "test_compat_tar_directory_1.tar",
+ NULL
+ };
static const struct files filesets[] = {
{0, fileset1}, /* Exercise bzip2 decompressor. */
{1, fileset1},
@@ -444,6 +446,7 @@ DEFINE_TEST(test_fuzz_tar)
#if HAVE_ZSTD_H && HAVE_LIBZSTD
{0, fileset10}, /* Exercise zstd decompressor. */
#endif
+ {0, fileset11},
{1, NULL}
};
test_fuzz(filesets);
diff --git a/contrib/libarchive/libarchive/test/test_fuzz_1.iso.Z.uu b/contrib/libarchive/libarchive/test/test_fuzz_1.iso.Z.uu
index 6044296c1ad6..0eb3f7deb4ce 100644
--- a/contrib/libarchive/libarchive/test/test_fuzz_1.iso.Z.uu
+++ b/contrib/libarchive/libarchive/test/test_fuzz_1.iso.Z.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_fuzz_1.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
diff --git a/contrib/libarchive/libarchive/test/test_gnutar_filename_encoding.c b/contrib/libarchive/libarchive/test/test_gnutar_filename_encoding.c
index 3ec4f61290f8..f473ddfb4fe9 100644
--- a/contrib/libarchive/libarchive/test/test_gnutar_filename_encoding.c
+++ b/contrib/libarchive/libarchive/test/test_gnutar_filename_encoding.c
@@ -23,8 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
-
#include <locale.h>
DEFINE_TEST(test_gnutar_filename_encoding_UTF8_CP866)
diff --git a/contrib/libarchive/libarchive/test/test_link_resolver.c b/contrib/libarchive/libarchive/test/test_link_resolver.c
index 032c05951078..5bea9a463b30 100644
--- a/contrib/libarchive/libarchive/test/test_link_resolver.c
+++ b/contrib/libarchive/libarchive/test/test_link_resolver.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void test_linkify_tar(void)
{
diff --git a/contrib/libarchive/libarchive/test/test_open_failure.c b/contrib/libarchive/libarchive/test/test_open_failure.c
index 5316a872b6a8..a8eedadc95fe 100644
--- a/contrib/libarchive/libarchive/test/test_open_failure.c
+++ b/contrib/libarchive/libarchive/test/test_open_failure.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define MAGIC 123456789
struct my_data {
diff --git a/contrib/libarchive/libarchive/test/test_open_fd.c b/contrib/libarchive/libarchive/test/test_open_fd.c
index da5eeafcb866..bd73fb36197f 100644
--- a/contrib/libarchive/libarchive/test/test_open_fd.c
+++ b/contrib/libarchive/libarchive/test/test_open_fd.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#if defined(_WIN32) && !defined(__CYGWIN__)
#define open _open
diff --git a/contrib/libarchive/libarchive/test/test_open_file.c b/contrib/libarchive/libarchive/test/test_open_file.c
index 52b60efd2164..f4ca82bb01a0 100644
--- a/contrib/libarchive/libarchive/test/test_open_file.c
+++ b/contrib/libarchive/libarchive/test/test_open_file.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_open_file)
{
diff --git a/contrib/libarchive/libarchive/test/test_open_filename.c b/contrib/libarchive/libarchive/test/test_open_filename.c
index dee11bc110df..09a83690be0d 100644
--- a/contrib/libarchive/libarchive/test/test_open_filename.c
+++ b/contrib/libarchive/libarchive/test/test_open_filename.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
test_open_filename_mbs(void)
diff --git a/contrib/libarchive/libarchive/test/test_pax_filename_encoding.c b/contrib/libarchive/libarchive/test/test_pax_filename_encoding.c
index 635e8e69f896..737641c5abca 100644
--- a/contrib/libarchive/libarchive/test/test_pax_filename_encoding.c
+++ b/contrib/libarchive/libarchive/test/test_pax_filename_encoding.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#include <locale.h>
diff --git a/contrib/libarchive/libarchive/test/test_pax_filename_encoding.tar.uu b/contrib/libarchive/libarchive/test/test_pax_filename_encoding.tar.uu
index e7773fdedd91..1c221fd6be20 100644
--- a/contrib/libarchive/libarchive/test/test_pax_filename_encoding.tar.uu
+++ b/contrib/libarchive/libarchive/test/test_pax_filename_encoding.tar.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_pax_filename_encoding.tar
M4&%X2&5A9&5R+V%B8\R,;6YO6'AY>@``````````````````````````````
M````````````````````````````````````````````````````````````
diff --git a/contrib/libarchive/libarchive/test/test_pax_xattr_header.c b/contrib/libarchive/libarchive/test/test_pax_xattr_header.c
index d0394aa09eda..8af81079ea7e 100644
--- a/contrib/libarchive/libarchive/test/test_pax_xattr_header.c
+++ b/contrib/libarchive/libarchive/test/test_pax_xattr_header.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static struct archive_entry*
create_archive_entry(void) {
diff --git a/contrib/libarchive/libarchive/test/test_rar_multivolume_single_file.part1.rar.uu b/contrib/libarchive/libarchive/test/test_rar_multivolume_single_file.part1.rar.uu
index 22b5c8dfa3e8..b2afdf152a48 100644
--- a/contrib/libarchive/libarchive/test/test_rar_multivolume_single_file.part1.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_rar_multivolume_single_file.part1.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_rar_multivolume_single_file.part1.rar
M4F%R(1H'`%IN<Q$!#0````````"(KG0BD$,`[1H``(].```#D,J\!?-C(4`4
M,!D`I($``$QI8F%R8VAI=F5!9&1I;F=497-T+FAT;6S`S/-C(4#T8R%`/"%$
M3T-465!%($A434P@4%5"3$E#("(M+R]7,T,O+T141"!(5$U,(#0N,"!4<F%N
diff --git a/contrib/libarchive/libarchive/test/test_rar_multivolume_single_file.part2.rar.uu b/contrib/libarchive/libarchive/test/test_rar_multivolume_single_file.part2.rar.uu
index e00e06cb278e..615698bdefb3 100644
--- a/contrib/libarchive/libarchive/test/test_rar_multivolume_single_file.part2.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_rar_multivolume_single_file.part2.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_rar_multivolume_single_file.part2.rar
M4F%R(1H'`!EZ<Q$`#0````````#7@W0CD$,`[1H``(].```#.)1.%?-C(4`4
M,!D`I($``$QI8F%R8VAI=F5!9&1I;F=497-T+FAT;6S`S/-C(4#T8R%`*0IG
M96YE<F%T92!D971A:6QE9"!L;V<@;65S<V%G97,@;VX@9F%I;'5R92X@26X@
diff --git a/contrib/libarchive/libarchive/test/test_rar_multivolume_single_file.part3.rar.uu b/contrib/libarchive/libarchive/test/test_rar_multivolume_single_file.part3.rar.uu
index 06e72a790dab..63c984782e1d 100644
--- a/contrib/libarchive/libarchive/test/test_rar_multivolume_single_file.part3.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_rar_multivolume_single_file.part3.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_rar_multivolume_single_file.part3.rar
M4F%R(1H'`!EZ<Q$`#0`````````?;70AD$,`M1@``(].```#8Z8%7O-C(4`4
M,!D`I($``$QI8F%R8VAI=F5!9&1I;F=497-T+FAT;6S`S/-C(4#T8R%`=7-U
M86QL>2!R=6X*"6%L;"!O9B!T:&4@=&5S=',N(`H)/"]0/@H)/$Q)/CQ0(%-4
diff --git a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part01.rar.uu b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part01.rar.uu
index 876b7e9acbd1..b583f86f869e 100644
--- a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part01.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part01.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_rar_multivolume_uncompressed_files.part01.rar
M4F%R(1H'`%IN<Q$!#0````````"G@W0BD$P`C#,``(].```#]EC4PKM,-4$4
M,"(`I($``'1E<W1D:7)<3&EB87)C:&EV94%D9&EN9U1E<W0R+FAT;6R`S#)?
M.T)17SM"/"%$3T-465!%($A434P@4%5"3$E#("(M+R]7,T,O+T141"!(5$U,
diff --git a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part02.rar.uu b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part02.rar.uu
index 97e826ee7a64..fdf944443a07 100644
--- a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part02.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part02.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_rar_multivolume_uncompressed_files.part02.rar
M4F%R(1H'`!EZ<Q$`#0````````#G!'0AD$P``QL``(].```#8Z8%7KM,-4$4
M,"(`I($``'1E<W1D:7)<3&EB87)C:&EV94%D9&EN9U1E<W0R+FAT;6R`S#)?
M.T)17SM"(&%S<V5R=$5Q=6%L365M('1O('1E<W0@97%U86QI='D@:6YS=&5A
diff --git a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part03.rar.uu b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part03.rar.uu
index 027f050889fd..caf9e7569bd6 100644
--- a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part03.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part03.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_rar_multivolume_uncompressed_files.part03.rar
M4F%R(1H'`!EZ<Q$`#0````````"P,W0CD%<`@3,``(].```#*23KD;M,-4$4
M,"T`I($``'1E<W1D:7)<=&5S='-U8F1I<EQ,:6)A<F-H:79E061D:6YG5&5S
M=#(N:'1M;,#,,U\[0F-?.T)I;VYS+B!)9B!T:&4@87-S97)T:6]N(&9A:6QS
diff --git a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part04.rar.uu b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part04.rar.uu
index be9a921bc33c..1e645fe35aa2 100644
--- a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part04.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part04.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_rar_multivolume_uncompressed_files.part04.rar
M4F%R(1H'`!EZ<Q$`#0````````!K>G0AD%<`W`(``(].```#8Z8%7KM,-4$4
M,"T`I($``'1E<W1D:7)<=&5S='-U8F1I<EQ,:6)A<F-H:79E061D:6YG5&5S
M=#(N:'1M;,#,,U\[0F-?.T)B>0IT:&4@87)C:&EV92!W<FET97(@:7,@=&AE
diff --git a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part05.rar.uu b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part05.rar.uu
index 0891b2285b0c..eb271f063a64 100644
--- a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part05.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part05.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_rar_multivolume_uncompressed_files.part05.rar
M4F%R(1H'`!EZ<Q$`#0````````!U''0AD$0`+AX``(].```#8Z8%7KM,-4$4
M,!H`I($``$QI8F%R8VAI=F5!9&1I;F=497-T,BYH=&ULP,P)7SM",E\[0F9E
M<F5N8V5?9FEL92@F<75O=#MT97-T7V9O;RYT87(F<75O=#LI.SPO4%)%/CQ0
diff --git a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part06.rar.uu b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part06.rar.uu
index 6511cb68c6af..c63065865a0e 100644
--- a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part06.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part06.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_rar_multivolume_uncompressed_files.part06.rar
M4F%R(1H'`!EZ<Q$`#0`````````*JW0CD$L`C3,``(].```#8\SY_?-C(4`4
M,"$`I($``'1E<W1D:7)<3&EB87)C:&EV94%D9&EN9U1E<W0N:'1M;(#,,E\[
M0DU?.T(N+B!S971U<"!O;6ET=&5D("XN+B`J+PHF;F)S<#L@)FYB<W`[(&%S
diff --git a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part07.rar.uu b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part07.rar.uu
index fa3206266ce4..c7dab1b886e9 100644
--- a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part07.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part07.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_rar_multivolume_uncompressed_files.part07.rar
M4F%R(1H'`!EZ<Q$`#0````````!*\70AD$L`YP4``(].```#8Z8%7O-C(4`4
M,"$`I($``'1E<W1D:7)<3&EB87)C:&EV94%D9&EN9U1E<W0N:'1M;(#,,E\[
M0DU?.T)I=&@@82!D;WIE;B!E;G1R:65S(&1O=VX@=&\*:G5S="!A(&9E=R!K
diff --git a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part08.rar.uu b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part08.rar.uu
index e8e0ffe8c57e..9e53660ed0c5 100644
--- a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part08.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part08.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_rar_multivolume_uncompressed_files.part08.rar
M4F%R(1H'`!EZ<Q$`#0````````#I1G0AD%8`/R$``(].```#8Z8%7O-C(4`4
M,"P`I($``'1E<W1D:7)<=&5S='-U8F1I<EQ,:6)A<F-H:79E061D:6YG5&5S
M="YH=&ULP,PS7SM"6U\[0D-O;G1E;G1S/"]45#XL"@D\5%0@0TQ!4U,](G=E
diff --git a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part09.rar.uu b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part09.rar.uu
index bdcdc999c4d6..c2d890401e69 100644
--- a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part09.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part09.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_rar_multivolume_uncompressed_files.part09.rar
M4F%R(1H'`!EZ<Q$`#0````````"N!'0CD$,`E3,``(].```#97_()_-C(4`4
M,!D`I($``$QI8F%R8VAI=F5!9&1I;F=497-T+FAT;6S`S`E?.T(R7SM"4STB
M=V5S=&5R;B(^/$$@3D%-13TB0F%S:6-?=&5S=%]T97)M:6YO;&]G>2(^/"]!
diff --git a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part10.rar.uu b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part10.rar.uu
index aef15d214a21..66c22262e189 100644
--- a/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part10.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_rar_multivolume_uncompressed_files.part10.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_rar_multivolume_uncompressed_files.part10.rar
M4F%R(1H'`!EZ<Q$`#0`````````5)G0AD$,`^@@``(].```#8Z8%7O-C(4`4
M,!D`I($``$QI8F%R8VAI=F5!9&1I;F=497-T+FAT;6S`S`E?.T(R7SM"97AE
M<F-I<V4@8F]U;F1A<GD@8V%S97,@=VET:"!V97)Y"FQA<F=E(&5N=')I97,L
diff --git a/contrib/libarchive/libarchive/test/test_read_data_large.c b/contrib/libarchive/libarchive/test/test_read_data_large.c
index 27d1421b16dc..59cbfd496ca9 100644
--- a/contrib/libarchive/libarchive/test/test_read_data_large.c
+++ b/contrib/libarchive/libarchive/test/test_read_data_large.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Test read/write of a 10M block of data in a single operation.
@@ -49,7 +48,6 @@ DEFINE_TEST(test_read_data_large)
char tmpfilename[] = "largefile";
int tmpfilefd;
FILE *f;
- unsigned int i;
size_t used;
/* Create a new archive in memory. */
@@ -64,8 +62,7 @@ DEFINE_TEST(test_read_data_large)
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, "file");
archive_entry_set_mode(ae, S_IFREG | 0755);
- for (i = 0; i < sizeof(buff2); i++)
- buff2[i] = (unsigned char)rand();
+ fill_with_pseudorandom_data(buff2, sizeof(buff2));
archive_entry_set_size(ae, sizeof(buff2));
assertA(0 == archive_write_header(a, ae));
archive_entry_free(ae);
diff --git a/contrib/libarchive/libarchive/test/test_read_disk.c b/contrib/libarchive/libarchive/test/test_read_disk.c
index a57da1a537bf..24349574a7a2 100644
--- a/contrib/libarchive/libarchive/test/test_read_disk.c
+++ b/contrib/libarchive/libarchive/test/test_read_disk.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
gname_cleanup(void *d)
diff --git a/contrib/libarchive/libarchive/test/test_read_disk_directory_traversals.c b/contrib/libarchive/libarchive/test/test_read_disk_directory_traversals.c
index bca3ce518e21..009c9a8db1e1 100644
--- a/contrib/libarchive/libarchive/test/test_read_disk_directory_traversals.c
+++ b/contrib/libarchive/libarchive/test/test_read_disk_directory_traversals.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#include <limits.h>
#if defined(_WIN32) && !defined(__CYGWIN__)
@@ -1608,6 +1607,12 @@ test_parent(void)
int file_count;
int match_count;
int r;
+#if defined(O_PATH) || defined(O_SEARCH) || \
+ (defined(__FreeBSD__) && defined(O_EXEC))
+ const char *ignore_traversals_test4;
+
+ ignore_traversals_test4 = getenv("IGNORE_TRAVERSALS_TEST4");
+#endif
assertMakeDir("lock", 0311);
assertMakeDir("lock/dir1", 0755);
@@ -1784,7 +1789,8 @@ test_parent(void)
if (r == ARCHIVE_FAILED) {
#if defined(O_PATH) || defined(O_SEARCH) || \
(defined(__FreeBSD__) && defined(O_EXEC))
- assertEqualIntA(a, ARCHIVE_OK, r);
+ if (ignore_traversals_test4 == NULL)
+ assertEqualIntA(a, ARCHIVE_OK, r);
#endif
/* Close the disk object. */
archive_read_close(a);
diff --git a/contrib/libarchive/libarchive/test/test_read_disk_entry_from_file.c b/contrib/libarchive/libarchive/test/test_read_disk_entry_from_file.c
index 3f364eef9ad1..386c3c48ebf4 100644
--- a/contrib/libarchive/libarchive/test/test_read_disk_entry_from_file.c
+++ b/contrib/libarchive/libarchive/test/test_read_disk_entry_from_file.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static const char *
gname_lookup(void *d, int64_t g)
diff --git a/contrib/libarchive/libarchive/test/test_read_extract.c b/contrib/libarchive/libarchive/test/test_read_extract.c
index a8f78f62ff97..32c1b6b18142 100644
--- a/contrib/libarchive/libarchive/test/test_read_extract.c
+++ b/contrib/libarchive/libarchive/test/test_read_extract.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define BUFF_SIZE 1000000
#define FILE_BUFF_SIZE 100000
@@ -59,8 +58,7 @@ DEFINE_TEST(test_read_extract)
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, "file");
archive_entry_set_mode(ae, S_IFREG | 0755);
- for (i = 0; i < FILE_BUFF_SIZE; i++)
- file_buff[i] = (unsigned char)rand();
+ fill_with_pseudorandom_data(file_buff, FILE_BUFF_SIZE);
archive_entry_set_size(ae, FILE_BUFF_SIZE);
assertA(0 == archive_write_header(a, ae));
assertA(FILE_BUFF_SIZE == archive_write_data(a, file_buff, FILE_BUFF_SIZE));
diff --git a/contrib/libarchive/libarchive/test/test_read_file_nonexistent.c b/contrib/libarchive/libarchive/test/test_read_file_nonexistent.c
index 127093865828..4a6d5d266227 100644
--- a/contrib/libarchive/libarchive/test/test_read_file_nonexistent.c
+++ b/contrib/libarchive/libarchive/test/test_read_file_nonexistent.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_read_file_nonexistent)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_filter_lrzip.tar.lrz.uu b/contrib/libarchive/libarchive/test/test_read_filter_lrzip.tar.lrz.uu
index d9bbd6116e0a..2272c2778e82 100644
--- a/contrib/libarchive/libarchive/test/test_read_filter_lrzip.tar.lrz.uu
+++ b/contrib/libarchive/libarchive/test/test_read_filter_lrzip.tar.lrz.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_filter_lrzip.tar.lrz.uu
+begin 644 test_read_filter_lrzip.tar.lrz
M3%):20`&`"@``````````%T````!`0```@$`*`,`````#@`#`````&4`!E``
MAP``````*(%=%O"2=0L1MCAA@GB4H1+_)V=!8=DS/0JC4Z+Q&5I0A'\SJ-#.
M$U<4K-:^%:G^C3$B/80>END]NJE=5AP+]64N7$3):G02EKP>+AD`!IH`HQ(`
diff --git a/contrib/libarchive/libarchive/test/test_read_filter_program.c b/contrib/libarchive/libarchive/test/test_read_filter_program.c
index a27589a146c9..18b42121cc22 100644
--- a/contrib/libarchive/libarchive/test/test_read_filter_program.c
+++ b/contrib/libarchive/libarchive/test/test_read_filter_program.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/test/test_read_compress_program.c 201247 2009-12-30 05:59:21Z kientzle $");
static unsigned char archive[] = {
31,139,8,0,222,'C','p','C',0,3,211,'c',160,'=','0','0','0','0','7','5','U',
diff --git a/contrib/libarchive/libarchive/test/test_read_filter_program_signature.c b/contrib/libarchive/libarchive/test/test_read_filter_program_signature.c
index 110addb87fe9..46909f97ab9e 100644
--- a/contrib/libarchive/libarchive/test/test_read_filter_program_signature.c
+++ b/contrib/libarchive/libarchive/test/test_read_filter_program_signature.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
31,139,8,0,222,'C','p','C',0,3,211,'c',160,'=','0','0','0','0','7','5','U',
diff --git a/contrib/libarchive/libarchive/test/test_read_filter_uudecode.c b/contrib/libarchive/libarchive/test/test_read_filter_uudecode.c
index ac2eff59f794..1bc9385c3f6a 100644
--- a/contrib/libarchive/libarchive/test/test_read_filter_uudecode.c
+++ b/contrib/libarchive/libarchive/test/test_read_filter_uudecode.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/test/test_read_uu.c 201248 2009-12-30 06:12:03Z kientzle $");
static const char archive[] = {
"begin 644 test_read_uu.Z\n"
diff --git a/contrib/libarchive/libarchive/test/test_read_filter_uudecode_base64_raw.uu b/contrib/libarchive/libarchive/test/test_read_filter_uudecode_base64_raw.uu
new file mode 100644
index 000000000000..b4ddfb0a22e8
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_filter_uudecode_base64_raw.uu
@@ -0,0 +1,11 @@
+begin-base64 600 LICENSE2.txt
+VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIOKAnEFTIElT4oCdLCBXSVRIT1VUIFdBUlJBTlRZIE9G
+IEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg
+VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJ
+Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
+QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN
+QUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU
+LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP
+TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBT
+T0ZUV0FSRS4K
+====
diff --git a/contrib/libarchive/libarchive/test/test_read_filter_uudecode_raw.c b/contrib/libarchive/libarchive/test/test_read_filter_uudecode_raw.c
new file mode 100644
index 000000000000..6f02dc5de147
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_filter_uudecode_raw.c
@@ -0,0 +1,67 @@
+/*-
+ * 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.
+ */
+#include "test.h"
+
+DEFINE_TEST(test_read_filter_uudecode_raw)
+{
+ struct archive_entry *ae;
+ struct archive *a;
+
+ const char *name = "test_read_filter_uudecode_raw.uu";
+
+ assert((a = archive_read_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_raw(a));
+ copy_reference_file(name);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name, 670));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("LICENSE.txt", archive_entry_pathname(ae));
+ assertEqualInt((AE_IFREG | 0755), archive_entry_mode(ae));
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_filter_uudecode_base64_raw)
+{
+ struct archive_entry *ae;
+ struct archive *a;
+
+ const char *name = "test_read_filter_uudecode_base64_raw.uu";
+
+ assert((a = archive_read_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_raw(a));
+ copy_reference_file(name);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name, 670));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("LICENSE2.txt", archive_entry_pathname(ae));
+ assertEqualInt((AE_IFREG | 0600), archive_entry_mode(ae));
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
diff --git a/contrib/libarchive/libarchive/test/test_read_filter_uudecode_raw.uu b/contrib/libarchive/libarchive/test/test_read_filter_uudecode_raw.uu
new file mode 100644
index 000000000000..8a5f8b5a607d
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_filter_uudecode_raw.uu
@@ -0,0 +1,14 @@
+begin 755 LICENSE.txt
+M5$A%(%-/1E1705)%($E3(%!23U9)1$5$(.*`G$%3($E3XH"=+"!7251(3U54
+M(%=!4E)!3E19($]&($%.62!+24Y$+"!%6%!215-3($]2($E-4$Q)140L($E.
+M0TQ51$E.1R!"550@3D]4($Q)34E4140@5$\@5$A%(%=!4E)!3E1)15,@3T8@
+M34520TA!3E1!0DE,2519+"!&251.15-3($9/4B!!(%!!4E1)0U5,05(@4%52
+M4$]312!!3D0@3D].24Y&4DE.1T5-14Y4+B!)3B!.3R!%5D5.5"!32$%,3"!4
+M2$4@05542$]24R!/4B!#3U!94DE'2%0@2$],1$524R!"12!,24%"3$4@1D]2
+M($%.62!#3$%)32P@1$%-04=%4R!/4B!/5$A%4B!,24%"24Q)5%DL(%=(151(
+M15(@24X@04X@04-424].($]&($-/3E1204-4+"!43U)4($]2($]42$525TE3
+M12P@05))4TE.1R!&4D]-+"!/550@3T8@3U(@24X@0T].3D5#5$E/3B!7251(
+M(%1(12!33T945T%212!/4B!42$4@55-%($]2($]42$52($1%04Q)3D=3($E.
+/(%1(12!33T945T%212X*
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip.c b/contrib/libarchive/libarchive/test/test_read_format_7zip.c
index 3c72595aeef7..9f76705deaf2 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_7zip.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip.c
@@ -23,13 +23,15 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
#if defined(_WIN32) && !defined(__CYGWIN__)
#define close _close
#define open _open
#endif
+#define __LIBARCHIVE_BUILD
+#include <archive_crc32.h>
+
/*
* Extract a non-encoded file.
* The header of the 7z archive files is not encoded.
@@ -58,7 +60,7 @@ test_copy(int use_open_fd)
/* Verify regular file1. */
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
- assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
assertEqualString("file1", archive_entry_pathname(ae));
assertEqualInt(86401, archive_entry_mtime(ae));
assertEqualInt(60, archive_entry_size(ae));
@@ -284,6 +286,141 @@ test_extract_all_files(const char *refname)
}
/*
+ * Extract multi files.
+ * Like test_extract_all_files, but with zstandard compression.
+ */
+static void
+test_extract_all_files_zstd(const char *refname)
+{
+ struct archive_entry *ae;
+ struct archive *a;
+ char buff[128];
+
+ extract_reference_file(refname);
+ 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, refname, 10240));
+
+ /* Verify directory dir1. Note that this comes before the dir1/file1 entry in recent versions of 7-Zip. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualInt((AE_IFDIR | 0755), archive_entry_mode(ae));
+ assertEqualString("dir1/", archive_entry_pathname(ae));
+ assertEqualInt(2764801, archive_entry_mtime(ae));
+ assertEqualInt(archive_entry_is_encrypted(ae), 0);
+ assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
+
+ /* Verify regular file1. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
+ assertEqualString("dir1/file1", archive_entry_pathname(ae));
+ assertEqualInt(86401, archive_entry_mtime(ae));
+ assertEqualInt(13, archive_entry_size(ae));
+ assertEqualInt(archive_entry_is_encrypted(ae), 0);
+ assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
+ assertEqualInt(13, archive_read_data(a, buff, sizeof(buff)));
+ assertEqualMem(buff, "aaaaaaaaaaaa\n", 13);
+
+ /* Verify regular file2. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
+ assertEqualString("file2", archive_entry_pathname(ae));
+ assertEqualInt(86401, archive_entry_mtime(ae));
+ assertEqualInt(26, archive_entry_size(ae));
+ assertEqualInt(archive_entry_is_encrypted(ae), 0);
+ assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
+ assertEqualInt(26, archive_read_data(a, buff, sizeof(buff)));
+ assertEqualMem(buff, "aaaaaaaaaaaa\nbbbbbbbbbbbb\n", 26);
+
+ /* Verify regular file3. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
+ assertEqualString("file3", archive_entry_pathname(ae));
+ assertEqualInt(86401, archive_entry_mtime(ae));
+ assertEqualInt(39, archive_entry_size(ae));
+ assertEqualInt(archive_entry_is_encrypted(ae), 0);
+ assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
+ assertEqualInt(39, archive_read_data(a, buff, sizeof(buff)));
+ assertEqualMem(buff, "aaaaaaaaaaaa\nbbbbbbbbbbbb\ncccccccccccc\n", 39);
+
+ /* Verify regular file4. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
+ assertEqualString("file4", archive_entry_pathname(ae));
+ assertEqualInt(86401, archive_entry_mtime(ae));
+ assertEqualInt(52, archive_entry_size(ae));
+ assertEqualInt(archive_entry_is_encrypted(ae), 0);
+ assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
+ assertEqualInt(52, archive_read_data(a, buff, sizeof(buff)));
+ assertEqualMem(buff,
+ "aaaaaaaaaaaa\nbbbbbbbbbbbb\ncccccccccccc\ndddddddddddd\n", 52);
+
+ assertEqualInt(5, archive_file_count(a));
+
+ /* End of archive. */
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+ /* Verify archive format. */
+ assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
+ assertEqualIntA(a, ARCHIVE_FORMAT_7ZIP, archive_format(a));
+
+ /* Close the archive. */
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+/*
+ * Extract file from an archives using ZSTD compression with and without BCJ.
+ */
+static void
+test_extract_file_zstd_bcj_nobjc(const char *refname)
+{
+ struct archive_entry *ae;
+ struct archive *a;
+ char buff[4096];
+ uint32_t computed_crc = 0;
+ uint32_t expected_crc = 0xbd66eebc;
+
+ extract_reference_file(refname);
+ 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, refname, 10240));
+
+ /* Verify regular file: hw. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualInt((AE_IFREG | 0775), archive_entry_mode(ae));
+ assertEqualString("hw", archive_entry_pathname(ae));
+ assertEqualInt(1685913368, archive_entry_mtime(ae));
+ assertEqualInt(15952, archive_entry_size(ae));
+ assertEqualInt(archive_entry_is_encrypted(ae), 0);
+ assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
+
+ for (;;) {
+ la_ssize_t bytes_read = archive_read_data(a, buff, sizeof(buff));
+ assert(bytes_read >= 0);
+ if (bytes_read == 0) break;
+ computed_crc = crc32(computed_crc, buff, bytes_read);
+ }
+ assertEqualInt(computed_crc, expected_crc);
+
+ assertEqualInt(1, archive_file_count(a));
+
+ /* End of archive. */
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+ /* Verify archive format. */
+ assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
+ assertEqualIntA(a, ARCHIVE_FORMAT_7ZIP, archive_format(a));
+
+ /* Close the archive. */
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+/*
* Extract last file.
* The header of the 7z archive files is encoded with LZMA.
*/
@@ -627,7 +764,7 @@ test_ppmd(void)
/* Verify regular file1. */
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
- assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
assertEqualString("ppmd_test.txt", archive_entry_pathname(ae));
assertEqualInt(1322464589, archive_entry_mtime(ae));
assertEqualInt(102400, archive_entry_size(ae));
@@ -782,6 +919,74 @@ DEFINE_TEST(test_read_format_7zip_deflate)
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
+DEFINE_TEST(test_read_format_7zip_zstd)
+{
+ struct archive *a;
+
+ assert((a = archive_read_new()) != NULL);
+
+ /* Extracting with libzstd */
+ if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) {
+ skipping(
+ "7zip:zstd decoding is not supported on this platform");
+ } else {
+ test_extract_all_files_zstd("test_read_format_7zip_zstd.7z");
+ }
+
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_7zip_zstd_solid)
+{
+ struct archive *a;
+
+ assert((a = archive_read_new()) != NULL);
+
+ /* Extracting with libzstd */
+ if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) {
+ skipping(
+ "7zip:zstd decoding is not supported on this platform");
+ } else {
+ test_extract_all_files_zstd("test_read_format_7zip_solid_zstd.7z");
+ }
+
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_7zip_zstd_bcj)
+{
+ struct archive *a;
+
+ assert((a = archive_read_new()) != NULL);
+
+ /* Extracting with libzstd */
+ if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) {
+ skipping(
+ "7zip:zstd decoding is not supported on this platform");
+ } else {
+ test_extract_file_zstd_bcj_nobjc("test_read_format_7zip_zstd_bcj.7z");
+ }
+
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_7zip_zstd_nobcj)
+{
+ struct archive *a;
+
+ assert((a = archive_read_new()) != NULL);
+
+ /* Extracting with libzstd */
+ if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) {
+ skipping(
+ "7zip:zstd decoding is not supported on this platform");
+ } else {
+ test_extract_file_zstd_bcj_nobjc("test_read_format_7zip_zstd_nobcj.7z");
+ }
+
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
DEFINE_TEST(test_read_format_7zip_empty)
{
test_empty_archive();
@@ -832,7 +1037,223 @@ DEFINE_TEST(test_read_format_7zip_lzma2)
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
+static void
+test_arm_filter(const char *refname)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ char buff[7804];
+ uint32_t computed_crc = 0;
+ uint32_t expected_crc = 0x355ec4e1;
+
+ assert((a = archive_read_new()) != NULL);
+
+ extract_reference_file(refname);
+
+ 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, refname, 10240));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualInt((AE_IFREG | 0755), archive_entry_mode(ae));
+ assertEqualString("hw-gnueabihf", archive_entry_pathname(ae));
+ assertEqualInt(sizeof(buff), archive_entry_size(ae));
+ assertEqualInt(sizeof(buff), archive_read_data(a, buff, sizeof(buff)));
+ computed_crc = crc32(computed_crc, buff, sizeof(buff));
+ assertEqualInt(computed_crc, expected_crc);
+
+ assertEqualInt(1, archive_file_count(a));
+
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_7zip_zstd_arm)
+{
+ struct archive *a;
+
+ assert((a = archive_read_new()) != NULL);
+
+ if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) {
+ skipping(
+ "7zip:zstd decoding is not supported on this platform");
+ } else {
+ test_arm_filter("test_read_format_7zip_zstd_arm.7z");
+ }
+
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_7zip_lzma2_arm)
+{
+ struct archive *a;
+
+ 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");
+ } else {
+ test_arm_filter("test_read_format_7zip_lzma2_arm.7z");
+ }
+
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
DEFINE_TEST(test_read_format_7zip_ppmd)
{
test_ppmd();
}
+
+static void
+test_arm64_filter(const char *refname)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ char buff[70368];
+ uint32_t computed_crc = 0;
+ uint32_t expected_crc = 0xde97d594;
+
+ assert((a = archive_read_new()) != NULL);
+
+ extract_reference_file(refname);
+
+ 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, refname, 10240));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualInt((AE_IFREG | 0775), archive_entry_mode(ae));
+ assertEqualString("hw-arm64", archive_entry_pathname(ae));
+ assertEqualInt(sizeof(buff), archive_entry_size(ae));
+ assertEqualInt(sizeof(buff), archive_read_data(a, buff, sizeof(buff)));
+ computed_crc = crc32(computed_crc, buff, sizeof(buff));
+ assertEqualInt(computed_crc, expected_crc);
+
+ assertEqualInt(1, archive_file_count(a));
+
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_7zip_lzma2_arm64)
+{
+#ifdef HAVE_LZMA_FILTER_ARM64
+ struct archive *a;
+
+ 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");
+ } else {
+ test_arm64_filter("test_read_format_7zip_lzma2_arm64.7z");
+ }
+
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+#else
+ skipping("This version of liblzma does not support LZMA_FILTER_ARM64");
+#endif
+}
+
+DEFINE_TEST(test_read_format_7zip_deflate_arm64)
+{
+ struct archive *a;
+
+ assert((a = archive_read_new()) != NULL);
+
+ if (ARCHIVE_OK != archive_read_support_filter_gzip(a)) {
+ skipping(
+ "7zip:deflate decoding is not supported on this platform");
+ } else {
+ test_arm64_filter("test_read_format_7zip_deflate_arm64.7z");
+ }
+
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_7zip_win_attrib)
+{
+ struct archive *a;
+
+ 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));
+
+ // This archive has four files and four directories:
+ // * hidden directory
+ // * readonly directory
+ // * regular directory
+ // * system directory
+ // * regular "archive" file
+ // * hidden file
+ // * readonly file
+ // * system file
+ const char *refname = "test_read_format_7zip_win_attrib.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("hidden_dir/", archive_entry_pathname(ae));
+ assertEqualInt((AE_IFDIR | 0755), archive_entry_mode(ae));
+ assertEqualString("hidden", archive_entry_fflags_text(ae));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("readonly_dir/", archive_entry_pathname(ae));
+ assertEqualInt((AE_IFDIR | 0555), archive_entry_mode(ae));
+ assertEqualString("rdonly", archive_entry_fflags_text(ae));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("regular_dir/", archive_entry_pathname(ae));
+ assertEqualInt((AE_IFDIR | 0755), archive_entry_mode(ae));
+ assertEqualString(NULL, archive_entry_fflags_text(ae));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("system_dir/", archive_entry_pathname(ae));
+ assertEqualInt((AE_IFDIR | 0755), archive_entry_mode(ae));
+ assertEqualString("system", archive_entry_fflags_text(ae));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("archive_file.txt", archive_entry_pathname(ae));
+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
+ assertEqualString(NULL, archive_entry_fflags_text(ae));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("hidden_file.txt", archive_entry_pathname(ae));
+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
+ assertEqualString("hidden", archive_entry_fflags_text(ae));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("readonly_file.txt", archive_entry_pathname(ae));
+ assertEqualInt((AE_IFREG | 0444), archive_entry_mode(ae));
+ assertEqualString("rdonly", archive_entry_fflags_text(ae));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("system_file.txt", archive_entry_pathname(ae));
+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
+ assertEqualString("system", archive_entry_fflags_text(ae));
+
+
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip_copy.7z.uu b/contrib/libarchive/libarchive/test/test_read_format_7zip_copy.7z.uu
index 2429834c26dc..92e7c5867ab2 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_7zip_copy.7z.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip_copy.7z.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_7zip_none.7z
+begin 644 test_read_format_7zip_copy.7z
M-WJ\KR<<``-!QGV(/`````````!"`````````(/;BV,@("`@("`@("`@("`@
M("`@("`@("`@("`@(&9I;&4@,2!C;VYT96YT<PIH96QL;PIH96QL;PIH96QL
M;PH!!`8``0D\``<+`0`!`0`,/``("@&J'=X/```%`1$-`&8`:0!L`&4`,0``
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip_deflate_arm64.7z.uu b/contrib/libarchive/libarchive/test/test_read_format_7zip_deflate_arm64.7z.uu
new file mode 100644
index 000000000000..2199d921b549
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip_deflate_arm64.7z.uu
@@ -0,0 +1,64 @@
+begin 664 test_read_format_7zip_deflate_arm64.7z
+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
+3`#)5M-E?M]D!%08!`""`_8$`````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip_encryption_data.c b/contrib/libarchive/libarchive/test/test_read_format_7zip_encryption_data.c
index adedbc5311c6..653044a46317 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_7zip_encryption_data.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip_encryption_data.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
DEFINE_TEST(test_read_format_7zip_encryption_data)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip_encryption_header.c b/contrib/libarchive/libarchive/test/test_read_format_7zip_encryption_header.c
index 7d2a4a8d7de4..d0c48044ea5e 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_7zip_encryption_header.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip_encryption_header.c
@@ -23,8 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
-
DEFINE_TEST(test_read_format_7zip_encryption_header)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip_encryption_partially.c b/contrib/libarchive/libarchive/test/test_read_format_7zip_encryption_partially.c
index 68290aa64fd9..51a6c06116d7 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_7zip_encryption_partially.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip_encryption_partially.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
DEFINE_TEST(test_read_format_7zip_encryption_partially)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip_lzma2_arm.7z.uu b/contrib/libarchive/libarchive/test/test_read_format_7zip_lzma2_arm.7z.uu
new file mode 100644
index 000000000000..5a6ade031f22
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip_lzma2_arm.7z.uu
@@ -0,0 +1,50 @@
+begin 664 test_read_format_7zip_lzma2_arm.7z
+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
+D80!B`&D`:`!F````&0`4"@$```-.&5"<V0$5!@$`((#M@0``
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip_lzma2_arm64.7z.uu b/contrib/libarchive/libarchive/test/test_read_format_7zip_lzma2_arm64.7z.uu
new file mode 100644
index 000000000000..34025b8431ad
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip_lzma2_arm64.7z.uu
@@ -0,0 +1,54 @@
+begin 664 test_read_format_7zip_lzma2_arm64.7z
+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
+C`'(`;0`V`#0````9`!0*`0`R5;397[?9`14&`0`@@/V!````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip_malformed.c b/contrib/libarchive/libarchive/test/test_read_format_7zip_malformed.c
index 4ca6f0913e35..f2120879fa8c 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_7zip_malformed.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip_malformed.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
test_malformed1(void)
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip_packinfo_digests.c b/contrib/libarchive/libarchive/test/test_read_format_7zip_packinfo_digests.c
index 7f105d1f2806..e46a17b3b1da 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_7zip_packinfo_digests.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip_packinfo_digests.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
/* Read archive with digests in PackInfo */
DEFINE_TEST(test_read_format_7zip_packinfo_digests)
@@ -49,7 +48,7 @@ DEFINE_TEST(test_read_format_7zip_packinfo_digests)
/* Verify regular file1. */
assertEqualIntA(a, ARCHIVE_OK,
archive_read_next_header(a, &ae));
- assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
assertEqualString("a.txt", archive_entry_pathname(ae));
assertEqualInt(1576808819, archive_entry_mtime(ae));
assertEqualInt(4, archive_entry_size(ae));
@@ -61,7 +60,7 @@ DEFINE_TEST(test_read_format_7zip_packinfo_digests)
/* Verify regular file2. */
assertEqualIntA(a, ARCHIVE_OK,
archive_read_next_header(a, &ae));
- assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
assertEqualString("b.txt", archive_entry_pathname(ae));
assertEqualInt(1576808819, archive_entry_mtime(ae));
assertEqualInt(4, archive_entry_size(ae));
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip_solid_zstd.7z.uu b/contrib/libarchive/libarchive/test/test_read_format_7zip_solid_zstd.7z.uu
new file mode 100644
index 000000000000..3bffb98f07ea
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip_solid_zstd.7z.uu
@@ -0,0 +1,9 @@
+begin 664 test_read_format_7zip_solid_zstd.7z
+M-WJ\KR<<``1&(FS)O@`````````B`````````$V+D*,HM2_]`$@!``!0*DT8
+M!````"$````HM2_]((+%```P80IB8V0*!X"P/JZA4J4;TS.X,9C'`#4``($S
+M!ZX/T5NC)*"0H'?;G=XO-Y<-`+"F*K87M`OOZ1+1#31#M/`2YN,FY:(1).I)
+M(B(+;9$W4?0*8=3V5N;BSZ)(0UGD/'LOSN"0&#DNX!A2*5\#&8IP$1G=7-]@
+MP\EE$]Z;/%6NU^\_,X:MD?57P#S>.+BINH?CHRX,::[Q5P*!X\DH````%P8V
+?`0F`B``'"P$``2,#`0$%70`0```,@-H*`9/CZP``````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip_win_attrib.7z.uu b/contrib/libarchive/libarchive/test/test_read_format_7zip_win_attrib.7z.uu
new file mode 100644
index 000000000000..dc7495bcbf37
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip_win_attrib.7z.uu
@@ -0,0 +1,10 @@
+begin 644 test_read_format_7zip_win_attrib.7z
+M-WJ\KR<<``0:MZ25^0`````````B`````````,/QN>$!`!IA<F-H:79E:&ED
+M9&5N<F5A9&]N;'ES>7-T96T```"!,P>N#\_\\&P/Z^J<OS8]_GH-_C9=&O:;
+MN?AF5PM%@/8R"MH"PK!D-+92R@HB57B\_G7B9D`HLH<G4Z@!).&WAAA(R4U?
+M%0%=EB_VM=2[WZJHK$/PHCG(E(Y#O[W'JQD2%>%U\S6&7C"[<$<2GL2\B,**
+MW`0[F2;R)EO2:N)4RB6G.3+R6%97BQ]K"X),-'`E&./R#`2A\R&D1#U8FUC&
+MANR65$7S:?$CR7DS8<)L'MR%.5Y)T-;62DU\S8W?$4=U2972R-0]5J81R3E/
+M\K&`%O\H:/`E4``7!A\!"8#:``<+`0`!(P,!`05=`!````R!C@H!`M-R5@``
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip_zstd.7z.uu b/contrib/libarchive/libarchive/test/test_read_format_7zip_zstd.7z.uu
new file mode 100644
index 000000000000..acd49c421a6f
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip_zstd.7z.uu
@@ -0,0 +1,12 @@
+begin 664 test_read_format_7zip_zstd.7z
+M-WJ\KR<<``2QPP_C,`$````````C``````````+H!E<HM2_]`$@!``!0*DT8
+M!````!$````HM2_](`U%```080H!``80`BBU+_T`2`$``%`J31@$````%```
+M`"BU+_T@&ET``"!A"F(*`@#`H`'8*+4O_0!(`0``4"I-&`0````6````*+4O
+M_2`G;0``,&$*8@IC"@,4``@8V2BU+_T`2`$``%`J31@$````&0```"BU+_T@
+M-(4``$!A"F(*8PID"@04``@8(QL``($S!ZYMP-,)%[KY0NUS!EQ9<T<AN:R"
+M7Z^`KZ24FV4LJ?"A)\MX&!"$=31!F6U\W/D!@*G'-=Z@#"&#>8R#*L]U;J=*
+M@K`Q6]^1F4MZF33TE2LJK8X@%5MY%P.#1*EM98=_,9"?K'$*_A0YVC)]1ML=
+MK-5-,X82B;/_L`I&FQ!5HP#H````%P:`J`$)@(@`!PL!``$C`P$!!5T`$```
++#(#Z"@%\$`,4````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip_zstd_arm.7z.uu b/contrib/libarchive/libarchive/test/test_read_format_7zip_zstd_arm.7z.uu
new file mode 100644
index 000000000000..770e99b3c10d
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip_zstd_arm.7z.uu
@@ -0,0 +1,61 @@
+begin 644 test_read_format_7zip_zstd_arm.7z
+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
+166S@9)S9`14&`0`@@.V!````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip_zstd_bcj.7z.uu b/contrib/libarchive/libarchive/test/test_read_format_7zip_zstd_bcj.7z.uu
new file mode 100644
index 000000000000..2a75db8972cf
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip_zstd_bcj.7z.uu
@@ -0,0 +1,56 @@
+begin 664 test_read_format_7zip_zstd_bcj.7z
+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
+@=P```!D$`````!0*`0``'';'*9?9`14&`0`@@/V!````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip_zstd_nobcj.7z.uu b/contrib/libarchive/libarchive/test/test_read_format_7zip_zstd_nobcj.7z.uu
new file mode 100644
index 000000000000..c6fed0bebb84
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip_zstd_nobcj.7z.uu
@@ -0,0 +1,56 @@
+begin 664 test_read_format_7zip_zstd_nobcj.7z
+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
+3```<=L<IE]D!%08!`""`_8$`````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_ar.ar.uu b/contrib/libarchive/libarchive/test/test_read_format_ar.ar.uu
index 70507cc1da9d..1e644cc8ab07 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_ar.ar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_ar.ar.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 755 test_read_format_ar.ar
M(3QA<F-H/@HO+R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`T,"`@("`@("`@8`IY>7ET='1S<W-A86%F9F8N;R\*:&AH
diff --git a/contrib/libarchive/libarchive/test/test_read_format_ar.c b/contrib/libarchive/libarchive/test/test_read_format_ar.c
index 40d11d16b9ed..6e279ec134d9 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_ar.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_ar.c
@@ -26,8 +26,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
-
DEFINE_TEST(test_read_format_ar)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cab.c b/contrib/libarchive/libarchive/test/test_read_format_cab.c
index 8f6adae66a4a..f5ce21cbf19b 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cab.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_cab.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
/*
Execute the following command to rebuild the data for this program:
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cab_filename.c b/contrib/libarchive/libarchive/test/test_read_format_cab_filename.c
index 2f46a7e6ed05..efab3ccd69f1 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cab_filename.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_cab_filename.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
#include <locale.h>
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cab_filename_cp932.cab.uu b/contrib/libarchive/libarchive/test/test_read_format_cab_filename_cp932.cab.uu
index 0d51f10c418a..9d59000c73ed 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cab_filename_cp932.cab.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_cab_filename_cp932.cab.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_cab_cp932.cab
+begin 644 test_read_format_cab_filename_cp932.cab
M35-#1@````"4`````````"P``````````P$!``(````(_@``;@````$``Q(%
M````````````=#ZO5"``E5R"OH+F7(J_CIHN='AT``4````%``````!T/KM4
M(`"57(*^@N9<B.J7EY5<+G1X=``I]2&+'@`*`%N`@(T`,*```0````$````!
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 95d3171e72cc..0eff8cfee856 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_afio.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_afio.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
execute the following to rebuild the data for this program:
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin.c b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin.c
index 9f754cfc226a..f5be2e65cdc1 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
199,'q',21,4,177,'y',237,'A',232,3,232,3,2,0,0,0,'p','C',244,'M',2,0,0,0,
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_Z.c b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_Z.c
index 3ad9118cd6e2..aea5bcb4b5bc 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_Z.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_Z.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
31,157,144,199,226,'T',' ',16,'+','O',187,' ',232,6,'$',20,0,160,'!',156,
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_be.c b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_be.c
index 24d5f16f8f2b..66e4a9ca9afd 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_be.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_be.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_read_format_cpio_bin_be)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_be.cpio.uu b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_be.cpio.uu
index 999f1e0d961f..91d1b4c70075 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_be.cpio.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_be.cpio.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_read_format_cpio_bin_be.cpio
M<<<`"#P\@:0#Z`````$``$GS"&\`%0````5F:6QE,3$Q,3(R,C(S,S,S-#0T
M-```86)C9&4`<<<```````````````$`````````"P````!44D%)3$52(2$A
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_bz2.c b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_bz2.c
index 21fd86412def..b1a994bc5359 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_bz2.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_bz2.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
'B','Z','h','9','1','A','Y','&','S','Y',134,'J',208,'4',0,0,30,246,141,253,
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_gz.c b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_gz.c
index cb858d0e23ba..47545f913248 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_gz.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_gz.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
31,139,8,0,244,'M','p','C',0,3,';','^','(',202,178,177,242,173,227,11,230,
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_le.c b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_le.c
index 2d0484c5232f..0cb6cc845554 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_le.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_le.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_read_format_cpio_bin_le)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_lzip.c b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_lzip.c
index d9acf095ed77..72791aa60a69 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_lzip.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_lzip.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
76, 90, 73, 80, 1, 12, 0, 99,156, 62,160, 67,124,230, 93,220,
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_lzma.c b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_lzma.c
index f95ad49092f0..a629cb547e88 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_lzma.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_lzma.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
93, 0, 0,128, 0,255,255,255,255,255,255,255,255, 0, 99,156,
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_xz.c b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_xz.c
index 9619d57fa1d2..ff57982af436 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_xz.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_bin_xz.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
0xfd, 0x37, 0x7a, 0x58, 0x5a, 0x00, 0x00, 0x04,
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_filename.c b/contrib/libarchive/libarchive/test/test_read_format_cpio_filename.c
index cf4f5ac266b3..c5aa9a7f52a0 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_filename.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_filename.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
#include <locale.h>
@@ -137,6 +136,11 @@ cleanup:
DEFINE_TEST(test_read_format_cpio_filename_UTF8_UTF8_jp)
{
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ /* Since we explicitly DON'T set hdrcharset=UTF-8 below */
+ skipping("Windows defaults to OEMCP, not UTF-8");
+ return;
+#else
const char *refname = "test_read_format_cpio_filename_utf8_jp.cpio";
struct archive *a;
struct archive_entry *ae;
@@ -180,6 +184,7 @@ DEFINE_TEST(test_read_format_cpio_filename_UTF8_UTF8_jp)
/* Close the archive. */
assertEqualInt(ARCHIVE_OK, archive_read_close(a));
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+#endif
}
DEFINE_TEST(test_read_format_cpio_filename_CP866_KOI8R)
@@ -500,6 +505,11 @@ cleanup:
DEFINE_TEST(test_read_format_cpio_filename_UTF8_UTF8_ru)
{
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ /* Since we explicitly DON'T set hdrcharset=UTF-8 below */
+ skipping("Windows defaults to OEMCP, not UTF-8");
+ return;
+#else
const char *refname = "test_read_format_cpio_filename_utf8_ru.cpio";
struct archive *a;
struct archive_entry *ae;
@@ -542,6 +552,7 @@ DEFINE_TEST(test_read_format_cpio_filename_UTF8_UTF8_ru)
/* Close the archive. */
assertEqualInt(ARCHIVE_OK, archive_read_close(a));
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+#endif
}
DEFINE_TEST(test_read_format_cpio_filename_eucJP_CP932)
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_cp866.cpio.uu b/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_cp866.cpio.uu
index 5f0658504039..b1ac82f545b3 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_cp866.cpio.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_cp866.cpio.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_cpio_cp866.cpio
+begin 644 test_read_format_cpio_filename_cp866.cpio
M,#<P-S`W,#`P,3,W,#`P,#`Q,3`P-S4U,#`Q-S4Q,#`Q-S4Q,#`P,#`Q,#`P
M,#`P,3$U-#<S,C$U,#$P,#`P,#<P,#`P,#`P,#`P-H^0B(*%D@#P\NGWY?0P
M-S`W,#<P,#`Q,S<P,#`P,#(Q,#`W-34P,#$W-3$P,#$W-3$P,#`P,#$P,#`P
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_eucjp.cpio.uu b/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_eucjp.cpio.uu
index 9aa7666bc4a8..b900adb0561c 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_eucjp.cpio.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_eucjp.cpio.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_cpio_eucjp.cpio
+begin 644 test_read_format_cpio_filename_eucjp.cpio
M,#<P-S`W,#`P,3,W,#`P,#`Q,3`P-C0T,#`Q-S4Q,#`Q-S4Q,#`P,#`Q,#`P
M,#`P,3$U-3$U,C(U,C`P,#`P,3$P,#`P,#`P,#`Q,+3!N_HN='AT`(J_CIJ"
MJ8+(,#<P-S`W,#`P,3,W,#`P,#`R,3`P-C0T,#`Q-S4Q,#`Q-S4Q,#`P,#`Q
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_koi8r.cpio.uu b/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_koi8r.cpio.uu
index dcdfd0ed63d8..76f58acace73 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_koi8r.cpio.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_koi8r.cpio.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_cpio_koi8r.cpio
+begin 644 test_read_format_cpio_filename_koi8r.cpio
M,#<P-S`W,#`P,3,W,#`P,#`Q,3`P-S4U,#`Q-S4Q,#`Q-S4Q,#`P,#`Q,#`P
M,#`P,3$U-#<S,C`P,S8P,#`P,#<P,#`P,#`P,#`P-O#RZ??E]`#P\NGWY?0P
M-S`W,#<P,#`Q,S<P,#`P,#(Q,#`W-34P,#$W-3$P,#$W-3$P,#`P,#$P,#`P
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_utf8_jp.cpio.uu b/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_utf8_jp.cpio.uu
index 8f9a6f652c28..45c3c4791ffa 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_utf8_jp.cpio.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_utf8_jp.cpio.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_cpio_utf8_jp.cpio
+begin 644 test_read_format_cpio_filename_utf8_jp.cpio
M,#<P-S`W,#`P,3,W,#`P,#`Q,3`P-C0T,#`Q-S4Q,#`Q-S4Q,#`P,#`Q,#`P
M,#`P,3$U-3$U,C(S-C8P,#`P,3,P,#`P,#`P,#`Q,.:\HN6MERYT>'0`BK^.
MFH*I@L@P-S`W,#<P,#`Q,S<P,#`P,#(Q,#`V-#0P,#$W-3$P,#$W-3$P,#`P
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_utf8_ru.cpio.uu b/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_utf8_ru.cpio.uu
index 9ed52f87c44c..849b9fe332cf 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_utf8_ru.cpio.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_filename_utf8_ru.cpio.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_cpio_utf8_ru.cpio
+begin 644 test_read_format_cpio_filename_utf8_ru.cpio
M,#<P-S`W,#`P,3,W,#`P,#`Q,3`P-S4U,#`Q-S4Q,#`Q-S4Q,#`P,#`Q,#`P
M,#`P,3$U,C$U,38U,38P,#`P,34P,#`P,#`P,#`P-M"?T*#0F-"2T)70H@#P
M\NGWY?0P-S`W,#<P,#`Q,S<P,#`P,#(Q,#`W-34P,#$W-3$P,#$W-3$P,#`P
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_odc.c b/contrib/libarchive/libarchive/test/test_read_format_cpio_odc.c
index f89c793b5d13..00b7c1c0698b 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_odc.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_odc.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
'0','7','0','7','0','7','0','0','2','0','2','5','0','7','4','6','6','1','0',
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4_gzip.c b/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4_gzip.c
index de2ff2d90514..ae201de00f68 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4_gzip.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4_gzip.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
31,139,8,0,236,'c',217,'D',0,3,'3','0','7','0','7','0','4','0','0',181,'0',
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4c_Z.c b/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4c_Z.c
index 3f968e2fd952..b4d9a8470851 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4c_Z.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4c_Z.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
31,157,144,'0','n',4,132,'!',3,6,140,26,'8','n',228,16,19,195,160,'A',26,
diff --git a/contrib/libarchive/libarchive/test/test_read_format_empty.c b/contrib/libarchive/libarchive/test/test_read_format_empty.c
index ea41792df414..fc8d8cc54ebf 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_empty.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_empty.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = { 0 };
diff --git a/contrib/libarchive/libarchive/test/test_read_format_gtar_filename.c b/contrib/libarchive/libarchive/test/test_read_format_gtar_filename.c
index f81796b786da..cf9c30991b28 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_gtar_filename.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_gtar_filename.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
#include <locale.h>
diff --git a/contrib/libarchive/libarchive/test/test_read_format_gtar_filename_cp866.tar.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_gtar_filename_cp866.tar.Z.uu
index a6fd80c24695..b06fb11d5528 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_gtar_filename_cp866.tar.Z.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_gtar_filename_cp866.tar.Z.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_gtar_cp866.tar.Z
+begin 644 test_read_format_gtar_filename_cp866.tar.Z
M'YV0CR`A$E1($H"#"!,J7,BPH<.'$"-*1`BC(HP;-6H`L!@#8XR-%3O6^&BQ
MI$4;`&+$J$'CQ@P9*V&0C`'#Q@T9`$#`F,BSI\^?0`'4F4,GC!P0(`",J5,F
MJ,.E39U*G4JUJM6K6'G"DY?N7CEZ6<.*'4NVK-FS:-.J7<NVK<-7X%")*B7.
diff --git a/contrib/libarchive/libarchive/test/test_read_format_gtar_filename_eucjp.tar.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_gtar_filename_eucjp.tar.Z.uu
index 87fa582f6809..97d87728f9fb 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_gtar_filename_eucjp.tar.Z.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_gtar_filename_eucjp.tar.Z.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_gtar_eucjp.tar.Z
+begin 644 test_read_format_gtar_filename_eucjp.tar.Z
M'YV0M(+MTN>"#AXZ`!(J7,BPH<.'$"-*G$@1`(R+,&S0H&'Q8HP;-6)TA/$Q
MY$B,&&/``!`C1HV0-63(B+F29`P:)D&LK,BSI\^?0.O,H1-&#@@0`,;4*0,T
MHE*F3:-*G4JUJM6K4Q7]<J1)4"I!R+"*'4NVK-FS:-.J7<NVK=NHR7H5//BV
diff --git a/contrib/libarchive/libarchive/test/test_read_format_gtar_filename_koi8r.tar.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_gtar_filename_koi8r.tar.Z.uu
index bf4ce01708cc..a198830ae1c9 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_gtar_filename_koi8r.tar.Z.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_gtar_filename_koi8r.tar.Z.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_gtar_koi8r.tar.Z
+begin 644 test_read_format_gtar_filename_koi8r.tar.Z
M'YV0T*0ENU:,&H"#"!,J7,BPH<.'$"-*1`BC(HP;-6H`L!@#8XR-%3O6^&BQ
MI$4;`&+$J$'CQ@P9%6>@A*&RAHP;`$#`F,BSI\^?0`'4F4,GC!P0(`",J5,F
MJ,.E39U*G4JUJM6K6'G"DY?N7CEZ6<.*'4NVK-FS:-.J7<NVK<.M7;^ZG<NP
diff --git a/contrib/libarchive/libarchive/test/test_read_format_gtar_gz.c b/contrib/libarchive/libarchive/test/test_read_format_gtar_gz.c
index d495a43000e7..bc712b9e6e44 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_gtar_gz.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_gtar_gz.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
31,139,8,0,'+','e',217,'D',0,3,211,211,'g',160,'9','0',0,2,'s','S','S',16,
diff --git a/contrib/libarchive/libarchive/test/test_read_format_gtar_lzma.c b/contrib/libarchive/libarchive/test/test_read_format_gtar_lzma.c
index 7b01b3a450dd..1aa0212da0e3 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_gtar_lzma.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_gtar_lzma.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
0x5d, 0x0, 0x0, 0x80, 0x0, 0x0, 0x28, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
diff --git a/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse.c b/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse.c
index 5781c7fde7cf..6a2e3650c5a8 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse.c
@@ -23,8 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
-
struct contents {
int64_t o;
diff --git a/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_13.tar.uu b/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_13.tar.uu
index 7b19d671ac5c..5ab5190362a2 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_13.tar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_13.tar.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_read_format_gtar_sparse_1_13.tar
M<W!A<G-E````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
diff --git a/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17.tar.uu b/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17.tar.uu
index f8985b077b94..815ec6d64a07 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17.tar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17.tar.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_read_format_gtar_sparse_1_17.tar
M<W!A<G-E````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
diff --git a/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix00.tar.uu b/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix00.tar.uu
index d19dead5f909..d19a85810a87 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix00.tar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix00.tar.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_read_format_gtar_sparse_1_17_posix00.tar
M+B]087A(96%D97)S+C,X-C4Y+W-P87)S90``````````````````````````
M````````````````````````````````````````````````````````````
diff --git a/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix01.tar.uu b/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix01.tar.uu
index 7fa0af9cc702..fac4feeb8f32 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix01.tar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix01.tar.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_read_format_gtar_sparse_1_17_posix01.tar
M+B]087A(96%D97)S+C,X-C8Q+W-P87)S90``````````````````````````
M````````````````````````````````````````````````````````````
diff --git a/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix10.tar.uu b/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix10.tar.uu
index ca1f12b4b910..7ddd3fd15c2c 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix10.tar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix10.tar.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_read_format_gtar_sparse_1_17_posix10.tar
M+B]087A(96%D97)S+C,X-C8S+W-P87)S90``````````````````````````
M````````````````````````````````````````````````````````````
diff --git a/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix10_modified.tar.uu b/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix10_modified.tar.uu
index a0673de19d35..cf8fd77cc0ca 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix10_modified.tar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_1_17_posix10_modified.tar.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_read_format_gtar_sparse_1_17_posix10_modified.tar
M+B]087A(96%D97)S+C,X-C8S+W-P87)S90``````````````````````````
M````````````````````````````````````````````````````````````
diff --git a/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_skip_entry.c b/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_skip_entry.c
index 6ddd42122d18..d592c466f76b 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_skip_entry.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_skip_entry.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
#if defined(__BORLANDC__) || (defined(_MSC_VER) && _MSC_VER <= 1300)
# define LITERAL_LL(x) x##i64
diff --git a/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_skip_entry.tar.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_skip_entry.tar.Z.uu
index dc0daae9e1e2..634ac0673db7 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_skip_entry.tar.Z.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_skip_entry.tar.Z.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_format_gtar_sparse_skip_entry.tar.Z
M'YV04,+@05(F#)DR<EZ$`<"PH<.'$"-*G$BQHL6*,#+:L$$#!(",,6[4@.$1
MI$B2'S.JS#A#A@P0,63,L`$C!HP9-VB\K"FCAHT8`$#@N4BTJ-&C2"/6F4,G
MC)R48^J424HQZE2J$E=F+*G5(]:O8,.*'3M6!LDY:?24Z6'S!DX:,7#(H$%#
diff --git a/contrib/libarchive/libarchive/test/test_read_format_iso.iso.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_iso.iso.Z.uu
index 2f5cbd792041..033e33976930 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_iso.iso.Z.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_iso.iso.Z.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_read_format_iso.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
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 5656292bff98..09b0acb804ea 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_iso_Z.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_iso_Z.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
test1(void)
diff --git a/contrib/libarchive/libarchive/test/test_read_format_iso_joliet.iso.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_iso_joliet.iso.Z.uu
index b6ac2520083d..1854fc26ee84 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_iso_joliet.iso.Z.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_iso_joliet.iso.Z.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_read_format_iso_joliet.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
diff --git a/contrib/libarchive/libarchive/test/test_read_format_iso_joliet_long.iso.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_iso_joliet_long.iso.Z.uu
index 9babf696e12c..9dc675b5fe6a 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_iso_joliet_long.iso.Z.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_iso_joliet_long.iso.Z.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_read_format_iso_joliet_long.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
diff --git a/contrib/libarchive/libarchive/test/test_read_format_iso_joliet_rockridge.iso.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_iso_joliet_rockridge.iso.Z.uu
index fdccb0cf7143..ac2fea4ab675 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_iso_joliet_rockridge.iso.Z.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_iso_joliet_rockridge.iso.Z.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_read_format_iso_joliet_rockridge.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
diff --git a/contrib/libarchive/libarchive/test/test_read_format_iso_multi_extent.c b/contrib/libarchive/libarchive/test/test_read_format_iso_multi_extent.c
index 0295d3114626..de9a40114c14 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_iso_multi_extent.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_iso_multi_extent.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_read_format_iso_multi_extent)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_format_iso_multi_extent.iso.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_iso_multi_extent.iso.Z.uu
index 3ce33dc2001e..922b5e036872 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_iso_multi_extent.iso.Z.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_iso_multi_extent.iso.Z.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_read_format_iso_multi_extent.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
diff --git a/contrib/libarchive/libarchive/test/test_read_format_iso_rockridge.iso.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_iso_rockridge.iso.Z.uu
index 218631ca2c30..716036180cd0 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_iso_rockridge.iso.Z.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_iso_rockridge.iso.Z.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_read_format_iso_rockridge.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
diff --git a/contrib/libarchive/libarchive/test/test_read_format_iso_rockridge_ce.iso.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_iso_rockridge_ce.iso.Z.uu
index 818bb0e37272..cd817abce1f4 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_iso_rockridge_ce.iso.Z.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_iso_rockridge_ce.iso.Z.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_read_format_iso_rockridge_ce.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
diff --git a/contrib/libarchive/libarchive/test/test_read_format_iso_rockridge_new.iso.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_iso_rockridge_new.iso.Z.uu
index dd013ffc84d8..8ccfe59a73bd 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_iso_rockridge_new.iso.Z.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_iso_rockridge_new.iso.Z.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_read_format_iso_rockridge_new.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
diff --git a/contrib/libarchive/libarchive/test/test_read_format_iso_rockridge_rr_moved.iso.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_iso_rockridge_rr_moved.iso.Z.uu
index 69de12b43b9e..f710d2586c93 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_iso_rockridge_rr_moved.iso.Z.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_iso_rockridge_rr_moved.iso.Z.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_read_format_iso_rockridge_rr_moved.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
diff --git a/contrib/libarchive/libarchive/test/test_read_format_iso_xorriso.c b/contrib/libarchive/libarchive/test/test_read_format_iso_xorriso.c
index ce71a560a01c..ca8a027b5ad2 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_iso_xorriso.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_iso_xorriso.c
@@ -23,8 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
-
/*
Execute the following command to rebuild the data for this program:
diff --git a/contrib/libarchive/libarchive/test/test_read_format_iso_zisofs.iso.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_iso_zisofs.iso.Z.uu
index 00896e1f67e7..53e75cabae1a 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_iso_zisofs.iso.Z.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_iso_zisofs.iso.Z.uu
@@ -1,5 +1,3 @@
-$FreeBSD$
-
begin 644 test_read_format_iso_zisofs.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
diff --git a/contrib/libarchive/libarchive/test/test_read_format_isojoliet_bz2.c b/contrib/libarchive/libarchive/test/test_read_format_isojoliet_bz2.c
index df61254f63a9..68a9486e7aac 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_isojoliet_bz2.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_isojoliet_bz2.c
@@ -27,7 +27,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
Execute the following to rebuild the data for this program:
diff --git a/contrib/libarchive/libarchive/test/test_read_format_isojoliet_long.c b/contrib/libarchive/libarchive/test/test_read_format_isojoliet_long.c
index 4e01249478b8..fa089c1de1c9 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_isojoliet_long.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_isojoliet_long.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
Execute the following to rebuild the data for this program:
@@ -115,7 +114,7 @@ DEFINE_TEST(test_read_format_isojoliet_long)
pathname[102] = '3';
pathname[103] = '\0';
assertEqualInt(0, archive_read_next_header(a, &ae));
- assertEqualString("hardlink", archive_entry_pathname(ae));
+ assertEqualString(pathname, archive_entry_pathname(ae));
assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
assert(archive_entry_hardlink(ae) == NULL);
assertEqualInt(6, archive_entry_size(ae));
@@ -129,9 +128,9 @@ DEFINE_TEST(test_read_format_isojoliet_long)
/* Second name for the same regular file (this happens to be
* returned second, so does get marked as a hardlink). */
assertEqualInt(0, archive_read_next_header(a, &ae));
- assertEqualString(pathname, archive_entry_pathname(ae));
+ assertEqualString("hardlink", archive_entry_pathname(ae));
assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
- assertEqualString("hardlink", archive_entry_hardlink(ae));
+ assertEqualString(pathname, archive_entry_hardlink(ae));
assert(!archive_entry_size_is_set(ae));
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_isojoliet_rr.c b/contrib/libarchive/libarchive/test/test_read_format_isojoliet_rr.c
index 52490dd87321..844f41367128 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_isojoliet_rr.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_isojoliet_rr.c
@@ -27,7 +27,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
Execute the following to rebuild the data for this program:
diff --git a/contrib/libarchive/libarchive/test/test_read_format_isojoliet_versioned.c b/contrib/libarchive/libarchive/test/test_read_format_isojoliet_versioned.c
index 011b5e296b94..b8a03362274f 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_isojoliet_versioned.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_isojoliet_versioned.c
@@ -27,7 +27,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/test/test_read_format_isojoliet_bz2.c 201247 2009-12-30 05:59:21Z kientzle $");
/*
* The data for this testcase was provided by Mike Qin <mikeandmore@gmail.com>
diff --git a/contrib/libarchive/libarchive/test/test_read_format_isorr_bz2.c b/contrib/libarchive/libarchive/test/test_read_format_isorr_bz2.c
index bff385ca1d59..c1accea78792 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_isorr_bz2.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_isorr_bz2.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
PLEASE use old cdrtools; mkisofs version is 2.01.
diff --git a/contrib/libarchive/libarchive/test/test_read_format_isorr_ce.c b/contrib/libarchive/libarchive/test/test_read_format_isorr_ce.c
index 9712eb432106..6b983e8ff4ab 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_isorr_ce.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_isorr_ce.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
Execute the following command to rebuild the data for this program:
diff --git a/contrib/libarchive/libarchive/test/test_read_format_isorr_new_bz2.c b/contrib/libarchive/libarchive/test/test_read_format_isorr_new_bz2.c
index 31fe1dbbf035..787c1e6301be 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_isorr_new_bz2.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_isorr_new_bz2.c
@@ -23,8 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
-
/*
PLEASE use latest cdrtools at least mkisofs version is 2.01.01a63 or later.
diff --git a/contrib/libarchive/libarchive/test/test_read_format_isorr_rr_moved.c b/contrib/libarchive/libarchive/test/test_read_format_isorr_rr_moved.c
index 8f5354020448..a27230033672 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_isorr_rr_moved.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_isorr_rr_moved.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
Execute the following command to rebuild the data for this program:
diff --git a/contrib/libarchive/libarchive/test/test_read_format_isozisofs_bz2.c b/contrib/libarchive/libarchive/test/test_read_format_isozisofs_bz2.c
index 7fea6b1bfbea..3f059fde08b5 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_isozisofs_bz2.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_isozisofs_bz2.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
Execute the following command to rebuild the data for this program:
diff --git a/contrib/libarchive/libarchive/test/test_read_format_lha.c b/contrib/libarchive/libarchive/test/test_read_format_lha.c
index 6a53976c2a75..93e79183e5c3 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_lha.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_lha.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
/*
Execute the following command to rebuild the data for this program:
diff --git a/contrib/libarchive/libarchive/test/test_read_format_lha_bugfix_0.c b/contrib/libarchive/libarchive/test/test_read_format_lha_bugfix_0.c
index 2b4160b3220e..bbdcb81569b6 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_lha_bugfix_0.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_lha_bugfix_0.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
DEFINE_TEST(test_read_format_lha_bugfix_0)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_format_lha_filename.c b/contrib/libarchive/libarchive/test/test_read_format_lha_filename.c
index 126a8704ce4a..d726f6245d7d 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_lha_filename.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_lha_filename.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
#include <locale.h>
diff --git a/contrib/libarchive/libarchive/test/test_read_format_lha_filename_cp932.lzh.uu b/contrib/libarchive/libarchive/test/test_read_format_lha_filename_cp932.lzh.uu
index 15170146083e..a579fb1aaa61 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_lha_filename_cp932.lzh.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_lha_filename_cp932.lzh.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_lha_cp932.lzh
+begin 644 test_read_format_lha_filename_cp932.lzh
M30`M;&@P+0@````(````*:2#32`"&4A-!P!&I`,```L``8J_CIHN='AT&P!!
M-'"`))KERP%TJNDQFN7+`72JZ3&:Y<L!!@``T2,'``"*OXZ:@JF"R$L`+6QH
M,"T$````!````#RD@TT@`NA;30<`1J0#```)``&57"YT>'0;`$&:91,VFN7+
diff --git a/contrib/libarchive/libarchive/test/test_read_format_lha_filename_utf16.c b/contrib/libarchive/libarchive/test/test_read_format_lha_filename_utf16.c
index 7ab13e43bdd3..d0710799bba4 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_lha_filename_utf16.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_lha_filename_utf16.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
#include <locale.h>
diff --git a/contrib/libarchive/libarchive/test/test_read_format_lha_filename_utf16.lzh.uu b/contrib/libarchive/libarchive/test/test_read_format_lha_filename_utf16.lzh.uu
index ca5da7a64e59..0eeea817b462 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_lha_filename_utf16.lzh.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_lha_filename_utf16.lzh.uu
@@ -1,19 +1,19 @@
-begin 644 test_read_format_lha_filename_utf16.lzh
-M@0`M;&@P+0P````,````L/5872`"IW%-!P!&I`,```T``5]?7U]?7RYT>'0*
-M``)?7U]?7U__%P!$Y`#V`/P`Q`#6`-P`+@!T`'@`=``1`$7<`-8`Q`#\`/8`
-MY`#__QL`078S<F.15=4!]0V8@I%5U0'U#9B"D575`08```\:!P``PZ3#ML.\
-MPX3#EL.<90`M;&AD+0``````````PX"D72`"``!-!P!&I`,```,``0H``E]?
-M7U]?7_\%`$`0`!$`1=P`U@#$`/P`]@#D`/__&P!!FDHB>9B"U0$H^DQ_F(+5
-M`2CZ3'^8@M4!!@``GW<'``!J`"UL:#`M&0```!D```!V)L1=(`*CNTT'`$:D
-M`P``#0`!@V6#6(-G+G1X=`H``E]?7U]?7_\1`$7<`-8`Q`#\`/8`Y`#__QL`
-M00IF#4J@E-4!L"5C?'65U0&P)6-\=975`08``$%^!P``5&5S="!I;B!*87!A
-M;F5S92!+871A:V%N87L`+6QH,"T,````#````+#U6%T@`J=Q30<`1J0#```-
-M``%?7U]?7U\N='AT"@`"@V6#6(-G_Q<`1.0`]@#\`,0`U@#<`"X`=`!X`'0`
-M"P!%QC"Y,,@P__\;`$'D5O!-H)35`?4-F(*15=4!Y%;P3:"4U0$&``"A+0<`
-M`,.DP[;#O,.$PY;#G%0`+6QH9"T``````````-3`PET@`@``30<`1J0#```#
-M``$*``*#98-8@V?_!0!`$``;`$%%!\Y.H)35`3/_]%&@E-4!,__T4:"4U0$&
-M``!>;@<``&8`+6QH,"T,````#````+#U6%T@`J=Q30<`1J0#```-``%?7U]?
-M7U\N='AT%P!$Y`#V`/P`Q`#6`-P`+@!T`'@`=``;`$'D5O!-H)35`?4-F(*1
-@5=4!Y%;P3:"4U0$&``"M>`<``,.DP[;#O,.$PY;#G`#D
-`
-end
+begin 644 test_read_format_lha_filename_utf16.lzh
+M@0`M;&@P+0P````,````L/5872`"IW%-!P!&I`,```T``5]?7U]?7RYT>'0*
+M``)?7U]?7U__%P!$Y`#V`/P`Q`#6`-P`+@!T`'@`=``1`$7<`-8`Q`#\`/8`
+MY`#__QL`078S<F.15=4!]0V8@I%5U0'U#9B"D575`08```\:!P``PZ3#ML.\
+MPX3#EL.<90`M;&AD+0``````````PX"D72`"``!-!P!&I`,```,``0H``E]?
+M7U]?7_\%`$`0`!$`1=P`U@#$`/P`]@#D`/__&P!!FDHB>9B"U0$H^DQ_F(+5
+M`2CZ3'^8@M4!!@``GW<'``!J`"UL:#`M&0```!D```!V)L1=(`*CNTT'`$:D
+M`P``#0`!@V6#6(-G+G1X=`H``E]?7U]?7_\1`$7<`-8`Q`#\`/8`Y`#__QL`
+M00IF#4J@E-4!L"5C?'65U0&P)6-\=975`08``$%^!P``5&5S="!I;B!*87!A
+M;F5S92!+871A:V%N87L`+6QH,"T,````#````+#U6%T@`J=Q30<`1J0#```-
+M``%?7U]?7U\N='AT"@`"@V6#6(-G_Q<`1.0`]@#\`,0`U@#<`"X`=`!X`'0`
+M"P!%QC"Y,,@P__\;`$'D5O!-H)35`?4-F(*15=4!Y%;P3:"4U0$&``"A+0<`
+M`,.DP[;#O,.$PY;#G%0`+6QH9"T``````````-3`PET@`@``30<`1J0#```#
+M``$*``*#98-8@V?_!0!`$``;`$%%!\Y.H)35`3/_]%&@E-4!,__T4:"4U0$&
+M``!>;@<``&8`+6QH,"T,````#````+#U6%T@`J=Q30<`1J0#```-``%?7U]?
+M7U\N='AT%P!$Y`#V`/P`Q`#6`-P`+@!T`'@`=``;`$'D5O!-H)35`?4-F(*1
+@5=4!Y%;P3:"4U0$&``"M>`<``,.DP[;#O,.$PY;#G`#D
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_mtree.c b/contrib/libarchive/libarchive/test/test_read_format_mtree.c
index 7e8b5701540c..70730839386d 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_mtree.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_mtree.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
test_read_format_mtree1(void)
@@ -789,6 +788,7 @@ DEFINE_TEST(test_read_format_mtree_nonexistent_contents_file)
assertEqualInt(ARCHIVE_OK, archive_read_close(a));
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
+
/*
* Check mtree file with non-printable ascii characters
*/
@@ -814,3 +814,32 @@ DEFINE_TEST(test_read_format_mtree_noprint)
assertEqualInt(ARCHIVE_OK, archive_read_close(a));
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
+
+/*
+ * Check mtree file with tab characters, which are supported but not printable
+ */
+DEFINE_TEST(test_read_format_mtree_tab)
+{
+ static char archive[] =
+ "#mtree\n"
+ "\ta\ttype=file\n";
+ 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));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_open_memory(a, archive, sizeof(archive)));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString(archive_entry_pathname(ae), "a");
+ assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+ assertEqualInt(1, archive_file_count(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_pax_bz2.c b/contrib/libarchive/libarchive/test/test_read_format_pax_bz2.c
index 098df9731508..4f11137b9c6f 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_pax_bz2.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_pax_bz2.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
'B','Z','h','9','1','A','Y','&','S','Y',152,180,30,185,0,0,140,127,176,212,
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar.c b/contrib/libarchive/libarchive/test/test_read_format_rar.c
index 1425eb9a4570..dce567af48a9 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar.c
@@ -214,6 +214,14 @@ DEFINE_TEST(test_read_format_rar_unicode_UTF8)
assert((a = archive_read_new()) != NULL);
assertA(0 == archive_read_support_filter_all(a));
assertA(0 == archive_read_support_format_all(a));
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ /* Windows will use OEMCP as default, but the file is UTF-8. */
+ if (ARCHIVE_OK != archive_read_set_options(a, "rar:hdrcharset=UTF-8")) {
+ skipping("This system cannot read input as UTF-8.");
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ return;
+ }
+#endif
assertA(0 == archive_read_open_filename(a, reffile, 10240));
/* First header. */
@@ -879,16 +887,9 @@ DEFINE_TEST(test_read_format_rar_windows)
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
-DEFINE_TEST(test_read_format_rar_multivolume)
+static void
+test_read_format_rar_multivolume_test_body_helper(struct archive *a)
{
- const char *reffiles[] =
- {
- "test_read_format_rar_multivolume.part0001.rar",
- "test_read_format_rar_multivolume.part0002.rar",
- "test_read_format_rar_multivolume.part0003.rar",
- "test_read_format_rar_multivolume.part0004.rar",
- NULL
- };
int file1_size = 241647978, offset = 0;
char buff[64];
const char file1_test_txt[] = "gin-bottom: 0in\"><BR>\n</P>\n</BODY>\n"
@@ -903,13 +904,6 @@ DEFINE_TEST(test_read_format_rar_multivolume)
int file3_size = sizeof(file3_buff);
const char file3_test_txt[] = "test text document\r\n";
struct archive_entry *ae;
- struct archive *a;
-
- extract_reference_files(reffiles);
- assert((a = archive_read_new()) != NULL);
- assertA(0 == archive_read_support_filter_all(a));
- assertA(0 == archive_read_support_format_all(a));
- assertA(0 == archive_read_open_filenames(a, reffiles, 10240));
/* First header. */
assertA(0 == archive_read_next_header(a, &ae));
@@ -1016,6 +1010,65 @@ DEFINE_TEST(test_read_format_rar_multivolume)
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
+DEFINE_TEST(test_read_format_rar_multivolume)
+{
+ const char *reffiles[] =
+ {
+ "test_read_format_rar_multivolume.part0001.rar",
+ "test_read_format_rar_multivolume.part0002.rar",
+ "test_read_format_rar_multivolume.part0003.rar",
+ "test_read_format_rar_multivolume.part0004.rar",
+ NULL
+ };
+
+ struct archive *a;
+
+ extract_reference_files(reffiles);
+ assert((a = archive_read_new()) != NULL);
+ assertA(0 == archive_read_support_filter_all(a));
+ assertA(0 == archive_read_support_format_all(a));
+ assertA(0 == archive_read_open_filenames(a, reffiles, 10240));
+
+ test_read_format_rar_multivolume_test_body_helper(a);
+}
+
+/* As above, but using read_open_filenames_w */
+DEFINE_TEST(test_read_format_rar_multivolume_w)
+{
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ const char *reffiles[] =
+ {
+ "test_read_format_rar_multivolume.part0001.rar",
+ "test_read_format_rar_multivolume.part0002.rar",
+ "test_read_format_rar_multivolume.part0003.rar",
+ "test_read_format_rar_multivolume.part0004.rar",
+ NULL
+ };
+
+ const wchar_t *wreffiles[] =
+ {
+ L"test_read_format_rar_multivolume.part0001.rar",
+ L"test_read_format_rar_multivolume.part0002.rar",
+ L"test_read_format_rar_multivolume.part0003.rar",
+ L"test_read_format_rar_multivolume.part0004.rar",
+ NULL
+ };
+
+ struct archive *a;
+
+ extract_reference_files(reffiles);
+ assert((a = archive_read_new()) != NULL);
+ assertA(0 == archive_read_support_filter_all(a));
+ assertA(0 == archive_read_support_format_all(a));
+ assertA(0 == archive_read_open_filenames_w(a, wreffiles, 10240));
+
+ test_read_format_rar_multivolume_test_body_helper(a);
+#else
+ skipping("archive_read_open_filenames_w is not available on this platform");
+ return;
+#endif
+}
+
DEFINE_TEST(test_read_format_rar_multivolume_skip)
{
const char *reffiles[] =
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar.rar.uu
index 75f93b4c281a..f197a2983302 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_format_rar.rar
M4F%R(1H'`,^0<P``#0````````"$4G0@D#(`%````!0````#0J+(OK=VVCX4
M,`@`I($``'1E<W0N='AT@`BW=MH^MW;:/G1E<W0@=&5X="!D;V-U;65N=`T*
MG2]T()`R``@````(`````WM$R;;13-@^%#`(`/^A``!T97-T;&EN:\`(T4S8
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5.c b/contrib/libarchive/libarchive/test/test_read_format_rar5.c
index f91521e72f82..705913b04cc2 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar5.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5.c
@@ -168,7 +168,7 @@ DEFINE_TEST(test_read_format_rar5_compressed)
assertEqualInt(DATA_SIZE, archive_entry_size(ae));
assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
- verify_data(buff, 0, DATA_SIZE);
+ assertA(1 == verify_data(buff, 0, DATA_SIZE));
EPILOGUE();
}
@@ -187,25 +187,25 @@ DEFINE_TEST(test_read_format_rar5_multiple_files)
assertEqualString("test1.bin", archive_entry_pathname(ae));
assertEqualInt(DATA_SIZE, archive_entry_size(ae));
assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
- assertA(verify_data(buff, 1, DATA_SIZE));
+ assertA(1 == verify_data(buff, 1, DATA_SIZE));
assertA(0 == archive_read_next_header(a, &ae));
assertEqualString("test2.bin", archive_entry_pathname(ae));
assertEqualInt(DATA_SIZE, archive_entry_size(ae));
assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
- assertA(verify_data(buff, 2, DATA_SIZE));
+ assertA(1 == verify_data(buff, 2, DATA_SIZE));
assertA(0 == archive_read_next_header(a, &ae));
assertEqualString("test3.bin", archive_entry_pathname(ae));
assertEqualInt(DATA_SIZE, archive_entry_size(ae));
assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
- assertA(verify_data(buff, 3, DATA_SIZE));
+ assertA(1 == verify_data(buff, 3, DATA_SIZE));
assertA(0 == archive_read_next_header(a, &ae));
assertEqualString("test4.bin", archive_entry_pathname(ae));
assertEqualInt(DATA_SIZE, archive_entry_size(ae));
assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
- assertA(verify_data(buff, 4, DATA_SIZE));
+ assertA(1 == verify_data(buff, 4, DATA_SIZE));
/* There should be no more files in this archive. */
@@ -230,25 +230,25 @@ DEFINE_TEST(test_read_format_rar5_multiple_files_solid)
assertEqualString("test1.bin", archive_entry_pathname(ae));
assertEqualInt(DATA_SIZE, archive_entry_size(ae));
assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
- assertA(verify_data(buff, 1, DATA_SIZE));
+ assertA(1 == verify_data(buff, 1, DATA_SIZE));
assertA(0 == archive_read_next_header(a, &ae));
assertEqualString("test2.bin", archive_entry_pathname(ae));
assertEqualInt(DATA_SIZE, archive_entry_size(ae));
assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
- assertA(verify_data(buff, 2, DATA_SIZE));
+ assertA(1 == verify_data(buff, 2, DATA_SIZE));
assertA(0 == archive_read_next_header(a, &ae));
assertEqualString("test3.bin", archive_entry_pathname(ae));
assertEqualInt(DATA_SIZE, archive_entry_size(ae));
assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
- assertA(verify_data(buff, 3, DATA_SIZE));
+ assertA(1 == verify_data(buff, 3, DATA_SIZE));
assertA(0 == archive_read_next_header(a, &ae));
assertEqualString("test4.bin", archive_entry_pathname(ae));
assertEqualInt(DATA_SIZE, archive_entry_size(ae));
assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
- assertA(verify_data(buff, 4, DATA_SIZE));
+ assertA(1 == verify_data(buff, 4, DATA_SIZE));
assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
EPILOGUE();
@@ -806,6 +806,36 @@ DEFINE_TEST(test_read_format_rar5_extract_win32)
EPILOGUE();
}
+DEFINE_TEST(test_read_format_rar5_unicode)
+{
+#if !defined(WIN32) || defined(__CYGWIN__)
+ skipping("Skipping test on non-Windows");
+ return;
+#else
+ /* Corresponds to the names:
+ * 👋🌎.txt
+ * 𝒮𝓎𝓂𝒷𝑜𝓁𝒾𝒸 𝐿𝒾𝓃𝓀.txt
+ * Ⓗⓐⓡⓓ Ⓛⓘⓝⓚ.txt */
+ const wchar_t* emoji_name = L"\U0001f44b\U0001f30e.txt";
+ const wchar_t* italic_name = L"\U0001d4ae\U0001d4ce\U0001d4c2\U0001d4b7\U0001d45c\U0001d4c1\U0001d4be\U0001d4b8 \U0001d43f\U0001d4be\U0001d4c3\U0001d4c0.txt";
+ const wchar_t* circle_name = L"\u24bd\u24d0\u24e1\u24d3 \u24c1\u24d8\u24dd\u24da.txt";
+
+ PROLOGUE("test_read_format_rar5_unicode.rar");
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualWString(emoji_name, archive_entry_pathname_w(ae));
+ assertEqualInt(archive_entry_mode(ae), AE_IFREG | 0644);
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualWString(circle_name, archive_entry_pathname_w(ae));
+ assertEqualInt(archive_entry_mode(ae), AE_IFREG | 0644);
+ assertEqualWString(emoji_name, archive_entry_hardlink_w(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualWString(italic_name, archive_entry_pathname_w(ae));
+ assertEqualInt(archive_entry_mode(ae), AE_IFLNK | 0644);
+ assertEqualWString(emoji_name, archive_entry_symlink_w(ae));
+ EPILOGUE();
+#endif
+}
+
DEFINE_TEST(test_read_format_rar5_block_by_block)
{
/* This test uses strange buffer sizes intentionally. */
@@ -1206,6 +1236,23 @@ DEFINE_TEST(test_read_format_rar5_different_window_size)
EPILOGUE();
}
+DEFINE_TEST(test_read_format_rar5_window_buf_and_size_desync)
+{
+ /* oss fuzz 30442 */
+
+ char buf[4096];
+ PROLOGUE("test_read_format_rar5_window_buf_and_size_desync.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);
+ while(0 < archive_read_data(a, buf, 46)) {}
+
+ EPILOGUE();
+}
+
DEFINE_TEST(test_read_format_rar5_arm_filter_on_window_boundary)
{
char buf[4096];
@@ -1271,3 +1318,87 @@ DEFINE_TEST(test_read_format_rar5_block_size_is_too_small)
EPILOGUE();
}
+
+DEFINE_TEST(test_read_format_rar5_sfx)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ int bs = 10240;
+ char buff[32];
+ const char reffile[] = "test_read_format_rar5_sfx.exe";
+ const char test_txt[] = "123";
+ int size = sizeof(test_txt) - 1;
+
+ extract_reference_file(reffile);
+ assert((a = archive_read_new()) != NULL);
+ assertA(0 == archive_read_support_filter_all(a));
+ assertA(0 == archive_read_support_format_all(a));
+ assertA(0 == archive_read_open_filename(a, reffile, bs));
+
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test.txt.txt", archive_entry_pathname(ae));
+
+ assertA(size == archive_read_data(a, buff, size));
+ assertEqualMem(buff, test_txt, size);
+
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_decode_number_out_of_bounds_read)
+{
+ /* oss fuzz 30448 */
+
+ char buf[4096];
+ PROLOGUE("test_read_format_rar5_decode_number_out_of_bounds_read.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);
+ while(0 < archive_read_data(a, buf, sizeof(buf))) {}
+
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_bad_window_size_in_multiarchive_file)
+{
+ /* oss fuzz 30459 */
+
+ char buf[4096];
+ PROLOGUE("test_read_format_rar5_bad_window_sz_in_mltarc_file.rar");
+
+ /* This file is damaged, so those functions should return failure.
+ * Additionally, SIGSEGV shouldn't be raised during execution
+ * of those functions. */
+
+ (void) archive_read_next_header(a, &ae);
+ while(0 < archive_read_data(a, buf, sizeof(buf))) {}
+ (void) archive_read_next_header(a, &ae);
+ while(0 < archive_read_data(a, buf, sizeof(buf))) {}
+
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_read_data_block_uninitialized_offset)
+{
+ const void *buf;
+ size_t size;
+ la_int64_t offset;
+
+ PROLOGUE("test_read_format_rar5_compressed.rar");
+ assertA(0 == archive_read_next_header(a, &ae));
+
+ /* A real code may pass a pointer to an uninitialized variable as an offset
+ * output argument. Here we want to check this situation. But because
+ * relying on a value of an uninitialized variable in a test is not a good
+ * idea, let's pretend that 0xdeadbeef is a random value of the
+ * uninitialized variable. */
+ offset = 0xdeadbeef;
+ assertEqualInt(ARCHIVE_OK, archive_read_data_block(a, &buf, &size, &offset));
+ /* The test archive doesn't contain a sparse file. And because of that, here
+ * we assume that the first returned offset should be 0. */
+ assertEqualInt(0, offset);
+
+ EPILOGUE();
+}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_bad_window_sz_in_mltarc_file.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_bad_window_sz_in_mltarc_file.rar.uu
new file mode 100644
index 000000000000..4decccb38574
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_bad_window_sz_in_mltarc_file.rar.uu
@@ -0,0 +1,7 @@
+begin 644 test_read_format_rar5_bad_window_sz_in_mltarc_file.rar
+M4F%R(1H'`0`]/-[E`@$`_R`@1#[Z5P("`PL`("`@@"(`"?\@("#___\@("`@
+M("`@("`@("`@4X`J]`,"YR(#$($@("`@``$@("`@@<L0("`@("`@("`@("`@
+M("`@(""LCTJA`P$%`B`@`2!3@"KT`P+G(@,@("`@_P,!!B`@(/___R`@(('+
+5$"`OX2`@[.SL[.S_("`@("`@("`@
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_compressed.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_compressed.rar.uu
index f9f811c6dc0d..dbd42f09cbb6 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar5_compressed.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_compressed.rar.uu
@@ -1,4 +1,4 @@
-begin 644 rar5_compressed.rar
+begin 644 test_read_format_rar5_compressed.rar
M4F%R(1H'`0#SX8+K"P$%!P`&`0&`@(``B<9?VB8"`POI`@2P":2#`LUPRGR`
M!0$(=&5S="YB:6X*`Q.+5ZQ;^!BM'LKT90$G96!4'U5V7;^4DG')SV6660QP
MV663&,62$X9"223AD)"2220DXY))(0A))"$)))"22$(2$LVU;WM],PZ`?1T#
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_decode_number_out_of_bounds_read.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_decode_number_out_of_bounds_read.rar.uu
new file mode 100644
index 000000000000..34d8ce3f74d7
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_decode_number_out_of_bounds_read.rar.uu
@@ -0,0 +1,10 @@
+begin 644 test_read_format_rar5_decode_number_out_of_bounds_read.rar
+M4F%R(1H'`0!3@"KT`P+G(@(0("`@@`L!!"`@("`@(($D_[BJ2"!::7!)210V
+M+0#ZF#)Q!`+>YPW_("`@("``_R````````````````````````````!__P``
+M``````!T72`@/EW_(/\@("`@("`@("`@("`@("`@("`@("`@("`@(/\@("`@
+M("`@("#_("`@("`@("`@("`@("`@("`@("`@("`@("#_("`@("`@("`@_R`@
+M("`@("`@("`@("`@("`@("`@("`@("`@_R`@("`@("`@(/\@("`@("`@("`@
+M("`@("`@("`@("`@("`@(/\@("`@("`@("#_("`@("`@("`@("`@("`@("`@
+E("`@("`@("#_("`@("`@("`@_R`@("`@("`@("`@("`@("`@(```
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_different_winsize_on_merge.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_different_winsize_on_merge.rar.uu
index 85391fa4e1f6..9a3423e37afa 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar5_different_winsize_on_merge.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_different_winsize_on_merge.rar.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_rar5_different_winsize_on_merge.rar.uu
+begin 644 test_read_format_rar5_different_winsize_on_merge.rar
M4F%R(1H'`0"-[P+2``+''QP,!`H``"0`N)$#`0(H$"<"``X`/3Q/`0"V````
MQ@$````V`/^%02`H^B7&,NX``"F&AK%M-50O<WY2!P$`C>\"T@`"_[6U,1"U
MM;6UM[BU45)A<K6UM;6UM+6U```\______?______________P`&80"-[P+2
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part01.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part01.rar.uu
index a83c78ca22cd..9006181efaee 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part01.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part01.rar.uu
@@ -1,4 +1,4 @@
-begin 644 rar5_multiarchive.part01.rar
+begin 644 test_read_format_rar5_multiarchive.part01.rar
M4F%R(1H'`0!5`$'/#`$%"`$'`0'O]H"``.>[Y2I7`A,+@O8`!.#I".V#`FI)
M!96`%0$W:&]M92]A;G1E:R]T96UP+V)U:6QD+W5N<F%R-2]L:6)A<F-H:79E
M+V)I;B]B<V1C871?=&5S=`H#$Z@$JUL/WSH`BQ&75V"(540R)79@1V>KN2Y+
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part02.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part02.rar.uu
index fce29824622d..d766ccee9d87 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part02.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part02.rar.uu
@@ -1,4 +1,4 @@
-begin 644 rar5_multiarchive.part02.rar
+begin 644 test_read_format_rar5_multiarchive.part02.rar
M4F%R(1H'`0"ZHBK1#0$%"`,!!P$![_:`@`!@&RUZ5P(;"X'V``3@Z0CM@P)=
M-\$R@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U;G)A<C4O;&EB87)C:&EV
M92]B:6XO8G-D8V%T7W1E<W0*`Q.H!*M;#]\Z`,C&\^P15*#4'A\D!$R&)9;I
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part03.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part03.rar.uu
index c600f025395e..b2bd1a72bafa 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part03.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part03.rar.uu
@@ -1,4 +1,4 @@
-begin 644 rar5_multiarchive.part03.rar
+begin 644 test_read_format_rar5_multiarchive.part03.rar
M4F%R(1H'`0`S!&6T#0$%"`,"!P$!@_:`@`#;[#5T5P(+"_W#``3@Z0CM@P)S
M="<U@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U;G)A<C4O;&EB87)C:&EV
M92]B:6XO8G-D8V%T7W1E<W0*`Q.H!*M;#]\Z`+YO1=#5A^0(J_-LW+!*WYK9
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part04.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part04.rar.uu
index 3b47dd07c873..afd18ab0a896 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part04.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part04.rar.uu
@@ -1,4 +1,4 @@
-begin 644 rar5_multiarchive.part04.rar
+begin 644 test_read_format_rar5_multiarchive.part04.rar
M4F%R(1H'`0`\BMS_#0$%"`,#!P$![_:`@``H3"7!5P(;"X'V``3HJ!;M@P)=
M?Y*E@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U;G)A<C4O;&EB87)C:&EV
M92]B:6XO8G-D=&%R7W1E<W0*`Q.J!*M;T74"-U,K[HY2T0OI6D^@"4>G(I3D
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part05.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part05.rar.uu
index 4dc97d65ea1e..a9f1981e4845 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part05.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part05.rar.uu
@@ -1,4 +1,4 @@
-begin 644 rar5_multiarchive.part05.rar
+begin 644 test_read_format_rar5_multiarchive.part05.rar
M4F%R(1H'`0#UY[V;#0$%"`,$!P$![_:`@`"(]4(L5P(;"X'V``3HJ!;M@P+]
MF?Z`@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U;G)A<C4O;&EB87)C:&EV
M92]B:6XO8G-D=&%R7W1E<W0*`Q.J!*M;T74"-[]V(;"@ZL+ZZ0DS>@98+@$>
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part06.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part06.rar.uu
index 1e2ad0cf9833..1ba155dbf4c8 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part06.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part06.rar.uu
@@ -1,4 +1,4 @@
-begin 644 rar5_multiarchive.part06.rar
+begin 644 test_read_format_rar5_multiarchive.part06.rar
M4F%R(1H'`0"V\\:,#0$%"`,%!P$![_:`@``2\>%K5P(;"X'V``3HJ!;M@P(]
M(D2J@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U;G)A<C4O;&EB87)C:&EV
M92]B:6XO8G-D=&%R7W1E<W0*`Q.J!*M;T74"-\2/YDWQ,%)DI56J+M4UB8>R
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part07.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part07.rar.uu
index de1044e30589..23ba290ad4ed 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part07.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part07.rar.uu
@@ -1,4 +1,4 @@
-begin 644 rar5_multiarchive.part07.rar
+begin 644 test_read_format_rar5_multiarchive.part07.rar
M4F%R(1H'`0!SSTNU#0$%"`,&!P$![_:`@`#=K"Q/5P(;"X'V``3HJ!;M@P*V
M0J=E@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U;G)A<C4O;&EB87)C:&EV
M92]B:6XO8G-D=&%R7W1E<W0*`Q.J!*M;T74"-YY^$-E'40]L2'?%!?HA6*"R
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part08.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part08.rar.uu
index eae45fc7a2fb..459beb48d241 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part08.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiarchive.part08.rar.uu
@@ -1,4 +1,4 @@
-begin 644 rar5_multiarchive.part08.rar
+begin 644 test_read_format_rar5_multiarchive.part08.rar
M4F%R(1H'`0#"(ZNP#0$%"`,'!P$!\,:`@`#/Q#!K5P(+"X+&``3HJ!;M@P+X
M99;E@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U;G)A<C4O;&EB87)C:&EV
M92]B:6XO8G-D=&%R7W1E<W0*`Q.J!*M;T74"-P'V.L#Y#UMO#KJ6K6EJUOF6
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiple_files.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiple_files.rar.uu
index 3fa8930c9d33..26ededc9b454 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiple_files.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiple_files.rar.uu
@@ -1,4 +1,4 @@
-begin 644 rar5_multiple_files.rar
+begin 644 test_read_format_rar5_multiple_files.rar
M4F%R(1H'`0#SX8+K"P$%!P`&`0&`@(```Q:>PB<"`POD`@2`(*2#`L:R$WZ`
M!0$)=&5S=#$N8FEN"@,39U^L6QI:GA#*\6`!$&149R]7!6]2222222222222
M2222222222222222222222222222222222222222222222223]_>QS,[=]KH
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiple_files_solid.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiple_files_solid.rar.uu
index 4a8acb08c45a..8ba78774dc48 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar5_multiple_files_solid.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_multiple_files_solid.rar.uu
@@ -1,4 +1,4 @@
-begin 644 rar5_multiple_files_solid.rar
+begin 644 test_read_format_rar5_multiple_files_solid.rar
M4F%R(1H'`0`)[\AO"P$%!P0&`0&`@(``&8R4_R<"`POY`@2`(*2#`L:R$WZ`
M'0$)=&5S=#$N8FEN"@,39U^L6QI:GA#)YW4!&&5492;T@%?U\^?/DDDDDDDD
MDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDO\\YG#6M
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_sfx.exe.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_sfx.exe.uu
new file mode 100644
index 000000000000..7df65a110384
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_sfx.exe.uu
@@ -0,0 +1,7048 @@
+begin 644 test_read_format_rar5_sfx.exe
+M35J0``,````$````__\``+@`````````0```````````````````````````
+M````````````````````$`$```X?N@X`M`G-(;@!3,TA5&AI<R!P<F]G<F%M
+M(&-A;FYO="!B92!R=6X@:6X@1$]3(&UO9&4N#0T*)`````````!B8/>3)@&9
+MP"8!F<`F`9G`DIUHP"L!F<"2G6K`JP&9P)*=:\`^`9G`N*%>P"0!F<`=7YK!
+M,`&9P!U?G<$U`9G`'5^<P0H!F<`O>1K`+`&9P"]Y"L`C`9G`)@&8P"L`F<"Q
+M7YS!%P&9P+%?F<$G`9G`M%]FP"<!F<"Q7YO!)P&9P%)I8V@F`9G`````````
+M``!010``3`$&`/\IPV```````````.```@$+`0X``!0#``#F`P``````\.X!
+M```0````,`,```!````0`````@``!0`!```````%``$```````!`!P``!```
+M``````(`0,$``!```!``````$```$````````!`````PR`,`-````&3(`P`\
+M`````#`&`-#?`````````````````````````!`'`'PB``#`J@,`5```````
+M``````````````````````````````A5`P!`````````````````,`,`8`(`
+M`,2]`P`@`0```````````````````````"YT97AT````NA,#```0````%`,`
+M``0``````````````````"```&`N<F1A=&$``"*F````,`,``*@````8`P``
+M``````````````!```!`+F1A=&$````H-P(``.`#```0````P`,`````````
+M````````0```P"YD:61A=```C`$````@!@```@```-`#````````````````
+M`$```,`N<G-R8P```-#?````,`8``.````#2`P````````````````!```!`
+M+G)E;&]C``!\(@```!`'```D````L@0`````````````````0```0@``````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````````+FP#D0`Z61.``#,
+MS,S,S,RY4`]$`.F<70``S,S,S,S,N>@.1`#HD[X``&A@(T,`Z"#:`0!9P\S,
+MS,S,S,S,S,QH<"-#`.@*V@$`6</,S,S,Z`'R``"CT(%$`,/,S,S,S+G@@40`
+MZ6$&`0#,S,S,S,RY>&I%`.CAW```:(`C0P#HT-D!`%G#S,S,S,S,S,S,S+F"
+MVT4`Z,'<``!HD"-#`.BPV0$`6</,S,S,S,S,S,S,N7+$1`#HH=P``&B@(T,`
+MZ)#9`0!9P\S,S,S,S,S,S,RY>,5$`.A]2@``:+`C0P#H<-D!`%G#S,S,S,S,
+MS,S,S%6+[('L6`0``%-65XM]%(VUJ/O__[L``@``A?]T05-7B\90Z!GP``"+
+MQE#H8R<"`%F-M:K[__^--$:-A:C[__^+SBO(B\/1^2O!4%=6Z._O``!6Z#LG
+M`@!9C31&@\8"C86H^___B\XKR(O#T?DKP5!HH@```.A"SP``4%;HP.\``%;H
+M#"<"`%F-C:C[__^--$:#Q@*+QBO!T?@KV%-HL#5#`%;HF>\``%;HY28"`#/)
+M:EAFB4Q&`HU%J%Y645#H/>0!`(M%"(/$$(I=&(M]$(E%K*'0#D0`B46PC86H
+M^___B46TBT4,B478C46HB76HB7W$QT7(``@``,=%W`P(`0!0A-MT"/\5/"!&
+M`.L&_Q5$($8`B_"%]G4L_Q5`($8`/0(P``!U'3/`9HD'C46H4(3;=`C_%3P@
+M1@#K!O\51"!&`(OPA?9?7@^5P%N+Y5W"%`!5B^R!["P"``"-1?Q0_Q6(($8`
+MA<!T!#+`ZV:+10@SR8E%W(V%U/W__XE%Y(M%#(E%Z(U%W%90B4W@QT7L00``
+M`(E-\(E-]/\5C"!&`(OPA?9U!#+`ZRE7_W405O\5D"!&`(M-_(OX5E&+$8MR
+M%(O._Q5@,D,`_]8SP(7_7P^5P%Z+Y5W"#``/MD0D#%#_="0,_W0D#/\59"%&
+M`%#_%6`A1@#"#``/MD0D#/?8&\"#X`E0_W0D#/]T)`S_%60A1@!0_Q5L(48`
+MP@P`58OL@WT,,'19@7T,$`$``'5=BD4@N>@.1``D`0^VP%#_=1C_=0CH/<H`
+M`/9%(`%T/O]U"/\56"%&`(7`=#%H(3```%#_%60A1@"%P'0A]D4@"'0;:+0U
+M0P!0_Q5<(48`ZPW_=0BYZ`Y$`.C2R0``,L!=PAP`5O]T)`B+\3/`B0:)1@2)
+M1@B)1@R(1A#H5@,``(O&7L($`+AW'T,`Z*C1`0!145-6B_&)=?#H_(,``#/;
+MQP:X-4,`C8XH$```B5W\Z`=,``"-CN@@``#&1?P!Z$RV``"-CH`B``")GM`A
+M``")GM0A``#H2P$``(V.T$4``.A``0``.5T(QD7\!`^4P(F>O"$``(B&N"$`
+M`(3`="-H\((``.CMT`$`68E%[,9%_`6%P'0)B\CH-9X``.L'B\/K`XM%"(F&
+MO"$``(J`H6$``(..P"$``/^#CL0A``#_@X[((0``_VI`B$8BC88((@``4U#'
+MAK!L```"````B9ZT;```B9ZX;```B9[`;```B9[0(0``B9[4(0``B)Z\;```
+M9HF>Q&P``(F>V"$``(F>H&P``(F>I&P``(F>J&P``(F>K&P``.@IX0$`:C2-
+MAD@B``!34.@:X0$`:B"-AI!%``!34.@+X0$`BTWT@\0DB9[8;```,\")GN!L
+M``")GN1L``")GNAL``")GNQL``")GO!L``")GO1L``!FB8;Z;```B\:(GM9L
+M``"(GOAL``"(GN`A``!>6V2)#0````"+Y5W"!`!1,\")#"2)@2@0``")@2P0
+M``")@3`0``")@300``"(@3@0``")@4`0``")@400``")@4@0``")@4P0``")
+M@5`0``")@500``"+P5G#5E>+\;BT-4,`:@A9B_[SJVH@,_^-1B!74.A%X`$`
+MBT0D&(/$#(E^0(E^1(E&2(O&7U["!`!5B^QDH0````!J_VB!'T,`4&2))0``
+M``!6B_&#/@!T&(!^$`!T"O]V"/\VZ.'9``#_-NBE(@(`68M-]&2)#0````!>
+MB^5=PU6+[&2A`````&K_:($?0P!09(DE`````%:+\8,^`'0;@'X0`'0-BT8(
+M`\!0_S;HE]D``/\VZ%LB`@!9BTWT9(D-`````%Z+Y5W#5HOQ@+ZX(0```,<&
+MN#5#`'0@5XN^O"$``(7_=!2+S^CDG```:/""``!7Z,/.`0!965^-COA5``#H
+M,O___XV.J#(``.@G____C8[H(```Z"BT``"-CB@0``#H\4D``(O.7NDW@0``
+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
+MBT<8BW<<*\8/A`T&``"%T@^/!08``'P(.\@/A_L%``"-+`Z+SXEL)"CH<:<`
+M`"MO'(OPB\(SR8E$)"2)3"0@#XS6!0``?PB%[0^"S`4``(-[!`$/A8(```"#
+M_@%U?87`=7F+S\9#'@'H,J<``(E$)!RH`70OB\_H(Z<``(O("\IT'HM,)!B+
+MB:!L```#R(M$)!B+@*1L```3PHE+((E#)(M$)!RH`G0KB\_H\*8``(O("\IT
+M'HM,)!B+B:!L```#R(M$)!B+@*1L```3PHE+,(E#-(M,)""+1"0D@WL$`G0*
+M@WL$`P^%&P4``(7`#X<3!0``<@F#_@</AP@%``"#[@$/A*<#``"#[@$/A'<#
+M``"#[@$/A/$!``"#[@$/A(L!``"#[@$/A`0!``"#[@%T.X/N`0^%S00``(-[
+M!`-U#XM'&"M$)"B#^`%U`X/%`8VS*!```%6+SN@8_?__5?\VB\_HFZ4``.F;
+M!```B\_H+:8``(O(B40D','I`HVK""$``(#A`8B+!B$``(O(P>D#@.$!B(L'
+M(0``QH,((@```,9%``"H`70EB\_H\:4``(OPN/\````[\'("B_!658O/Z#VE
+M``"+1"0<Q@0N`*@"=">+S^C(I0``B_"X_P```#OP<@*+\%:-JP@B``"+SU7H
+M#J4``,8$+@"`NP8A````=`V+S^B8I0``B8,((P``@+L'(0```'0-B\_H@J4`
+M`(F##",``,:#!2$```'IUP,``(O/Z&FE``"+SXF#`!$``.A<I0``)`&+SXB#
+M!"$``.A-I0``B_#&A"3``````('^_Q\``',85HV$),0```"+SU#HC:0``,:$
+M-,``````:``@``"-A"3$````4%#H4)L``&@`"```C8,$$0``4(V$),@```!0
+MZ%OS``#I60,``(7)#XQ1`P``?PF#_0$/@D8#``"+S^C8I```B\_HT:0``(7`
+M#X0P`P``4&AT-D,`C40D.,:#\Q````%J%%#H6QL``(/$$(U$)#!H``@``%"-
+M0RA0Z+_<``#I_`(``(7)#XST`@``?PF#_04/@ND"``"+S^A[I```B$0D$R0!
+MBDPD$XK1B$0D%(#B`HA4)!5T-8O/A,!T%>A7HP``:@!0C8M`$```Z/+K``#K
+M$NB$HP``4E"-BT`0``#H'>P``(I,)!.*1"04@.$$B$PD%G0MB\^$P'05Z!FC
+M``!J`%"-BT@0``#HM.L``.L2Z$:C``!24(V+2!```.C?ZP``BD0D$XK(@.$(
+MB$PD%W0T@'PD%`"+SW05Z-JB``!J`%"-BU`0``#H=>L``.L2Z`>C``!24(V+
+M4!```.B@ZP``BD0D$X!\)!0`#X00`@``J!`/A`@"``"`?"05`'0GB\_HDZ(`
+M`+W___\_O@#*FCLCQ3O&<QIJ`%"-BT`0``#HV^<``.L*O?___S^^`,J:.X!\
+M)!8`=!N+S^A;H@``(\4[QG,.:@!0C8M($```Z*WG``"`?"07``^$HP$``(O/
+MZ#6B```CQ3O&#X.2`0``:@!0C8M0$```Z(/G``#I?P$``(O/Z!&C``"%P`^%
+M<`$``&H@C8-T$```QX-P$````P```%#IL?S__XO/Z.JB``"%P'0L4&A4-D,`
+MC40D.&H44.A_&0``BTPD*(U$)$"#Q!!0C4,H4.@5&0``Z2$!``"+S^BSH@``
+MBLC1Z(#A`20!B(O!$```B\^(@\H0``#H2J$```^VP(F#[!```(/X&'8G4&A<
+M-D,`C40D.&H44.@B&0``BTPD*(U$)$"#Q!!0C4,H4.BX&```:A"-@Z$0``"+
+MSU#HM*$``&H0C8.Q$```B\]0Z*2A``"`N\$0````#X2$````:@B-L\(0``"+
+MSU;HAZ$``&H$C40D,(O/4.AYH0``C40D6%#HR]0``&H(5HU$)&!0Z`35``"-
+M1"0P4(U$)%Q0Z+[3``!J!(U$)#10C40D-%#HEMD!`(/$#/?8&L#^P(-[!`.(
+M@\$0``!U&FH(:&@V0P!6Z'39`0"#Q`R%P'4&B(/!$```QH.@$````<>#G!``
+M``4```#&@YL0```!BTPD*(E/'(M'&"O!@_@"#X/*^?__7EU;7X'$L"```,(,
+M`%6#[%RXR1]#`.C9O0$`N"0@``#HJ[X!`%-6B]F-32174XE=(.C3GP``,\EJ
+M!XE-'(E-_%\XB[QL``!T<(N3P&P``#/``]<3P3F#I&P``'Q<?P@YDZ!L``!V
+M4HO+QD5?`>B3%0``BP.-311J"%&+<`R+SO\58#)#`(O+_]:#^`AU/3/)C444
+M45%145"+@[PA``"-LR@0```%)%```%!J!%&+SNBU.0``B75$ZP.(35]7C4TD
+MZ$^A``"#?3P`=0R+R^C'%@``Z;()``"-323H<)\```^WP(U-)(F#Y"$``,:#
+M]"$```#H0)\``(U-)`^V\.A-GP``#[?`C4TDB8/L(0``P>@.)`&(@_0A``#H
+M,9\```^WR(F+\"$``(FSZ"$``#O/<PR+R^@[]___Z4P)``"#[G-T,X/N`70B
+M@^X&=!&#[@%U+L>#Z"$```4```#K(L>#Z"$```,```#K%L>#Z"$```(```#K
+M"L>#Z"$```$```"+@^@A``")@]PA``"#^'5U!&H&ZQ*#^`%U"?:#["$```)U
+M[HU!^5"-323H9J```/^S\"$``(O+Z"GP__^+BZ!L```#R(N#I&P``(F+J&P`
+M`(N+Z"$``(/0`(F#K&P``(E-4(/Y`0^$'0<```^.[08``(/Y`P^.C````(/Y
+M!0^%VP8``(V[D$4``(VSY"$``/.EBH.810``BY.810``)`&(@ZQ%``"+RHO"
+MT>G!Z`*`X0'!Z@,D`8#B`8B+K44``(B#KD4``(B3KT4``(3)=`Z-323H+IX`
+M`(F#I$4``("[KT4````/A&`'``"-323HWIT```^WP(F#J$4``(F#V&P``.E$
+M!P``,\"#^0)J``^5P(UX_X'GL-S__X''T$4```/[B\^)?4CH&(0``&H%68VS
+MY"$``#/2\Z6+=4A"BWU0BD8(BTX((L*(AI@0``"+P='H(L*(AID0``"+P<'H
+M`B+"B(:;$```B\'!Z`HBPHB&H!```(/_`G4+]L$0=`:+PC/2ZP0STHO"B(;P
+M$```@_\"=`KVP1!T!3/`0.L"B\*(AOH0``"XX````"/(.\@/E,"(AO$0``"!
+M^>````!U!XO"BU8(ZQ*+5@BX```!`(O*P>D%@^$'T^")AO00``"-322+PL'J
+M"\'H`X#B`20!B);S$```B(;R$```Z`>=``"-322)1A3H_)P``(U-)(E%5.BD
+MG```C4TDB$88QX9P$````@```.C<G```C4TDB89T$```Z,Z<``"-322)11CH
+M=IP```^VR(E.'(U-).AHG```+#"-322(1B#H<YP```^WP(U-)(E%3.B:G```
+MBU8<B458B48D@_H4<PNH$'0'QH;Q$````3/)B8Z<$```.(Z;$```=$.#Z@UT
+M-$J#Z@%T(H/J!701@^H&=`S'AIP0```$````ZR+'AIP0```#````ZQ;'AIP0
+M```"````ZPK'AIP0```!````BD88QX;\$````@```#P#=!`\!70,/`9S$HF.
+M_!```.L*QX;\$````0```(F.`!$``#P#=2*+15@E`/```#T`H```=1,SP,>&
+M`!$```$```!FB88$$0``@_\"=`HY3B1]!3/`0.L"B\&(AO@0``"+1@C!Z`@D
+M`8B&^1```'0LC4TDZ*B;``"-322+^.B>FP``@WU4_XO0=0R#^O]U!S/`0#/)
+MZQ$SR8O!ZPN#?53_B]&+^0^4P(B&FA```#/``T84B898$```$_DSP`-%5(F^
+M7!```!/1B89@$```@+Z:$````(F69!```'01N/___W^)AF`0``")AF00``"+
+M14R__Q\``(E]5#O'<P6+^(E%5%>-A=#?__]0C4TDZ'&;```SP(-]4`*(A#W0
+MW___=78SR8U^*&:)#_=&"``"``!T/XU-`.@O/@``C870W___4.CW"P(`BU54
+M0%D[T'8@:``(``!7B\HKR%&-C=#?__\#P5"+P8U-`%)0Z`L^```SP&8Y!W44
+M:@%H``@``%>-A=#?__]0Z-#0``!6B\OHP_+__^E6`0``C48H:``(``!0B450
+MC870W___4.@@Z0``BWX,*WU,@^\@]T8(``0``'0#@^\(A?\/C@8!``"-AB@0
+M``!7B\B)15CH&?+__U?_MB@0``"-323HEYH``&@X-D,`C7XH5^C\"@(`65F%
+MP`^%T0```(.^+!```!0/@L0```"+15B+.`^V1PN9B\B+\@^V1PH/I,X(F<'A
+M"`/(#[9'"1/RF0^DS@C!X0@#R`^V1P@3\ID/I,X(P>$(`\B+P1/RB\X/I,$)
+MP>`)B8/`(0``BP.)B\0A``"+<!2+SO\58#)#`(O+_]:+\HOX5E?_L\0A``#_
+ML\`A``#H=L\``%97:@!HR````%97B8/((0``B458Z!:W`0`#@\`A```3D\0A
+M``!24.A*SP``BTU8BW5(BWU0.\%^#HU!`8F#R"$``.L#C7XH:#`V0P!7Z!8*
+M`@!9687`=0?&@[9L```!]T8(``0``'01:@B-AJ$0``!0C4TDZ'R9``#_=1B-
+MCD`0``#H6.```/=&"``0```/A-X```"-323HPI@```^WR(V#P#(``(E%!(V#
+MR#(``(E%"(V#T#(``(E%##/`B_")11"+P8EU3(E%6&H#62O.B]C`X0+3Z_;#
+M"`^$@0```(-\M00`='J%]G02C4TDZ**8``"+3+4$4.CDWP``BTRU!(U%T%#H
+M`=X``/;#!'0#_T7D,\F)3>B#XP-V+VH#6"O#P>`#B448B_"-323H%Y@``(O.
+M#[;`T^"#Q@B+3>@+R(E-Z(/K`77ABW5,:\%DBTRU!(E%Z(U%T%#HX=\``(M%
+M6$:)=4R#_@0/C%W___^+72"+=4@SP%!0_[9<$```_[98$```_[.L;```_[.H
+M;```Z!$.``")@ZAL``"-322)DZQL``"*AO(0``"(12#_=2#HD9@```^WP#D&
+M#X0:`0``:@&Y4`]$`,:#Q&P```'HF#\``(!]7P`/A?T```!7C4,D4&H<Z#H]
+M``#I[````/>#["$```"````/A-\```"-323HCY<```&#J&P``(.3K&P```#I
+MQ0```(V[""(``(O/Z$A^``!J!5F-L^0A``#SI8U-).@HEP``C4TD9HF#'"(`
+M`.A.EP``BHL0(@``B]"`X0&)DR`B``"(B[5L``"+BQ`B``#!Z0.`X0&(B[1L
+M``"+BQ`B``"+P<'H`B0!B(.W;```B\'!Z`8D`8B#NVP``(O!P>@')`&(@[QL
+M``"%TG4+,\!F.8,<(@``=`,SP$"(@[AL``"+P='H)`&(@R0B``"+P<'H""0!
+MP>D$@.$!B(.Y;```B(NZ;```:@=?:@"-323H7Y<```^WP#F#Y"$```^$G@``
+M`(N#Z"$``(/X>0^$CP```(/X=@^$A@```(/X!753@+NN10```'1*BP.+<!2+
+MSO\58#)#`(O+_]:+,S/)*\=1&]&+3A!24/\58#)#`(O+_U80QD5>`8O+Z%UI
+M``#VV!K`]M`B15Z(15Z#[P%UZ(3`=2YJ`[E0#T0`QH/$;````>CR/0``@'U?
+M`'05C4,D4%!J!.B8.P``QH/%;````>L&BT4\B44<C4TDZ-'C__^+3?2+11Q?
+M7EMDB0T`````C65@7<-5@^QHN-L?0P#H0+,!`+AH(```Z!*T`0!35HO9C4TP
+M5U/H/94``#/)B4U@B4W\.(N\;```#X10`0``BY/`;```,\"#P@@3P3F#I&P`
+M``^,-P$``'\,.9.@;```#X8I`0``BP.-31AJ$%'&16H!BW`,B\[_%6`R0P"+
+MR__6@_@0#X47`0``BX.\(0``@+@D40```'4-Z,_C``#&16L`A,!T!,9%:P&+
+MR^BS"@``C44H,\E04?^S8"(``(U%&%"+@[PA``"-NV0B``!7!210``"-LR@0
+M``!0:@51B\[HXRX``("[7"(```!T?8V#="(``&H(4(U%*%#HF<T!`(/$#(7`
+M=&2`?6L`C4,D4%!U7FB`````Z%4Z``"+B[PA``"!P210``#HU+H``(O+Z#`*
+M``"-12@SR5!1_[-@(@``C4484(N#O"$``%<%)%```%!J!5&+SNAL+@``@+M<
+M(@```(V#="(``'6)B750ZR)J!NCZ.0``:@NY4`]$`,:#Q6P```'H+SP``.F$
+M!@``B$UJ:@>-33#HUY4``(/X!W,,B\OH4`L``.EF!@``C4TPQH/T(0```(V[
+MY"$``.@AE```:@2-33")!^B!E0``C4TPB_#H"Y4``(O("\H/A"H&``"%]@^$
+M(@8``(U._8/&!`/P`\B)=60/B`\&``"#_@</@@8&``!1C4TPZ&25```Y=4AR
+MC8U-,.BGE```C4TPB_#HO90``(U-,(F#Z"$``.BOE```B8/L(0``P>@")`$Y
+M-XB#]"$``(M%9(F#\"$``(N#Z"$``(F#W"$```^5P(A%:X3`=#B+R^AEZ___
+M:@.Y4`]$`,:#Q&P```'H.3L``(!]:@!T&(U#)%!0:@3HWS@``,:#Q6P```'I
+M=04``#/`]H/L(0```8E%6(E%5'0HC4TPZ"R4``"+R(E55#/`B4U8.]!R$@^'
+M004``#N+\"$```^#-04``/:#["$```*+\(EU9(E%7'00C4TPZ/.3``"+\(E%
+M9(E57/^S\"$``(O+Z#[D__^+BZ!L``!J`%I24O]U7`/(BX.D;```5A/"4%'H
+MSP@``(F#J&P``#/`B9.L;```0(N3Z"$``#O0#X0%!```#XZ\!```@_H##XXZ
+M`0``@_H$=#V#^@4/A:4$``!268V[D$4``(VSY"$``/.EC4TPZ&R3```D`8B#
+MK$4``#/`9HF#KD4``(B#K44``.EQ!```:@59C;M((@``C;/D(0``\Z6-33#H
+M-Y,``(7`="A0:$`V0P"-10!J%%#HS0D``(/$$(U%`(O+4(U#)%#H9@D``.D[
+M!```C4TPZ`.3```D`8U-,(B#7"(``.BFD0``#[;`B8-@(@``@_@8=@A0:$@V
+M0P#KL&H0C8-D(@``4(U-,.@ND@``@+M<(@```'1?:@B-LW0B``!6C4TPZ!22
+M``!J!(U%9%"-33#H!I(``(U%C%#H6<4``&H(5HU%C%#HD\4``(U%"%"-18Q0
+MZ$_$``!J!(U%"%"-1610Z"G*`0"#Q`SWV!K`_L"(@UPB``#&@[QL```!Z7D#
+M```SP(/Z`FH`#Y7`C7C_@>>PW/__@<?010```_N+SXE]+.AQ=P``:@59C;/D
+M(0``\Z6+@^@A``"-33"+=2R)16"+162)AE@0``"+15S&AOD0```!B89<$```
+MZ/N1``"-33")AI00``#H[9$``(F&8!```(N&E!```,'H`R0!B99D$```B(::
+M$```=!&X____?XF&8!```(F&9!```(N.7!```(N^9!```(N&6!```(N68!``
+M`#O/?`9_"#O"=P2+PHO/B8YL$```C4TPB89H$```Z(.1``#VAI00```"B48D
+M=!:-33#H;Y```&H`4(V.0!```.@*V0``@Z9P$````/:&E!````1T&(U-,,>&
+M<!````(```#H/Y```(F&=!```(.F`!$```"-33#H*I$``(O(B45DP>D'@.$'
+MB$X@B\B#X3^#P3*)3AR#^3)T!\=&'`\G``"-33#H_9```(U-,(A&&.CRD```
+MBXOL(0``,]+!Z09"B_C'AOP0```"````BD88(LJ(CO@0```ZPG4(B9;\$```
+MZPN$P'4'@Z;\$````(M."(O!P>@#(L*(AI@0``"+P<'I!<'H!"+*(L*(COH0
+M``"#?6`"BTUDB(:9$```=0GVP4!T!(O"ZP(SP(B&\!```(J&E!```"+"P>D*
+MB(;Q$```@^$/#[;`N@```@#3XO?8&\#WT"/"B8;T$```#[:&FQ```/?8&\"#
+MX`6)AIP0``"X_Q\``#OX<@*+^%>-A8S?__]0C4TPZ'V/``#&A#V,W___`(V%
+MC-___V@`"```C7XH5U#H8MX``(M-6(O!"T54=`U648U%,(O+4.CJY___BT5@
+M@_@"=1!6B\OH"^?__XM%8(/X`G08:#`V0P!7Z)G_`0!9687`=0?&@[9L```!
+M@'UK``^$S@```%>-0R10:ASH+S0``.F]````C8L((@``Z&EU``!J!8OWC;L(
+M(@``6?.EC4TPZ'R/``"+T#/`0(K*(LB(B[5L``"+RL'I`B+(B(NT;```B\K!
+MZ00BR(O"B(NW;```,\G!Z`-!(L&(B[IL``"(@[ML```SP(B#N&P``/;"`G05
+MC4TPZ"B/``")@]AL```SR3/`0>L&B8/8;```@+NU;````'0(.8/8;```=`*+
+MR(B+N6P``(M-6(O!"T54=!.-@P@B``!048U%,(O+4.CBYO__BT5(B45@ZP>+
+MR^B_Y?__C4TPZ*;;__^+3?2+16!?7EMDB0T`````C65L7<-7B_F`O\5L````
+M=`0SP%_#BP=6BW`4B\[_%6`R0P"+S__6B8>@;```,\F+A[!L``!(B9>D;```
+M7H/H`70.@^@!=4&+S^B,]___ZP>+S^CJ[/__B\B%R70KBX>L;```.X>D;```
+M?QE\#HN'J&P``#N'H&P``'<)B\_H)>7__S/)A<EU"L>'W"$``/\```"+P5_#
+MN/`?0P#HB*H!`+C@Y@``Z%JK`0!6B_&`OL1L````=!R-1B10:AWH5#(``&H#
+MN5`/1`#HP30``.E4`@``@+[P10``!0^'/`(``#/`@[ZP;````P^5P$B#X!6#
+MP!TYANQ%```/AQT"``"+ABA6```+ABQ6``!U#SB&:58``'4'L`'I#0(``%.-
+MGN@@``!7B\OHU(\``%.-C109___H,.```#/;C8T4&?__4_^VQ%8``(E=_.@E
+M\P``BWT(.5T,=5,YGC16``!\'G\,@;XP5@```````780C48D4&H>Z)\Q``#I
+MCP$``(7_=0G&AA$A```!ZR#_MC!6``"+S^CXX____[8P5@``C8[H(```_S?H
+M)I```#B>:U8``'1:BY:\(0``.)HD40``#X1(`0``#[:.<%8``(V&DE8``%"-
+MAIM6``#WV5#_MKQ6``"-AH%6```;R5"-AG%6```CR(V")%```%%0_[9L5@``
+MC8[H(```4^A?CP``:@'_MD!6``"-CJ`A``#H+W```(N&*%8``(V.Z"```/]U
+M#(F&""$``(N&+%8``%:)A@PA``"(GA`A``#H9X\``(I%$(V.Z"```(B&$2$`
+M`(J&:58``(B&-R$``(V&T$4``(E!.(E9/(N&,%8``(N6-%8``(F%7&7__XF5
+M8&7__XB==&7__SB>\$4``'4*4E!1Z*Q7``#K$E/_MNQ%``"-C109___H;NX`
+M``^VEII6``"-AIM6``#WVHV.H"$``!O2(]"-AD!6``!24.A!;P``A,!U*XV&
+M^$4``%"-1B10:A_H5S```&H#N5`/1`#HDS(``(7_=`N+S^BF````ZP*S`8V-
+M%!G__^BNX```7XK#6^L-C48D4&H>Z.\O```RP(M-]%YDB0T`````B^5=P@P`
+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
+M9@]N;"0$#RC@9@]RT`QF#W+T%&8/[^!F#VY$)"AF#V+H#RA$)%AF#V+I9@_^
+M[V8/_NQF#^_%#RC89@]RT`AF#W+S&&8/[]@/*--F#W#;.68/_M8/*,)F#^_$
+M#RC(9@]RT`=F#W+Q&68/[\AF#W#"3F8/[\5F#W#)DV8/[T0D:&8/[]EF#^]<
+M)#@/*0"+10B+@/0````/*5@0,\"+Y5W""`!6BW0D"%>#O@`!``!`=D6+AO@`
+M``"#`$"+CO@```"#.4`;P/?8`4$$_[;P````5N@HZ?__BX[P````@X8``0``
+MP/^V``$``(U!0%!1Z%V@`0"#Q`R+AO@```"+E@`!```!$(N.^````#D1&\#W
+MV`%!!("^!`$```!T"HN&_````(-(!/^+AOP````S_X,(_[B`````BXX``0``
+M*\%0BX;P`````\%74.BBG@$`@\0,_[;P````5NBAZ/__BTPD$(N&]````(L$
+M!XD$#X/'!(/_('SL7U[""`"#/="!1``"?!P/*`50-T,`#RD%D.Y#``\H!4`W
+M0P`/*06@[D,`5HMT)`B+SNB)`P``,]*+CO0```"+@B`W0P")!`J#P@2#^B!\
+MZ8N&]````($P(``(`HN.]````(M$)`PQ00B+CO0```"+1"00#0`@``#!X!`Q
+M00Q>P@P`45>+?"04A?\/A+(```!358ML)!A6BW0D&(N.``$``+N`````BX;P
+M````*]D#P8E\)!`[^W9F4U50Z!R?`0"+AO@```"#Q`P!G@`!``"#`$"+CO@`
+M``"#.4`;P/?8`4$$@SW0@40``O^V\````%9\!^AH[/__ZP7HC.?__XN.\```
+M`&I`C4%`4%'HS)X!`(.&``$``,"#Q`PK^^L75U50Z+:>`0`!O@`!``"#Q`R+
+M7"00,_\#ZX7_#X5<____7EU;7UG"#`"![``!``!35597B[PD%`$``(UL)!`S
+M]HO?BX=("P``.\9V&BO&@_A`=@-J0%A0C8=("0```\904^C^_O__55/HH_W_
+M_X/&0(/%(('#"`$``('^``(``'+!:@B!QT`(``"-="046VH@5E?HS?[__X/&
+M((/K`77O_[0D&`$``%?H9/W__U]>75N!Q``!``#""`!355:+="00,^U7:``"
+M``!5C89("0``4.B)G`$`@\0,B:Y("P``C89`"```:@%54.C[_?__B_V+WE57
+M4^CO_?__1X'#"`$``(/_"'+L7\:&1`D```'&ACP(```!7EU;P@0`@^QX4XN<
+M)(0```!5BZPDA````%:^``(``%>+A4@+```K\(N\))0```")1"0<B70D((7`
+M=%`[_G),5@5("0```\534.A<G0$`@\0,C;U("0``:@A>:D!75>CM_?__@\=`
+M@<4(`0``@^X!=>F+O"24`````UPD("M\)"`A="0<BZPDC````(E<)!2!_P`0
+M``!S!3/V1NL3B[50"P``@_X&=`6#_@=U`VH$7C/`B40D&(-D)!``A?9T>FG0
+M"`$``(O(P>$&`]4#RXE4)"2-7"0HB4PD((/X"'-6B7L(B4L$B1.#_@%V$XN-
+M3`L``%-HL#]``.@JL```ZP>+R^@1Y?__BT0D&(/##(M,)"!`BU0D)(/!0('"
+M"`$``(E$)!C_1"00B4PD((E4)"0Y="00<J6+7"04BXU,"P``A<ET">@DL@``
+MBT0D&(/X"`^"8?___XOW@>;_`0``*_X#WXM\)!R%]G035HV'2`D```/%4U#H
+M,IP!`(/$#(T$-U]>B85("P``75N#Q'C"#`!6:/````"+\6H`5NBLF@$`@Z8`
+M`0```(/$#,:&!`$```!>P[A(($,`Z/.)`0!15HOQB77PZ`!7``"#9?P`C8X<
+MHP``Z.JE``"-CGRC``#&1?P!Z-NE``"-CMRC``#&1?P"Z,RE``"-CCRD``#&
+M1?P#Z+VE``"-CIRD``#&1?P$Z*ZE``"+SL9%_`7HB0$``(M-](O&7F2)#0``
+M``"+Y5W#Z3"Z__^!P3RD``#II*4``+@$(```Z$**`0!35597:@!J`/^T)"@@
+M``#HT5@``(N,)!@@``"+V.A!I@``O0`(``#IH@```(U$)!!0Z$EB``"+\`^W
+M#E'HSEX``("\)!P@````=`N$P'0;,\!FB0;K%(3`=!!5:+`U0P"-1"084.BQ
+MI```:@!J`(U$)!B+^U#H:U@``(OP9H,^*G4Z#[=.`E'H@UX``(3`="QJ+EAJ
+M7&:)A"04$```6%5FB80D%A```(V$)!@0``!34.B.I```C;PD$!```/^T)"@@
+M``!75NB=4@``A,!U)XN,)!@@``"-1"0055#H1J4``(3`#X5$____7UY=6X'$
+M!"```,(4`+`!Z^]5B^Q6:@;_=1"+\?]U"/]U#(V&?*,``%#HX/[__X3`=`2P
+M`>LP@'T4`'0H@[[THP```'0?:@;_=1"-AMRC``#_=0C_=0Q0Z++^___VV!K`
+M_L#K`C+`7EW"$`"!P3RD``#IR*0``%:+\>@Q5@``,\"-CARC``!FB8;Z@@``
+M9HF&&I,``&:)AO""``")AO2"``"(AOB"``#HN:0``(V.?*,``.BNI```C8[<
+MHP``Z*.D``"-CIRD``#HF*0``(V./*0``.B-I```C8YP80``7ND>X/__45%3
+M55:+="0H5XOYA?9T#(-\)#``=@4SP&:)!HM,)!PSVT-3:@"*@?$0``"-:2B(
+M1"08B\__="08B6PD(%7HZO[__X3`=32!QQRC``"+SXE\)!#H/Z0``(O/ZQ3_
+M="0D55?H-%$``(3`=1N+3"000^B5HP``B_B%_W7A,\!?7EU;65G"&`"+;"0@
+MA>UT$_]T)!17Z+*B``#WV!K`_L"(10"%]G0+_W0D,%=6Z,>B``"+P^O)4U56
+M5VBP[D,`B]GH)`$``+JP\D,`O@`!``"+B@#\__^+^FH'70^VP<'I"#,,A;#N
+M0P")#XV_``0``(/M`77F@\($@^X!==-?7EV+PUO#58OLBU4,4XM="%:+=1"%
+M]G0@]L('=!L/M@H/ML,SR,'K"#,<C;#N0P!"B54,@^X!=>"#_@@/@H<```!7
+MB_[![P,S&H/N"(M2!(O*P>D8B\+!Z!`/ML"+#(VP[D,`,PR%L/)#`(O"P>@(
+M#[;`,PR%L/9#`(O#P>@8,PR%L/Y#`(O#P>@0#[;`,PR%L`)$`(O#P>@(#[;`
+M,PR%L`9$``^VPHM5#(/""(E5##,,A;#Z0P`/ML,S#(6P"D0`B]F#[P%U@%^%
+M]G08#[8*#[;#,\C!ZP@S'(VP[D,`0H/N`77H7HO#6UW"#`"+5"0$,\DY2@1U
+M)U9J"(O!7J@!=`G1Z#4@@[CMZP+1Z(/N`77LB02*08'Y``$``'+;7L($`+B"
+M($,`Z'.%`0!14U97:!!A0`!HD&!``&H$B_EH+`$``%>)??#H7(8!`&@084``
+M:)!@0`!J!&AX`0``C;>T!```,]M6B5W\Z#J&`0"-CYP*``#&1?P!Z/R```!H
+ML`0``%-7B9^8"@``Z*R5`0!HX`4``%-6Z*"5`0!H``0``(V'I`L``(F?L`0`
+M`%-0B9^4"@``Z(*5`0"+3?2#Q"2+QV2)#0````!?7EN+Y5W#S,S,S,S,S,S,
+MS,S,45:+\8ET)`3HOHP``(O&7EG#58OL9*$`````:O]H@1]#`%!DB24`````
+M5E>+^6BP!```5^@*CP``:.`%``"-M[0$``!6Z/F.``!H$&%``&H$:'@!``!6
+MZ-J%`0!H$&%``&H$:"P!``!7Z,B%`0"+3?1?9(D-`````%Z+Y5W#S,SI>HP`
+M`(/L)%-55HMT)#0SVVH@78,^`G5#BT8$5U-34U.)1"0@C40D)%!J!(U$)"A0
+M5?]T)%SHI`8``(E>!(O3B_L/MD04%(O*@^$#P>$#T^`S^$([U7+JB7X$7X,^
+M`W4G4U-34XU$)""#Q@105595_W0D6.AF!@``58U$)!105NB[E0$`@\0,7EU;
+M@\0DP@@`BX&8"@``@\#\@_@!=Q?_="0$@<&<"@``_W0D#/]T)`SHM8,``,((
+M`('L@`$``%-65XN\))@!``"+V8"_``$````/A+L```"+M"24`0``A?8/A*P`
+M``!5O8````")LY@*``!5C40D%(O/4.@%C```58V$)!0!``!0C40D&%#HB[8`
+M`(/N!'0^@^X!=53_M"2P`0``C40D%(O+_[0DL`$``/^T)+`!``#_M"2P`0``
+M_[0DL`$``%!7_[0DL`$``.@T`P``ZQO_M"2@`0``C40D%(O+4%?_M"2@`0``
+MZ#````!5C80D%`$``%#H1(T``&@``0``C40D%%#H-8T``+`!7>L",L!?7EN!
+MQ(`!``#"(`"![!@"``!358O95E>)7"04,_^-LRH!``#_M"0P`@``C8[6_O__
+MZ+F*``"$P'0Q@[PD.`(```!U!8`^`.L<@#X`=!UJ"/^T)#P"``"-1MA0Z)6=
+M`0"#Q`R%P`^$/0(``$>!QBP!``"#_P1RK6@(`0``C80D)`$``%#_M"0\`@``
+MZ+&U``#_M"0T`@``Z$+5`0"+Z`/M@[PD/`(```!9=!YJ"/^T)#P"``"-C"0H
+M`0```\U1Z.B3`0"#Q`R#Q0B-1"1@4.BBE0``,]M5C80D)`$``%"-1"1H4.A=
+ME@``B\.(7"00P>@(B$0D$8O#P>@0B$0D$HU$)!!J`U"-1"1H4.B7E0``]\/_
+M/P``=2]J&%F-1"0X4(V$),0```"-="1DC;PDQ````/.E4.AVE```BD0D2(O+
+MP>D.B$0,*$.!^P``!`!RAHU$)$Q0C40D9%#H490``(M<)!0STFH078UT)!@#
+M\C/)BT043-/H@\$(B`9&@_D@<N^#P@0[U7+@:;NP!```+`$``(NT)#`"``!J
+M0%D#^_.E,\DYC"0X`@``#Y7!9J5I@[`$```L`0``B(P8*@$``(#Y`74C:8.P
+M!```+`$``&H(_[0D/`(```4"`0```\-0Z,B2`0"#Q`Q5C40D'%!I@[`$```L
+M`0``!0H!```#PU#HJ)(!`&F#L`0``"P!``"#Q`QJ`&H!!0H!``!5`\-0Z`:*
+M``!5C40D+%!I@[`$```L`0``!1H!```#PU#H;)(!`(N#L`0``(/$#$"#X`.)
+M@[`$``"-A"0@`0``:`@!``!0Z,J*``"-1"0H4&B`````C40D(%#_M"0X`@``
+MC8N<"@``Z"!_``!5C40D'%#HGHH``%6-1"0L4.B3B@``7UY=6X'$&`(``,(0
+M`&H0:?<L`0``C8,*`0``754#QE"-1"0@4.CFD0$`@\0,C40D&&H`:@!54.A1
+MB0``C8,:`0```\954(U$)#!0Z,"1`0"#Q`SI<?___X'L9`(``%.+G"2``@``
+MB\&)1"0$@_L8#X??`0``558S[8VPM`0``%>+_3F>-`$``'4R_[0D?`(``(O.
+MZ+R'``"$P'0@:A#_M"2(`@``C88"`0``4.BIF@$`@\0,A<`/A*(!``!'@<9X
+M`0``@_\$<KJ^``(``(U$)'164/^T)(@"``#H_;(``#/`B\M`T^!0C40D.%"-
+M1"1<4(U$)"!0:A#_M"28`@``C80DC````%#HM-(!`%E0C80DD````%#HGP,`
+M`%:-1"1X4.AMB0``BU0D$(NT)'P"``!J0(N*E`H``(V:M`0``(O!@^`#:<!X
+M`0```]B-00&)@I0*``"+^XN$))`"``!9B8,T`0``C8,"`0``\Z5J$/^T)(@"
+M``!09J7HDI`!`&H@7U>-1"0D4(VS$@$``%;H?9`!`%>-1"104(V#.`$``%#H
+M:Y`!`%>-1"1\4(V#6`$``%#H69`!`(/$,%5J`5=6Z,F'```YK"20`@``=!57
+MC40D6%#_M"28`@``Z#&0`0"#Q`R+M"24`@``A?9T*&H(55;HNHX!`(/$#(I$
+M+#2+S8/A!S`$,44[[W+O5XU$)#A0Z'Z(``"#O"2(`@```'0G_[0DB`(``(M,
+M)!2-1"08:``!``!0_[0DA`(``('!G`H``.C$?```5XU$)!A0Z$*(``!?7EU;
+M@<1D`@``PB``:B!?5XV&$@$``%"-1"0<4.B=CP$`@\0,C40D%%555U#H"H<`
+M`%>-AC@!``!0C40D/%#H>X\!`%>-AE@!``!0C40D:%#H:8\!`(/$&.D5____
+M@>R\`0``4XN<),@!``!55E=J0%\[WW8]C80D9`$``%#HCI,``%/_M"34`0``
+MC80D;`$``%#HOY,``(U$)%10C80D:`$``%#H=I(``&H@C40D6%OK!XN$)-`!
+M``"+K"3D`0``B40D$(7M=!R+E"3H`0``@#H`=!!J&EF+]8V\))0```#SI>MA
+M,]*%VW0:B_"-1"04*_"-3"04`\J*!`XT-D*(`3O3<NX[WW,6B\>-3"04*\,#
+MRU!J-E'H0XT!`(/$#(V$))0```!0Z.62``!7C40D&%"-A"2<````4.@8DP``
+MBY0DZ`$``(7M=!:`.@!U$6H:68VT))0```"+_?.EQ@(!_[0DW`$``(V$))@`
+M``#_M"3<`0``4.C<D@``C40D=%"-A"28````4.B3D0``BZPD[`$``(7M=!R+
+MA"3P`0``@#@`=!!J&EF+]8V\)/P```#SI>MFA=MT'HM4)!"-1"04*]`S]HU,
+M)!0#SHH$"C1<1H@!._-R[H/[0',7:D!8*\.-3"044`/+:EQ1Z'",`0"#Q`R-
+MA"3\````4.@2D@``:D"-1"084(V$)`0!``!0Z$22``"+A"3P`0``A>UT%H`X
+M`'41:AI9C;0D_````(O]\Z7&``%J((U$)'A0C80D!`$``%#H#Y(``/^T).`!
+M``"-A"0``0``4.C$D```7UY=6X'$O`$``,(D`%6-;"2H@>R0`0``4U:+=6Q7
+M:D!8._!S`HO&4/]U:(U%N%#H+XT!`(/$#,=$-;@````!,\!04%!0C44<4(U&
+M!%"-1;A0_W5D_W5@Z*;]__]J(%M3C44<4(U%_%#H]HP!`(M%?(/$#$C&158`
+MB45(,_;&15<`:A!8B45,B450BT5PB44\BT5TB45`BT5XB45$BWPU2(7_=$^-
+M15=0C84P____4(U%5E"-A<C^__]0C4684%.-11Q0_W5D_W5@Z#3]__]3C468
+M4(U%'%#HAXP!`(/$##/)BD0-'#!$#?Q!.\MR\X/O`76Q4XU%_%#_=#4\Z&*,
+M`0"#Q@2#Q`R#_@QRD&I$C46X4.C/A```4XU%_%#HQ80``%.-11Q0Z+N$``!3
+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
+M:!@4``"-3=3H4J'__XMU$#/;:``(``")7?R-A@01``!0C86$[___4.CCC@``
+MC86$[___4.@IQ@$`:@2)1>B-O83O__^+QVCT-T,`4.B&Z`$`@\00]]@:P/[`
+MB47PA,!T-&H$C;V,[___B\=H`#A#`%#H8>@!`(/$#(7`=1AJ7%AFB86$W___
+MC;V2[___C86&W___ZP:-A83?__]74.@3Z`$`C86$W___4.BTQ0$`BWT,@\0,
+MB47LBT4(.)B780``=3PX7?`/A2\#``"-A@01``!0Z"I'``"$P`^%&P,``(V&
+M!!$``%!7C48H4/]U".AM!P``A,`/A/\"``"+10@/MH!'80``4&H!5^C`+@``
+M5^@^,```A,!T'5?H2#```%#HD#```%>$P'0'Z'XO``#K!>C*+P``.)[Q$```
+M#X6V````.)X$(0``#X6J````4VB`````:@%34V@```!`5_\5)#!#`(/X_W40
+M5[E0#T0`Z,'Z___I@@(``%#_%1@P0P"+A@`1``"#^`,/A8P```"+3=2+5>B+
+M1>P#PL<!`P``H(TT$F:)<0J-!$4,````9HE!!#/`B4$&C86$[___4(U!$%#H
+M[^8!`(U&`HMUU&:)1@R+1>P#P&:)1@Z-A83?__]0BT7H@\`)C01&4.C&Y@$`
+M@\00Z:$```!35_\5'#!#`(7`#X5X____5U-J%.A!^?__N5`/1`#IK0```(/X
+M`G0)@_@!#X72`0``BTW4BU7HBT7L`\+'`0P``*"--!)FB7$*C01%$````&:)
+M000SP(E!!HV%A.___U"-0110Z%7F`0"-1@*+==1FB48,BT7L`\!FB48.C86$
+MW___4(M%Z(/`"XT$1E#H+.8!`(M%\(/$$`^VP(/P`8E&$%-H```@`FH#4U-H
+M````P%?_%20P0P"+R(E-\(/Y_W4;OE`/1`!7B\[H;_G__XO.:@GHR_K__^DG
+M`0``4XU%T%`/MT8$4U.#P`A05FBD``D`4?\5$#!#`(7`=7;_=?#_%1@P0P!7
+M4VH5Z$SX____%0`P0P"#^`5T!STB!0``=1OHOHT``(3`=1)J&(U-A.A"H/__
+MC4V$Z+2;``"^4`]$`(O.Z*/Z__]J"8O.Z%+Z__^+=1!7.)[Q$```=`O_%2`P
+M0P#IG````/\5*#!#`.F1````C8U<S___Z"$B``#_=?"-C5S/___&1?P!Z/P&
+M``"+70B+=1"+B]AR``#WV8V&4!```!O)(\B-AD@0``!1BXO4<@``]]D;R2/(
+MC89`$```48N+T'(``/?9&\DCR%&-C5S/___H$2D``(V-7,___^AT(@``@+NH
+M80```'4)_W8D5^@I,```C8U<S___LP'HU2$``(U-U.B?G___BTWTBL-?7EMD
+MB0T`````B^5=P@P`N%,A0P#H$F\!`+A@$```Z.1O`0`SP%>)1>")1>2)1>B)
+M1>R(1?"+?0B+SU!0B47\C47@4.A1Q/__A,`/A,H```"`/;(.1```=29H:#=#
+M`.@X!@``A,!T!\8%L0Y$``%HD#=#`.@C!@``Q@6R#D0``8`]L0Y$``!6:@=>
+M=`-J#UY3BUW@4U;_=0S_%0`@1@"%P'5V:``(``"-A93O__]0_W4,Z'U!``"$
+MP'034U:-A93O__]0_Q4`($8`A<!U2_]U#(U')%!J4NAN]O___Q4`,$,`OU`/
+M1`"+\(O/Z.KX__^#_@5U&^C9BP``A,!U$FH8C4V4Z%V>__^-393HSYD``&H!
+MB\_H>?C__UM>C4W@Z'>>__^+3?1?9(D-`````(OE7<((`%6+[(/L3%;_=12+
+M=1!65NCO1P``5NC]*P``A,!U+/]U#&H6Z+WU__]J%XU-M.C_G?__C4VTZ'&9
+M``!J";E0#T0`Z!CX__\RP.M-BT4(4P^V@$=A``!0:@'_=0SH,RH``&H`5O]U
+M#/\5+#!#`(7`#Y7#A-MU'_]U#&H6Z&;U__^^4`]$`(O.Z!OX__]J"8O.Z,KW
+M__^*PUM>B^5=PA``N,H@0P#H4&T!`+C(8```Z")N`0!35HMU##/`5V8Y!G0M
+M9CE&`G4GOP((``"-A>SO__]7:&`W0P!0Z/F(``!75HV%[.___U#HPX@``.L3
+MOP((``"-A>SO__]75E#HUH@``(M="(V%?+___V@`"```4%/HC0$``&:#O7R_
+M__\Z=!U6C4,D4&I3Z.ST__]J`[E0#T0`Z"CW___I+`$``(!]$`!T+(V-+)__
+M_^@.'P``:@&-A2R?__\S_U!7B\N)??SH!,+__XV-+)___^GU````5XV%?+__
+M_U"-A>SO__]0Z"R(``"-C7S/___H,?C__S/_C85\S___5U!6Z,$M``"+C83?
+M__^(1?/VP0%T"H/A_E%6Z"<M``"-C<3?___HFQX``&H1C87L[___QT7\`0``
+M`%"-C<3?___H.2<``(3`=!]7C87$W___B\M05^AXP?__A,!T"XV-Q-___^@7
+M'P``C8U4K___Z%(>``"`??,`QD7\`G0S:@56C8U4K___Z-0A``"$P'0AC86T
+MW___4(V%K-___U"-A:3?__]0_[58K____Q44,$,`_[6$W___5NB*+```C8U4
+MK___Z#@>``"-C<3?___H+1X``(M-]%]>6V2)#0````"+Y5W"#`"+1"0,@[BP
+M;````W45!8`B``!0_W0D%/]T)`SH\/?__^L",L#"$`!5B^RX`"```.@F;`$`
+MBT4(5X.XL&P```*+B/A5``"+N/Q5``!U(8M%$-'O2#OX<@*+^%:+=0Q75E'H
+MTIP``#/`9HD$?E[K-KC_'P``._AR`HOX5U&-A0#@__]0Z/-\`0"#Q`S&A#T`
+MX/__`(V%`.#___]U$/]U#%#HSIP``%^+Y5W"#`!145-55E?_="0@Z,@_``"$
+MP`^%Y@```(M\)"A7Z+8_``"$P`^%U````(MT)"0SVXOKB5PD$&8Y'W1>:BZ#
+MQP2+PUEF.4_\=31F.4_^=2X/MP=0Z"5```"$P'4%9CD?=14Y7"00=`X/MT?Z
+M4.@,0```A,!T`46+1"00:BY9@\<"0(E$)!!F.5_\=;B%[7X*5NAT````A,!U
+M9?]T)"#H(/;__XE$)!2+1"0<!1(@``!0B40D%.A*O0$`B_A9A?]T)U?_="04
+M5NBMWP$`@\0,A<!U%8TT?NL#@\8"#[<&4.B:/P``A,!U\%;HU?7__SEL)!1\
+M!SO%?`,SVT.*P^L",L!?7EU;65G"$`!5B^RX2"```.B::@$`_W4(Z.6\`0!9
+MN0`(```[P7($L`'K?U91_W4(C84`\/__4.ATA0``C84`\/__4.BZO`$`68VT
+M1?[O___K2P^W!E#H(3\``(3`=#LSP(V-N-___V:)!N@I]?__:@&-A;C?__]0
+MC84`\/__4.BT*@``A,!T$H"]Q>___P!U'X"]Q.___P!T%H/N`HV%`/#__SOP
+M=ZLRP%Z+Y5W"!`"P`>OU5HMT)`Q7BWPD#("_`6(```!U*H"_E&$```!T(8V&
+M^$4``&@,.$,`4.A7O`$`65F%P'4*_W0D%%;HQOG__XV&^$4``&@4.$,`4.@V
+MO`$`65F%P'42#[:'`6(``%#_="085NA?^___7U["#`#"#`!65XOYBP>+<`B+
+MSO\58#)#`(O/_]:+1"0,B4<$7U["!`!5B^R#[!2-1?Q34&H@,]O_%0PP0P!0
+M_Q4(($8`A<!T2HU%\,=%[`$```!0_W4(QT7X`@```%/_%10@1@"%P'0A4U-3
+MC47L4%/_=?S_%0P@1@"%P'0,_Q4`,$,`A<!U`K,!_W7\_Q48,$,`BL-;B^5=
+MP@0`58OL@^Q,_W4(C4VTZ$68__^+3?2#^0AS,(M%#(E$C;2+3?1!B4WT@_D(
+M<QV+11")1(VTBTWT08E-](/Y"',*BT44B42-M/]%](U-M.A_DP``B^5=PA``
+MN.\@0P#HO&<!`%%14U:+\8EU\%>#)@"-7A"#9@0`B\OH>$P``(M]"#/`@V7\
+M`(E^"&:)AO8```!FB8;X$```(8;D````:.#F``#H-6<!`%F)1>S&1?P!A<!T
+M"E.+R.BAG0``ZP(SP(F&X````(O(_[?@@@``QD7\`.A`R```BTWTB\9?7EMD
+MB0T`````B^5=P@0`5E>+^8NWX````(7V=!2+SNBYGP``:.#F``!6Z`1G`0!9
+M68U/$%]>Z8%,``"+5"0$BT$$.T($=PUR!HL!.P)S!3/`0.L",\#"!`"+1"0$
+MBQ&+200[2`1W$W($.Q!W#3L0=04[2`1T!#/`ZP,SP$#"!`!35HMT)`R#OK!L
+M```#=0R#OIPB```R#Y?`ZPJ#OIPB```=#Y7`@+Z@(@````^4P_[+(MAT&O]T
+M)!"#QB2Y4`]$`%;HW_'__U9J).A@[O__#[;#7H/P`5O""`#H]"\``"T!!0``
+M]]@;P"4```P`!0``!`##N$@0``#H(6<!`%-55HOQ,]M7C4PD$(M&"(B>^"``
+M`&:+@/J"``!FB49<Z.7Q__^-OO8```"]``@``.LJ4XU$)!105^AL)P``A,!T
+M&HN$)!`0```!AI@```"+A"04$```$8:<````BTX(55?HS-W__X3`=<B+3@B!
+MP3RD``#HRH(``.M0.)DG40``=`N!P210``#H9FX``&:)GO(```"+SNAC!0``
+M@_@!=/13C40D%%!7Z/XF``"$P'0:BX0D$!````&&D````(N$)!00```1AI0`
+M``"+3@A55^A>W?__BTX(A,!UGSB9)U$``'0+@<$D4```Z`5N```YGN0```!U
+M/(M&"&:#N/J"``!)="^A4`]$`(/X"W0E.)[X(```=0U7:D3H%>W__Z%0#T0`
+MA<!U#&H*N5`/1`#H>>___U]>75N!Q$@0``##N`00``#HVF4!`%>+^8M'"("X
+M`6(````/A=0!``"`N*AA````4XN<)!`0```/E,!55@^VP(VW^!```/^SI"(`
+M`%!6Z&<C``"+Z(7M#X1!`0``5NC0(@``B$0D$X3`=$Y6Z-8B``!0Z!XC``"$
+MP'4R:@"-@\`R``!0_[/D,@``C40D'_^SX#(``%!H``@``%9J`/]W".@C%```
+M,L"(1"03ZP2*1"03A,`/A<$```"+1P@/MH!'80``4&H!5NCC(```BT<(_[.D
+M(@``@+BH80````^4P`^VP%!6Z-$B``"+Z(7M#X2K````5NA&.0``A,!U>8U#
+M)%!J<NCYZ___:``(``!6C40D'%#HV7\``&H!5NC[.@``5N@-(@``A,!T%%;H
+M%R(``%#H7R(``(3`=`2P`>L\,L"(1"03BT<(#[:`1V$``%!J`5;H6"```(M'
+M"/^SI"(``("XJ&$````/E,`/ML!05NA&(@``B^B*1"03A>UT((3`#X2!````
+MBT<(@+BH80```'4,_[.D(@``5NA9)```QH?W$````8"_]Q````!T3%93_W<(
+MZ*CZ__^+5PB-@]`R``"+BMAR``#WV1O)(\B-@\@R``!1BXK4<@``]]D;R2/(
+MC8/`,@``48N*T'(``/?9&\DCR%%6Z&0B``!>75M?@<0$$```P@@`5HU#)%!J
+M%.@?Z___O5`/1`"+S>BC[?__:@F+S>A2[?__Z7C___^X4!```.BY8P$`4U6+
+MZ;,!BT4(#[>0^H(``(/Z170)@_I8#X4B`0``@+@!8@````^%%0$``%97B[PD
+M9!```(VU^!```&H!C8_`,@``4?^WY#(``(U,)!__M^`R``!1:``(``!6_[0D
+MA!```%#H*A(``(3`#X7/````,MLX7"03#X7#````C4<DN5`/1`!64.@NZ___
+M5NAL(```A,!T)%;H=B```%#HOB```(3`=!1J8HU,)!CH9Y+__XU,)!3HV(T`
+M`%;H2C<``(3`=7R-1R10:G+H_>G__V@`"```5HU$)&A0Z-U]``!J`5;H_S@`
+M`(M%"`^V@$=A``!0:@%6Z(`>``!J`8V'P#(``%#_M^0R``"-1"0?_[?@,@``
+M4&@`"```5O^T)(00``#_=0CH:A$``(3`=`2S`>L/5HU')+E0#T0`4.AZZO__
+M7UY=BL-;@<10$```P@@`5HOQBT8(@+@D40```'4?!210``!0_W0D$&H!Z&F2
+M``"$P'0,BTX(QH$G40```;`!7L((`%%3BUPD&%56BW0D'%>+^5.+1P@%$B``
+M`%!6Z!I]``"+1P@SR042(```B4PD$&8Y"'0D4.@].@``#[<H5>C$-@``A,!U
+M$57HJ#4``(3`=0=35NBI+P``BT<(:CI9@[A<80``!`^WJ/J"``!U&8/]6'44
+M4>A\-0``A,!T"C/`QD0D$`%FB0:#_45T$XM'"(.X7&$```%T!U/_="0@ZPM3
+M_W0D(.CJ.0``4%;H8WP``(M'"("XHV$```!U!E;H"C<```^W!E#H])4``(!\
+M)!``#[?X=#IJ7UMF.5X"=1P/MT8$4.@?-@``A,!T#HU'OV:#^!EW!6HZ6.L1
+M9CD>=1!F.5X"=0IJ7%AFB09FB48"7UY=6UG"$`"X!"%#`.@]8`$`N$R=``#H
+M#V$!`%:+\8V-J&+___]V".APCO__@V7\`(V&]@```%"-C:AB___H3QL``(3`
+M#X0Y`0``:@&-C:AB___H:93__X3`=1%J`;E0#T0`Z$WJ___I%P$``("];<__
+M_P`/A0H!``!35S/;,_\XG5W/__]T>V@`"```C87,8O__4(V%\.___U#HC'L`
+M`#B=8L___^L3`[VH[___$YVL[___@+UBS___``^4P`^VP%!H``@``(V%\.__
+M_U#H\#8``(V-J-___^@VZ___:@"-A:C?__]0C87P[___4.C!(```A,!UL0&^
+MF````!&>G````(V%J&+__XO.4.B/````BT8(:DE:7P^WB/J"``!;@_E4=`5F
+M.\IU!\:``6(```&+1@AF.9#Z@@``=!J`N`%B````C8[V````40^4P`^VP%#H
+M%9```(V-J&+__^BYF/__C8VH8O__Z+^S__^-3?-14(V%J&+__XO.4.B$````
+MA,!UWHV-J&+__^B_C___BTWT,\!>9(D-`````(OE7<-35HOQBTPD#.C3$P``
+MB49H,]N+1@B)5FR)GN@```")GNP````XF"11``!U#>B8CP``A,!U!(O#ZP,S
+MP$"+SHB&]A```(A>7XB>]Q```,:&\0````&(GO0```#H\H<``%Y;P@0`N"0A
+M0P#H05X!`+B@40``Z!-?`0!3BUT(,])7B_F)?>"+1P@/MX#Z@@``B47H.54,
+M=2HX5U]T'%!2C4<04%/HL?\``(3`=1-J`;E0#T0`Z%[H__\RP.F3````,])6
+MB[/<(0``@_X"#X23````@_X#=1V`O_<0````#X03#```C8?X$```4%/_=PCH
+MGO3__X/^!0^%^@L``("[K$4````/A`$,``"+=>@SP%90C4<04%/H/_\``(3`
+M=1%J`;E0#T0`Z.SG___IVPL``(L#,\E1_[.D;```BW`0B\[_LZ!L``#_%6`R
+M0P"+R__6L`%>BTWT7UMDB0T`````B^5=P@P`B)?W$```.9/<,@``?Q9\"#F3
+MV#(``',,B9/8,@``B9/<,@``.9/D,@``?Q9\"#F3X#(``',,B9/@,@``B9/D
+M,@``BT\(.9%@80``=1N+@32C```YA^P```!R#8"_\0`````/A3X+``"^``@`
+M`(A5[5:-A52N__]04FH&C47M4(V#@"(``%#H)]7__X7`#Y7`B$7NA,!T#H!]
+M[0!U"#/`B(?Q````B\OH0I?__U:-A<3N__]0C8.H(@``4.@++```,\E!@+MS
+M,P```(E-Y'13BT<(BX#$<@``.\%T9(!][0!U7H7`#Y3`_L@@1>XSP%"-A<3N
+M__]0Z#4U``"+3PB+B<1R``!).\AU$C/)C87$[O__05%0Z!<U``#K)3/`B$7N
+MZQZ+R^BOE___A,!U$XM'"#/)03N(Q'(``!K`]M`@1>Z*@QDS``"(1U\SP(A'
+M8(N+J&P``"N+V#(``(LS4(N#K&P``!N#W#(``%!1BTX0_Q5@,D,`B\O_5A`S
+MTHK"BLJ(3?*(3=PX1>YU%HJ3M&P``(A5\HA5W(32#X3>"0``,]*+1PB+=>AJ
+M28J(`6(``%B$R70'9COPL`%U`HK"_W7<A,E0#Y3`#[;`4(V%Q.[__U#HL(P`
+M`(3`#X3)"0``:``(``"-A_@0``"+SU")1<B-A<3N__]04^CU^?__,\`X1?)U
+M%68YA_@0``!T#,9%\P$X@Q@S``!T`XA%\XM'"&I%66I8@+A780```%J)3<R)
+M5=!U"8"X6&$```!T=V8[\70%9COR=6V-C53.___HP>;__S/`4(V%5,[__U"-
+MA_@0``!0Z$L<``"$P'0VC8/`,@``4(V-9-[__^CG\___A,!T,H"]8-[__P!T
+M$%>-C63>___HL//__X3`=!DSP(A%\^L2BT<(@+A780````^5P/[(($7SC87$
+M[O__B\]04^C)\___A,!U(FH"N5`/1`#HX>3__XO+Z!J4__^`N[1L````#Y3`
+MZ0;]__^`NQLS````=!>-A<3N__^+SU!3Z+WX__^$P`^$W````(MW"(V]Q/[_
+M_VI`@<8D4```6?.E9J4/MHL@,P``C478BWW@,])0C8-+,P``B57\4/^S;#,`
+M`/?9C8,Q,P``4!O)C8,A,P``(\B-A<3^__]14/^S'#,``(U/$%+H)D```("[
+M&S,````/A),```"`NT$S````#X2&````:@B-1=A0C8-",P``4.C_=`$`@\0,
+MA<!T;8"[Q&P```!U9("_]A````"-A<3N__]0C4,D4'4X:(````#HJ>'__XM/
+M"('!)%```.@K8@``@TW\_XV-Q/[__^BI80``Z03____&A_@@```!Z;<'``!J
+M!NATX?__:@NY4`]$`.BPX___,\"(1?.#3?S_C8W$_O__Z'%A``"-C9S>___H
+MC0L``(N#@#,``,=%_`$```")1=1J4%J%P`^$C0```(/X!0^$A````(I-\XMU
+MZ(3)#X3]````9COR#X3K````BT<(@+@!8@````^%VP```#/`B$7OC8?X$```
+M4.CN%@``A,!T-8!][P!U.3/)C8/`,@``45#_L^0R``"-1>__L^`R``!0:``(
+M``"-A_@0``!04?]W".A*"```@'WO``^$A````#/`BLB(3?/K?HO+Z`B4__^$
+MP'10@'WS``^$G@```(M%Z&:#^%`/A)$```!J25EF.\$/A(4```!J15EF.\%T
+M?8M'"#/)03F(7&$``'1O_X?D````C87$[O__4%.+S^@B\___ZUB*3?.$R70B
+MC86<WO__B\]04^@K]?__BW7HBLB(3?/K`XI-\X3)=4SK`XMUZ("[M&P```!T
+M-C/`0%"(1?*(1?,SP%!0C87$[O__4.@2B0``A,!U(#/`B$7DC8V<WO__Z&$*
+M``"*1>3I7OK__X3)#X3$!0``BT<(@+@!8@```'00QH?W$````8"X`6(```!U
+M28I%\H3`=44SP&I0B$7O6&8[\'1`C8V<WO__Z$\-``"$P'0QC8?X$```4(US
+M)%9J.^B"W___C8?X$```N5`/1`!05NC4XO__ZPN*1?+&1>\!A,!U!O^'Y```
+M`/^'Z````(VS\#(``#/`C8_(````B8>`````B8>$````B8>(````B8>,````
+MBT<(_[#@@@``_S;H)QX``(M'"(V/H````/^PX((``/\VZ!$>``"+@]@R``"-
+M=Q"+B]PR``")1S"-A9S>__]0B4\TB\Y3Z%(]``"*5>\SR8I%\HA7.8A'.HE-
+MW(E-Y(32#X6=````.(O$;```#X61````B[/D,@``BY/@,@``._%\?G\(@?I`
+M0@\`=G2+B]@R``"+@]PR```/I,@*P>$*.\9\6'\$.\IV4C/`._!\(W\(@?H`
+MX?4%<AF+R^B$"P``.Y/<,@``?#-_"#N#V#(``'8I_[/D,@``C8V<WO___[/@
+M,@``Z)<-``"+@^`R``")1=R+@^0R``")1>2*1?(SR8UW$(M7"("ZH&$````/
+ME(6UWO__@'WO`'44A,!U$&I06&8Y1>AT!S/`0(K(ZP,SP$"#?=0`B$WPB$7L
+MB$7Q#X0)`0``B[.`,P``@_X$=&>#_@5T8COP=$*#_@)T/8/^`W0XC8?X$```
+M4(U#)%!J1^B]W?__,\F*P8A%\8I-\,9%[`"$R0^$N0```(3`#X2Q````,\!`
+MZ:L```"$R0^$A````(V'^!```%!3C4<04%+HX>G__^M@:``(``"-A52^__^+
+MSU"-@X0S``!04^CF\___BDWPA,ET3F:#O52^__\`=$2-A52^__]H``@``%"-
+MA_@0``!0@_X$=0K_=PCH&>?__^L2C4,DB\]0C86<WO__4.A>`P``B$7QA,`/
+MA%K___^*3?#K`XI%\8.[L&P```(/A4S___^$R0^%3/___^D[____,\"(A_<0
+M``#K?H"[&#,```!U=8"[H"(```!U%/^SY#(``/^SX#(``%;HQ0,``.M8#[:#
+M<#,``(N/X````%#_LW0S``#HT9T``(N'X````(N+X#(``(N3Y#(``(F(2$P`
+M`#/)B9!,3```B(A@3```#[:#<#,``(N/X````%#_LYPB``#H09H``(O+Z.>-
+M__^`NQDS````=3`/MI-*,P``C8-+,P``]]J-C\@````;TB/0C8/P,@``4E#H
+M!!L``(3`=`:Q`3/`ZP0SP(K(@+MP,P```'4(B(?T````ZR:`NZ`B````=!TY
+M@^0R``!\%7\(.8/@,@``=@N$R70'QH?T`````8!]\@"(1?!U7X!][`!T683)
+M=54XBQLS``!T*#B+03,``'0(.(O$;```=!B`O_0`````=0^-A<3N__]0C4,D
+M4&H$ZPV-A<3N__]0C4,D4&H#Z);;__]J`[E0#T0`QD7P`>C.W?__BD7P@WW4
+M`(I5\701@[N`,P``!'4(A-)T!+$!ZP(SR8!][P`/A4X!``"+=>AF.W70=`IF
+M.W7,#X4[`0``@WW4`'09A,EU%8.[@#,```4/A20!``"$T@^$'`$``(3`=!.+
+M1PB`N*!A````#X0(`0``BD7PA,D/A;X```"+5>0SR3O1BTW<=P2%R70?A,!U
+M$#F/B````'4(.9>,````=`N-C9S>___HR@T``(M7"(VST#(``(V[P#(``(N"
+MV'(``(N*U'(``/?8&\`CQO?94!O)C8/(,@``(\B+@M!R``#WV%$;P(V-G-[_
+M_R/'4.@F#```C8V<WO__Z(D%``#_=<B+1>!3_W`(Z*KI__^+1>"+2`B+@=AR
+M``#WV!O`(\90BX'0<@``C8V<WO__]]@;P"/'4.C>"P``BWW@BT<(@+BH80``
+M`'4L_[.D(@``C;?X$```5NCU$@``A,!U%E:-0R10:A'H(-K__[E0#T0`Z*;<
+M___&A_<0```!@TW\_XV-G-[__^A^!```@'WN`(I%\XI5\G0&_X?L````@']@
+M`'4DA,`/A6'T__\X@[1L``!U#(O+Z%F+___I3?3__X32#X5%]/__,L#I0/3_
+M_[A!(4,`Z)51`0"X/!```.AG4@$`4_]U&/]U%/]U%.B'*P``C8VX[___Z-,#
+M``#_=10SVXV-N.___XE=_.BA#```A,!U'/]U$/]U%/]U#&H2Z"WI____=0QJ
+M$^@MV?__ZT-H```0`(U-X.A=?___QD7\`>L,BTT(4/]UX.B:#```Z!UU``#_
+M=>2-C;CO____=>#H10D``(7`==J-3>"S`>AI@?__C8VX[___Z(P#``"+3?2*
+MPUMDB0T`````B^5=PA0`N%,A0P#HTU`!`(/L%%;H8NK__U"-3>#H[7[___]U
+MY(M-"/]UX(-E_`#HRS<``(OPA?9^1%.+71!7BWT,B\:9.]-_!GP&.\=R`HOW
+MA?9^$XM-"%;_=>#H@SD``(O&F2OX&]K_=>2+30C_=>#HB3<``(OPA?9_QE];
+MC4W@Z,N`__^+3?1>9(D-`````(OE7<(,`%-55E>+?"0DA?]T`\8'`(MT)!PR
+MVU;H4`X``(ML)!CK5X3;=0Q6_L/HJP```(3`=4$SP#+;A>T/E,!0_W0D-/]T
+M)#3_="0T_W0D,%;_="0LZ)]_``"%P'0C@_@!=#^#^`9U#VC_````N5`/1`#H
+MZ=C__U;H\PT``(3`=:4SVSA<)#0/E<.#PQ&%[70<4U:+S>@A`P``A,!T#[`!
+MZS2%_W0#Q@<!,L#K*8M$)!0/MH!'80``4&H!5N@K#```A>UT"U-6B\WH[0(`
+M`.L&5NA'#0``7UY=6\(D`+AH(4,`Z&I/`0"X+%```.@\4`$`4U:+=0B-A<B_
+M__]7NP`(``!34%;_%30P0P"%P`^$BP$``#O##X.#`0``4XV%R*___U!6_Q4P
+M,$,`A<`/A&P!```[PP^#9`$``(V%R+___U#H0"@``(E%\(V%R*___U#H,2@`
+M`(OX,]MF.1\/A#P!``!7_W7PZ%:$``"%P`^$*P$``%=6Z`PH``!0Z$&$``"%
+MP`^%%@$``&:)A?#O__^+^V:%P'5H:``(``!6C87P[___4.B&:@``5V@<.$,`
+M:``(``"-A?#O__]0Z,<G``!0Z,>H__^#Q!"-A?#O__]0Z)P,``"$P'0+,\!F
+MB87P[___ZP=FBX7P[___@\=[@?\0)P``?)QFA<`/A*````"_``@``(V%R,__
+M_U=64.@=:@``5_]U\(V%R,___U#HVR<``(V%\.___U"-A<C/__]0_Q4X,$,`
+MA<!T98V-R-___^AO````5HE=_.@C#```A,!U$&H25HV-R-___^A<`0``BMB-
+MA<C/__]0C87P[___4/\5.#!#`(3;=!:-C<C?___HZ0```(V-R-___^@E`@``
+MC8W(W___Z%,```"P`>L",L"+3?1?7EMDB0T`````B^5=P@0`@TD$_S/`QP$L
+M.$,`9HE!)(A!"(E!#(A!$(F!)!```&:)02&(02")012+P<=!&``!`0#'01P`
+M`0``PU6+[&2A`````&K_:($?0P!09(DE`````(-Y!/_'`2PX0P!T&(!Y$`!U
+M$H!Y&`!T!^B2`0``ZP7H1````(M-]&2)#0````"+Y5W#S,S,S,S,5HOQZ*C_
+M___V1"0(`70-:"@0``!6Z.M,`0!968O&7L($`,S,S,S,S,S,S,S,S,S,4U:+
+M\;,!@WX$_W0B@'X0`'48@WX,`'42_W8$_Q48,$,`C5C_]]L:V_[#@TX$_X-F
+M#`"$VW43.%X:=`Z-1B2Y4`]$`%#H3M7__UZ*PUO#N`00``#H:$T!`%.+G"00
+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
+MZ`4!``"#^/]TZU#_%6`P0P#_M@@0``"#ID`0````Z-7\____M@@0``"(A@P0
+M``#HW/S__XB&#1```+`!7L(,`%-65XM\)!"+\>F"````@+X`$````%=6=`]J
+M_^BJ````B88$$```ZPO_M@00``#HEP```(/X_W1I_[<($```B9]`$```Z&_\
+M____MP@0``"(APP0``#H=OS__XB'#1```%>(G@`0``#H`!<``(O8:$@X0P!3
+MZ".1`0!9687`=!%H3#A#`%/H$I$!`%E9A<!U&3/;B)]$$```9CD>#X5M____
+M,L!?7EO""`"P`>OV5F@`"```_W0D#(OQ5NA560``QH8`$````5["!`"X4!(`
+M`.@_/@$`4U56B[0D8!(``(U$)`Q7B[PD;!(``(/+_[T`"```4#OS=7#_M"1L
+M$@``_Q5D,$,`B_`[\P^%@````%6-A"1D`@``4/^T)'`2``#H'!```(3`=!F-
+M1"004(V$)&0"``!0_Q5D,$,`B_`[\W5._Q4`,$,`@_@"=`^#^`-T"H/X$G0%
+M,\!`ZP(SP(B'1!```.G0````5O\5:#!#`(7`=12+\_\5`#!#`(/X$@^5P(B'
+M1!```#OS#X2I````5?^T)&P2``!7Z'A8``!5C40D0%!7Z#H6``"+3"0L,\`#
+M1"0PB8<`$```BT0D$(/1`(F'"!```(M$)!2)AR@0``"+1"08B8<L$```BT0D
+M'(F',!```(M$)"")AS00``"+1"0DB8<X$```BT0D*(F'/!```(U$)"2)CP00
+M``"-CQ`0``!0Z+5G``"-1"044(V/&!```.BE9P``C40D'%"-CR`0``#HE6<`
+M`(.G0!````"+QE]>75N!Q%`2``#"#`"`?"0$`%:+\<9&"`!T'E>_`X```%?H
+M;SX!`%=J`%")1@SH8$P!`(/$$%_K!(-F#`"+QE["!`"`>0@`=0G_<0SH3CX!
+M`%G#5HOQ@WX,`'0/@'X(`'4)_W8,Z#4^`0!9BT0D"(E&#,9&"`%>P@0`BU$$
+M`U0D!(O"@^('P>@#`0&)403"!`#I`````%.+V597:@B+<PR+$UDK2P0/MCP6
+M#[9$%@'!YP@+^`^V1!8"P><("_C3[P^WQU]>6\,SP(E!"(D!B4$,B4$0B\'#
+MS,S,S,S,S,S,S,S,5HOQZ*X#``#_="0(B\[H'`$``(O&7L($`%.+7"0(5597
+M:$"J0`!J"&@(`0``B^E35>B6`0``C;5`"```B\[H<P,``(V#0`@``(O.4.C>
+M````C;-("0``N8````"-O4@)``#SI8N#2`L``(F%2`L``(N#3`L``(F%3`L`
+M`(N#4`L``%^)A5`+``"+Q5Y=6\($`%-65XO9:@B+\U^+SN@4`P``@<8(`0``
+M@^\!=>Z-BT`(``#H_@(``%]>B\-;PU6+[&2A`````&K_:($?0P!09(DE````
+M`%:+\5>+?@R%_W04B\_H#E\``&@X`P``5^@2.@$`65EJ!(U&!%#HDT0``(-^
+M"`!T&;]4"P``5_]V".A_1```5_]V".CH.0$`65F+3?1?9(D-`````%Z+Y5W#
+M5E>+?"0,B_$[]W0Q:+````#_M_````#_MO````#HOTL!`(N'``$``(/$#(F&
+M``$``(J'!`$``(B&!`$``%^+QE["!`"#.0!T3XM4)`2#.@!T1H,Y`74%@SH!
+M=`J#.0)U$(,Z`G4+BT$$.T($#Y3`ZRF#.0-U'H,Z`W49C4($:B!0C4$$4.BA
+M5`$`@\0,]]@;P$#K!C+`ZP*P`<($`%>+?"04A?]T+5.+7"0058ML)!!6*^N+
+M3"0DC30K4_\58#)#`(O._U0D*`-<)!R#[P%UXUY=6U_"%`!5B^R#["2-1=Q0
+MZ+@```"#?0P`=`S_=0R-1=Q0Z*ZT____=0B-3=SH0?___XOE7<((`%6+[%%6
+MB_&#?@@`=2!H5`L``.B#.`$`B47\687`=`F+R.@S_O__ZP(SP(E&"(M%"(D&
+M@_@!=02#9@0`@_@"=02#3@3_@_@#=0C_=@CH@JS__XM%#(/X"'(#:@A8B480
+M7HOE7<((`(M$)`2)`8/X`70%@_@"=02#800`@_@#=1-J((U!!&@`X$,`4.A)
+M2@$`@\0,P@0`58OLBP&![%0+``!6BW4(B0:#.0%U!HM!!(E&!(,Y`G4(BT$$
+M]]")1@2#.0-U'O]Q"(V-K/3__^@0_?__C48$4(V%K/3__U#H8JO__UZ+Y5W"
+M!`"XW")#`.CJ-P$`45:+\8,^`G41_W4,_W4(_W8$Z#NQ__^)1@2#/@-U7(-^
+M$`%V,%<S_SE^#'4G:#@#``#H<3<!`%F)1?")??R%P'0+:@B+R.C@6P``B_B#
+M3?S_B7X,7XM."(M&#/]U#/]U"(F!3`L``(M."(M&$(F!4`L``/]V".C'J___
+MBTWT7F2)#0````"+Y5W""`"+P??00(/@/P/!B8'P````@^B`B8'T````@\`@
+MB8'X````@\`(B8'\````PU-6_W0D#(OQC8XH$```Z(1Q__\SVXV.<!```%.(
+M7A#HF/[__XF>0!```(F>1!```(F>4!```(F>5!```(F>2!```(F>3!```(F>
+MF!```(E>)(F>G!```(B>H!```(B>P1```(B>RA```(F>[!```(F>\!```(F>
+M]!```&:)GO@0``"(GOH0``")G@`1``!FB9X$(0``7EO"!``SP&:)012)01AF
+MB4$<B$$>B4$@B4$DB4$HB4$LB4$PB4$TB4$XB4$\PU6+[(L-(.!#`('L%`$`
+M`(/Y_W4\C87L_O__QX7L_O__%`$``%#_%6PP0P"+C?S^__^+A?#^__^+E?3^
+M__^)#2#@0P"C8`]$`(D59`]$`.L+H6`/1`"+%60/1`"#^0)U!\'@"`/"ZP6X
+M`04``(OE7<.X!"```.C1-@$`BX0D$"```%-5B]C!ZQ]6@.,!#[?PB%PD#(ML
+M)`Q7B[PD&"```(7V#X1'`0``5^CQB`$`B40D%%F#_@)T3(/^!'1'@_X#=$)0
+M_[0D("```%>$VW0*Z$"K`0"#Q`SK!>@D:P``A<!U(HN$)!P@``"+3"00#[<$
+M2(/X7'0*@_@O=`5FA<!U!+`!ZV:#_@%U!#+`ZUUH``@``(U$)!A05^BC!@``
+M:``(``"-A"08$```4/^T)"0@``#HB@8``(/^`G0%@_X$=1=5C80D&!```%"-
+M1"0<4.C\`0``A<!ULH/^`W4;5?^T)"`@``!7Z+0```!?7EU;@<0$(```P@P`
+M@_X%=`6#_@9U;HU$)!10Z*8*``"$P'7-@_X%=!]7Z)<*``"$P'4558V$)!@0
+M``!0C40D'%#HG@$``.LT9H-\)!0`=#2-1"044.C:AP$`65"-A"08$```4(U$
+M)!Q0A-MT"N@WJ@$`@\0,ZP7H&VH``(7`#X4:____5^BP#0``_[0D'"```(OX
+MZ*(-``!54(/^`@^%5O___U?H.P$``/?8&\!`Z4S___]14U6+;"005HMT)!A7
+M:BY;_W0D(`^W!E#H-0$``/]T)"`/M_@/MT4`4.@D`0``#[?(@\4"B\&%P`^$
+MY0```&HJ6CO"="^#^#]T(&8[SW0@9CO+=0]FA?]TMX/_7'2R9CO[=*TRP.F_
+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
+M&`-5`%.+!U*+<`R+SO\58#)#`(O/_]:+\`%U&%^+QEY=6UG"!`"XXB%#`.@?
+M&P$`45%35HOQ5XEU\(V.D````.C:W___,_^-CJ0```")??SHRM___XV.N```
+M`,9%_`'HN]___[O`$```QD7\`E/HFAH!`%F)1>S&1?P#A<!T"8O(Z$R5___K
+M`HO'4\9%_`*)1D#H=AH!`%F)1>S&1?P$A<!T"8O(Z"B5__^+^(O.B7Y$Z&\`
+M``"+3?2+QE]>6V2)#0````"+Y5W#4U:+\;O`$```5XM^0(7_=!"+S^B\E?__
+M4U?H6!H!`%E9BWY$A?]T$(O/Z*65__]35^A!&@$`65F-CK@```#H[=___XV.
+MI````.CBW___7XV.D````%Y;Z=3?__^#24C_,]*($8A1#(E1((E1),=!*`$`
+M``")44R(45")42R)43")41R)41B)431FB9',````B5%XB5%\B5%PB5%TB5%H
+MB5%LB5%@B5%DB5$XB5$\B9&(````B9&,````B9&`````B9&$````PU6+[(!]
+M"`!6_W4DB_'_=2#_=1S_=1C_=13_=1#_=0QT$HM.0&H!Z`F6__^(ALP```#K
+M$(M.1&H`Z/>5__^(ALT```!>7<(@`(M$)`2%P'0#B4$LBT0D"(7`=`.)03"#
+M24C_P@@`BT0D!(E!%(M$)`C&00P!B4$0P@@`58OL@'DH`'14BU$LA=)T35.+
+M70Q6B[&(````B\97B[F,````"\>+10AT#@.!@````!.9A````.L&BWT4BW40
+M5U934/^RY#(``/^RX#(``/]Q?/]Q>.C`20``7UY;7<(0`(/L$%-5BVPD((O9
+M5E>`N\T`````=`.#Y?"+3"0D,\")1"04B_")3"00A>T/A%H!``"+^8`[`(M3
+M+(E4)!QT'_]S!/]S"/]T)"SHDBH!`(MS!(/$##/`B4,$Z<(```"+2R0S_SOY
+M?!!_!3MK('8)BWL@B7PD&.L&B_V);"08A?\/A)<```"`>T\`="F`N\T`````
+M="`S]COQ?!I_!3MK('83`\>+R(/A\"O(`\^%R7X$B4PD&(L"BW`8B\[_%6`R
+M0P"+3"0<_]:$P`^$MP```(M[+/]T)!C_="04BP>+<`R+SO\58#)#`(O/_]:+
+M\(M#.(7`=0F+1"0<!8`B``"`>RL`=1F`N)D0````=!!6_W0D%(V+D````.C4
+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
+M),````"T/T,`QX0DQ````,P_0P#'A"3(````Y#]#`,>$),P```#X/T,`QX0D
+MT````!!`0P#'A"34````*$!#`,>$)-@```!`0$,`QX0DW````%A`0P#'A"3@
+M````<$!#`,>$).0```",0$,`QX0DZ````*A`0P#'A"3L````Q$!#`,>$)/``
+M``#<0$,`QX0D]````/A`0P#'A"3X````$$%#`,>$)/P````P04,`QX0D``$`
+M`$1!0P#'A"0$`0``7$%#``^$S````%#H-&T!`(OX687_#X2[````5HV$)!03
+M``!0:@#_%7PP0P`SP%!0:@-0:@%H````@(V$)"@3``!0_Q4D,$,`B_`[]71\
+M:@!J`%=6_Q54,$,`.\=U;&H`C40D%%!H_G\``(V$).0S``!05O\52#!#`(7`
+M=$V+1"00T>@SR6@$`0``9HF,1-PS``"-A"0,`0``4(V$).`S``!0ZQN-A"0(
+M`0``4.@F_/__:`0!``"-A"0,`0``4%?H9O?__XOXA?]UVE;_%1@P0P"^``@`
+M`%:-A"04`P``4&H`_Q5\,$,`5HV$)!0#``!0Z`NW__]0C80DX",``%#HI?G_
+M_S/_,_;H4*?__ST`!@``<@O_=+04Z+O[___K`C/`A<!T(%5HO#M#`%7_=+0@
+M:`$0``!H``0``/\5J#!#`(/X`G4H:``(``#_=+08C80D&`,``%#H'+?__XV$
+M)!`#``!0_Q5<,$,`.\5U"$:#_@ARE>L$BWRT%(3_=38S]F@`"```_W2T.(V$
+M)!@#``!0Z.*V__^-A"00`P``4/\57#!#`#O%=0A&@_XU<M+K!(M\M#2%_P^$
+M!P$``(V$)!`#``!0Z(.V___HD*;__ST`!@``<F9H.#Q#`.CZ^O__:'A!0P#H
+M\/K__XV$)-@C``!0C80D%`,``%!7:/$```#H(=C__U"-A"0@$P``:&0(``!0
+MZ/$V__^#Q!AJ,&CP````Z/_7__]0C80D&!,``%!J`.C8F```Z8````"-A"38
+M(P``4(V$)!0#``!05VB004,`C80D(!,``&AD"```4.BE-O__@\08_Q6L,$,`
+MA<!T2_\5D#!#`%#_%;0P0P!J`(U$)!10C80D&!,``%#H:R\!`%E0C80D'!,`
+M`%!J]/\50#!#`%#_%;@P0P!H$"<``/\5G#!#`/\5L#!#`&H`_Q64,$,`7UY=
+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
+M*TWH&\<#3?@3QP--\!/'5VID4%'H(MH``(D&B58$ZP<S_XD^B7X$BT,8`081
+M?@1?7EN+Y5W"!`!6:@!H`,J:._]T)!2+\?]T)!3H[-D``%)0B\[H!````%["
+M"`"+5"0$BT0D"('"``!J3(D1%0M[F:&)003""`!6:@!J9/]T)!2+\?]T)!3H
+ML-D``(D&B58$7L((`(M$)`16:@!J9/]P!(OQ_S#HDMD``(D&B58$7L($`%6+
+M[+@`%@``Z!S5``!6B_&+1DB#^'(/CR4"```/A!4"``"#^!8/C_H````/A.L`
+M``"#^!4/AW@"``#_)(6_$T$`_S9H`$-#`&H`Z,*?``"#Q`SI6P(``/\V:`!#
+M0P!H"$-#`.OE:@#H%9<``%GI0`(``/]V!&I[Z"G/__]0_S;KR?]V!&IZZ^__
+M=@1J?.OH_W8$:,H```#KWFIPZ`7/__]0:@#H:9\``%GKP?]V!&IRZ\7_=@1J
+M>.N^_S9HA0```.C@SO__4.N`_S9H!`(``.OO_W8$:(0```#KG/]V!&B#````
+MZY+_=@C_=@1HT@```.BPSO__4/\VZ!2?``"#Q!#IK0$``/]V!&IYZ6C_____
+M=@1HW````.E;_____S9HW0```.N;@_@X#X^Z````#X2M````@^@7@_@+#X=R
+M`0``_R2%%Q1!`&C>````Z4K___]HX0```.E`____:+0```#H0,[__U#_-NDV
+M____:FGK[VIJZ^O_=@1J:.GX_O__:&\$``#KVFAP!```Z]/_=@1H<00``.G=
+M_O___W8$:G'IT_[___]V!&C(````Z/3-__]0C84`_O__:``!``!0Z,4L____
+M=@B-A0#^__]0:`Q#0P#_-N@XG@``@\0@Z=$```!J9^EX____@^@Y=$"#Z`%T
+M-(/H`70B@^@)=!.#Z`$/A:T```!HA@```.E1____:$,#``#I1_____]V!&@&
+M!```Z5'^__]J;^DS____:(P```#I*?___VA6!```Z1____\]@````'5JZ)"\
+M``"#?@0`="3_=@1HR@```.A%S?__4(V%`.K__V@`"@``4.@6+/__@\00ZQQH
+M``H``&C)````Z!_-__]0C84`ZO__4.B7[?__:@!HE@```.@&S?__4(V%`.K_
+M_U#_-4R$1`#HW(T``%Z+Y5W#D%X100!($4$`;!%!`'D100"($4$`CQ%!`)81
+M00"@$4$`LA%!`+D100#`$4$`SQ%!`-@100#B$4$`N1-!`+D300"Y$T$`N1-!
+M`.P100"Y$T$`#!)!`!8200!.$D$`6!)!`&(200!T$D$`>!)!`'P200"&$D$`
+MC1)!`)0200"Y$T$`H1)!`*L200#IO\$``%6+[+@`%@``Z-?1``!35O]U"&B#
+M````Z$3,__]0O@`)``"-A0#J__]64.@4*___@\00C84`_/__N5`/1`!H``(`
+M`%#H%%K__X3`="96:!Q#0P"-A0#J__]0Z%_L__]6C84`_/__4(V%`.K__U#H
+M2^S___\5`#!#`&HU:)8```"+\.C:R___4(V%`.K__U#_-4R$1`#HL(P``(/X
+M!%8/E,/_%00P0P!>BL-;B^5=P@@`N``0``#H*M$``%-55HNT)!`0``!7:@)=
+MBX8P80``.\5U"#/`0.GV````@+Z(80````^%VP```(/X`0^$T@```(N<)!@0
+M``"-1"00OP`(``!74U#HW>O___^T)"P0``"-1"04_[0D+!```/^T)"P0``#_
+MM"0L$```5U#HS<```(OXA?]T!#O]=193Z`6/__\[_74,QX8P80```0```.M_
+M@_\#=0N)KC!A``#I<____X/_!'5:C40D$%#HSZC__XN\)!P0``"-3"005SO!
+MB\%04W4'Z"RI___K!>A7Z___4^B3C?__A,!T-O^T)"P0``#_M"0L$```_[0D
+M+!```/^T)"P0``!74U;H]/[__^L2B\?K#O^T)!@0``#H=H[__S/`7UY=6X'$
+M`!```,(<`%6+[/]U)/]U(/]U'/]U&/]U%/]U$/]U#/]U".B.P```7<(@`/]T
+M)`S_="0,:@#_="00Z*K```#"#`#IG)@``*!0A$0`PS+`PX!\)`0`_W0D"`^5
+MP(T$A50```!0Z$W!``#""`#IGL$``%-6BW0D$#/`5XM\)!BS`5=6:O__="0<
+M9HD&4%#_%10Q0P#WV!K`(L.%_W0',\EFB4Q^_E]>6\(,`%6+[(/L%%97C47L
+M,_905HOY_Q4,,4,`@WWL`0^7P(B'``$``%;_%1`Q0P"%P`^5P(@$/D:!_@`!
+M``!RZ%]>B^5=PU6+[%8S]CEU$'8HBU4(5XM]#"OZ#[9*`0^V`L'A"`/!9HD$
+M%V:%P'0)1H/"`CMU$'+B7XM%#%Y=P@P`BT0D#%-55HMT)!"-:/]7BWPD&+,!
+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
+MBY;<2P``.\IV)(N&Y$L``#O(=QIF@SD!=!HY401V#SE!!'<*5NBP5P``A,!U
+M#(/(_UY=PU;H;%8``+T`@```Z9P```"+CG!*``"+EGA*``"-!!$SP3T````!
+M<A([U7,Z]]F!X?]_``")CGA*``"+CHA*``#HTP(``(N.=$H``,&F>$H```C!
+MX0@+P<&F<$H```B)AG1*``#KJHN&1`8``/^&7`8``(M("(F.1`8``#N.W$L`
+M``^&<____SN.Y$L```^'9____P^W`3N&5`8``'3(5NA16```A,`/A$[___^+
+MEGA*``"+PHN.?$H```^OP0&&<$H``(N&@$H``"O!#Z_"B89X2@``@[Y0!@``
+M``^$+____X.^7`8```"+AE`&``!7#[8X=1F+0`([AMQ+``!V#HF&3`8``(F&
+M1`8``.L7B\[H/5(``("^;`H```!U!XO.Z,7\__^+CG!*``"+EGA*``"-!!$S
+MP3T````!<A([U7,Z]]F!X?]_``")CGA*``"+CHA*``#HOP$``(N.=$H``,&F
+M>$H```C!X0@+P<&F<$H```B)AG1*``#KJHO'7^E[_O__45-55HMT)!17B_F+
+MSNB$`0``B]C!Z`4D`8E$)!!T"XO.Z'`!``"+Z.L1@[^,2@```'4$,L#K9XML
+M)!#VPT!T#8O.Z$\!``"+3"0<B0%6C8]P2@``Z!X%``"`?"00`'0T@^,?C7,!
+M@_X0=@9K]@.#[B"-CXQ*``"#_@%U!^A7'0``Z["-10%0Z/`<``!6B\_H.AP`
+M`(._1`8````/E<!?7EU;6<((`%6+[(-]"!UT*8-]"#)U-(-Y'`%V$X"Y1$P`
+M``!U"O]U#.@4/0``ZQO_=0SHNS(``.L1@+E$3````'4(_W4,Z)`E``!=P@@`
+MBU0D!(N!6$P``('!9.8``%*)0ASH`Y3__\($`%56BW0D$%>+^0^V;#XI#[9$
+M/BH[Z'4&BT0D$.LU4XU&`5#HT/C__XO8A=MT(FO.#(MT)!115E/H9,L``(N$
+MK[@```"#Q`R)!HFTK[@```"+PUM?7EW""`!6BW0D"(V1@````#/`.S)R#4"#
+MP@2#^"!R\S/`ZQ.+A(&`````*\8[1"0,<@2+1"0,7L((`%:+\8M.!('YXG\`
+M`'X6B\[HZAT``(M.!('Y`(```'P$,\!>PXM&$`^V!`A!B4X$7L.#[`Q35HOQ
+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
+M,]M6B_$X7"0,=2MHE`$``(V&R.0``(B>8>8``%-0Z#BM``"#Q`S'AL3D```"
+M````B9Y<Y@``_W0D#(O.Z'[G__^(GD5,``!>6\($`(!\)`0`=0?&@6+F````
+MP@0`5C/25XOY.%0D#'56:A!2C4=@4.CFK```,\!HG$H``%")1W")1W2)1WB-
+MAZ````!0Z,FL``"+C]CF```STK@``$``B9>`````@\08B5=\.\AR`HO(BX?<
+MY@``(\&)ASQ+``!J%(E74(VWC````(E7"(E7!%)6B9=83```B9=<3```B9>$
+M````B9>(````Z&RL``"##O^#Q`PSP(O/B(=%3```_W0D#.CW_O___W0D#(O/
+MZ#G___]?7L($`%:+\5>+CH0```"+^8M&!"OX>00RP.MU/0!```!^((7_?A"+
+M3A`#P5=04>@TT0``@\0,@V8$`(F^A````.L"B_F+#K@`@```*\=0BT80`\=0
+MZ&Z"__^+T(72?@8!EH0```"`OD5,````BX:$````C4CBB8Z(````=`L%#/[_
+M_XF&B````#/`@_K_#Y7`7U[#5HOQ5XN.A````(OYBU8$*_IY!S+`Z;,```"+
+MAI0````KP@&&C````%,SVX'Z`$```'X@A?]^$8M.$%>-!!%04>B/T```@\0,
+MB5X$B;Z$````ZP*+^;@`@```._AT'(L.*\=0BT80`\=0Z,:!__^+V(7;?@8!
+MGH0```"`OD5,````BX:$````C4CBB8Z(````=`L%#/[__XF&B````(N.C```
+M`(M&!(F&E````(/Y_W052`/(BX:(````.\%\`HO!B8:(````@_O_6P^5P%]>
+MPU-5BVPD#(O95XM\)!0[_700QH-23````7,'QH-13````8"[1$P```!T1BO]
+M([O<Y@``=G.-@T1+``!65U6+R.BXX/__B_"-BT1+``!65>ANT___4(O+Z%P%
+M```#[HV#1$L``".KW.8``"O^=<Y>ZS<[_7,BBX/8Y@``*\50BX-`2P```\50
+MZ"P%``!7_[-`2P``B\OK#(N#0$L``"O]5P/%4.@0!0``7UU;P@@`@^P44U56
+M5XOY,]N+3WR+KX`````KS2./W.8``#F?L.8```^&SP$``(N'K.8``(L$F(E$
+M)!2%P`^$K0$``(!X"`!T"<9`"`#IG@$``(L0BT`$B[?<Y@``B40D'(O"*\6)
+M5"08(\8[P0^#?0$``#OJ=!Q258O/Z-G^__^+5"08B^J+3WR+M]SF```KRB/.
+MBT0D'#O!#X>2`0``C2P0(^Z);"0@.]5R+87M="F+M]CF``"-CV3F``"+AT!+
+M```K\E8#PE!J`.BM>O__5?^W0$L``%;K#%"+AT!+```#PE!J`(V/9.8``.B,
+M>O__BW0D%(O/@\805NCBWO__BT8@BW8DB40D%(N'K.8``&HXB70D%/\TF.AU
+MF```BX>LY@``65F-2P&#))@`B4PD'#N/L.8```^#B0```(ML)!B+AZSF``"+
+M=)@$A?9T;SDN=6N+1"00.48$=6*`?@@`=5Q0_W0D&(V/9.8``&H`Z`EZ__^#
+MQA"+SU;H8][__XM&((M<)!R+=B2)1"04BX>LY@``:CB)="04_S28Z/*7``"+
+MAZSF``!968,DF`"-0P&)1"0<.X>PY@``<H7K!(MT)!"+;"0@BP]6_W0D&.C1
+M@/__`;=83```BT]\@Y=<3````"O-(X_<Y@``QH=23````4,[G[#F```/@C'^
+M____=WR+SU7H4?W__XM'?(F'@````%]>75N#Q!3#BX>LY@``BP28A<!T"H!X
+M"`!T!,9`"`!#.Y^PY@``<N")KX````#KT(/L)%.+V3/)5597BZN`````B_&+
+M>WPK_8EL)"0CN]SF``"+UXE\)""(3"03B70D,#E+4`^&V0$``(E,)!B+0TP#
+M1"08B40D+(`X"`^$@0$``(!X#0!T(XM`!"N#@````".#W.8``#O'#X=D`0``
+MBT0D+(A(#>E8`0``BW@$BT`(B40D%(O'*\4C@]SF```[P@^#.`$``#OO=!Q7
+M58O+Z'7\__^+4WR+[RO7B6PD)".3W.8``#/)BT0D%#O"#X<E`0``A<`/A`0!
+M``"-+#@CJ]SF``"-2R10B6PD*.CET/[_BTLDB4PD'#O]<F*%[71>BX/8Y@``
+M*\>`NT1,````B40D*%!T'U>-LT1+``!1B\[H)-C__XM$)"B+S@-$)!Q5:@!0
+MZS^+@T!+```#QU!1Z"FH``"+1"0T`T0D*%7_LT!+``!0Z!2H``"#Q!CK+X"[
+M1$P```"+1"044'0/5U&-BT1+``#HT-?__^L2BX-`2P```\=04>CCIP``@\0,
+MBT0D+(O+BWPD%%!7_W0D).@DUO__BTM,BU0D&,8$"@B%P'0)BPM74.BX?O__
+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
+M1G0"````:@)=._AS(SO0<Q^+CD!+``"-0@*)1GR*!`^(!!&*1`\!B$01`>GS
+M\___BX[<Y@``BY9`2P``B\<CP8M.?$>*!!"(!`J+1GR+CMSF``!`(\&)1GR#
+M[0%UV.G`\___QH9@3````.L5B\_HR,C__X.F7.8```"+SNB+[?__7UY=6X/$
+M$,($`(/L(%-6B_%7B70D$("^4$P```#&AF!,```!=5?_="0PZ)7J__^+SNC8
+MZ___A,`/A#T&``"-OHP```"+SE>-7@13Z(3;__^$P`^$(P8``(V&H````(O.
+M4%=3Z!CA__^$P`^$"P8``("^8N8````/A/X%``"-5GQ5B50D'.F["0``C59\
+MBX;<Y@``(0*+10`[AH@```!\:HV^C````(N&E````$@#!SE%`'\-=4*+1@@[
+MAI````!\-X"^G``````/A:4%``!758O.Z/W:__^$P`^$FP4``(V&H````(O.
+M4%=5Z)'@__^$P'6SZ8(%``"+SN@/Z___A,`/A&P%``"-5GR+CCQ+``"+P2L"
+M(X;<Y@``/000``!S/CL*=#J+SNB:[O__BX9<3```.X9,3```#X\\!0``?!*+
+MAEA,```[ADA,```/AR@%``"`OE!,````#X7N"```B\WH7TK__XO0BX8D`0``
+M@>+^_P``.Y2&I````',J:A!9*\C3Z@^VC#(H`0```TT$B\'!Z`,!10"#X0>)
+M300/MYQ6*`4``.M;:@]?0#O'<Q>-2"F-#(X[$7(+0(/!!(/X#W+SZP*+^(M-
+M!`//B\&#X0>)303!Z`,!10`KE+Z@````:A!9*\_3ZHN,ON0````#RCN.H```
+M`!O`(\$/MYQ&*`T``('[``$``',Z@+Y$3````'0<BTY\48U!`8V.1$L``(E&
+M?.AWOO__B!CI6_[__XN.0$L``(U6?(L"B!P!_P+I2?[__X'[!@$```^"]@,`
+M`(V[^O[__X/_"',$,]OK$(O?@^<#P>L"@\\$2XO+T^>#QP*%VW0CB\WH2$G_
+M_VH062O+T^B+300#^`/+B\'!Z`,!10"#X0>)302+S>@E2?__B]"+AA`0``"!
+MXO[_```[E(:0#P``<RIJ$%DKR-/J#[:,,A00```#302+P<'H`P%%`(/A!XE-
+M!`^WA%84%```ZUYJ#UM`.\-S&HV(Y`,``(T,CCL1<@M`@\$$@_@/<O/K`HO8
+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
+MA````(L'BW`(B\[_%6`R0P"+S__6O@`(``"-1R164(U$)#!0Z"MY__^`O[IL
+M````#Y3`#[;`4%:-1"0P4.BI-/__BT0D&,9$)!(`#[:(H6$``/?9&\F#X02)
+M3"044>F.````A=MT#H.CB`````"#HXP`````@'PD$@!U3;X`"```C4<D5E"-
+MA"0P$```4.C!>/__:@%6C80D,!```%#H2#3__XL'C8PD*!```/]T)!3&1"06
+M`5&+<`2+SO\58#)#`(O/_]:$P'5\BT0D&("XB&$````/A80```!H``@``(U$
+M)"Q0Z(&+__^$P'1Q_W0D%(L'C4PD+%&+<`2+SO\58#)#`(O/_]:$P`^$5/__
+M_V:#O"0X(```5(U')%`/E<`/ML!0Z&R-__]J`8O/Z'6/_O^`?"03`(O/=&O_
+M="0<Z"2U_O_K96@`"```C80D+!```%"-1"0P4.CX=___Z[&-1"0H4&I%Z/KC
+M_O^+!XU/)/]T)!11BW`$B\[_%6`R0P"+S__6BP=J`/]T)"2+<!"+SO]T)"S_
+M%6`R0P"+S__6,L#IGP```.BJL/[_@[_<(0```G4SB\_H7Y;^_XN/J&P``"N/
+MV#(``(N'K&P``(LW&X?<,@``:@!048M.$/\58#)#`(O/_U80A=MT6(-\)!P%
+M=0;&0T\`ZQN*A9D0``"(0T^+A5@0``")0R"+A5P0``")0R2+S^B/$/__@V-P
+M`(V+D````(-C=`")0UB+1"08B5-<_[#@@@``_[5P$```Z%DB__^P`5]>75N!
+MQ!@@``#"$`!6B_$SP&H04(E&&(E&'(U&(%#'!FA#0P#'1@2,0T,`QT8(R$-#
+M`,=&#`1$0P#'1A`@1$,`QT84`0```.B":P``@\0,B\9>PU%35HOQ,]MJ#(D>
+MB5X$B5X(B5X,B5X0B5X4Z'Y:``")1"0,687`=!+'`&A$0P#'0`0!````B7`(
+MZP*+PXE&&(O&B5X<B5X@9HE>)(A>)HE>*%Y;6<-5B^QDH0````!J_VB!'T,`
+M4&2))0````!65XOYBT\<QP=H0T,`QT<$C$-#`,='",A#0P#'1PP$1$,`QT<0
+M($1#`(7)=!2+`5&+<`B+SO\58#)#`/_6@V<<`(M-]%]DB0T`````7HOE7<-5
+MB^QDH0````!J_VB!'T,`4&2))0````!65XOYBT\0A<ET%(L!48MP"(O._Q5@
+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
+M``"('5"$1`!T#8,]7(1$```/A2P)``!J`%?_%;@@1@#I'@D``(`]481$```/
+MA9(```"`/;0,1@``#X2%````@#VU#$8```^4P#/)A,"BM0Q&``^5P8'!Y@``
+M`%'H/B[__S/;4$-35_\54"%&`.M'@#U0A$0```^%QP@``#/`4%!0C46,4/\5
+MX"!&`(7`#X2P"```C46,4%?_%=P@1@"%P'44C46,4/\5O"!&`(U%C%#_%:`@
+M1@"`/;4,1@``=;#I?P@``&@`"```C86,WO__4&IF5_\5:"%&`(`]481$``!T
+M&#/;0X`]4H1$``!T!H@=4(1$`%/I'____X`]4H1$``!T#S/;0XK#HE"$1`#I
+MR`0``&IH5_\59"%&`#/;B_`Y'5R$1`!U(6K_4VBQ````5O\5`"%&`&BT-4,`
+M4VC"````5O\5`"%&`%;_%<0@1@"`/6B41```=!AHN@```.@]+?__4%/HJ!H`
+M`+X`"```ZUF^``@``(V%C-[__U90C86,[O__4.B;3?__5HV%C.[__U#H^AD`
+M`(V%C.[__U!HN0```.CX+/__4(V%9+W__VB`"```4.C)B_[_@\00C85DO?__
+M4%/H2!H``(`]<:1$``!U#(V%C-[__U#HQ"```%-3C86,WO__BLM0B$WRZ/'M
+M_O\SVT.$P'45_Q4`,$,`@_@%=`6#^`-U!8K+B$WRC86,WO__4.B-\?__BM"(
+M5?.$TG45_Q4`,$,`BE7S@_@%=0>*PXA%\NL#BD7RB@UQI$0`A,EU;832='W_
+M%40Q0P!0:)A00P"-A8SN__]64.@AB_[_@\00C8UDSO__Z#KC_O^#9?P`C86,
+M[O__:A%0C8UDSO__Z"KD_O^(1?.$P'4._Q4`,$,`@_@%=0.(7?*#3?S_C8UD
+MSO__Z#CC_O^*#7&D1`"`??,`#X4U`@``A,D/E<#^R")%\H3`#Y1%\X3`#X2X
+M`0``5HV%C.[__U!J`/\5?#!#`&B`````C86,_O__N7+$1`!0Z`\Y__]H<K1$
+M`(V%C-[__U!HU%!#`(V%3./^_V@,0P``4.AGBO[_@\04QT6H/````(V%C.[_
+M_\=%K$````")1;B-A4SC_O^)1;PSP&BL3T,`:`1Q``!0:`0```A0:O^)?;#'
+M1;0$44,`B5W$B47(QT7`:(1$`/\54#%#`(OPB77LA?8/A((```#&!8!K10``
+M_Q58,4,`A<!T$&@`(```4&B":T4`Z(9+__]J!VB"JT4`Z`?X__]J`FB"NT4`
+MZ/OW__]J$&B"RT4`Z._W__^-A8S^__^('8/<10!0N8+;10#HHCG__S/`4%!0
+M:@)6_Q5(,4,`:`1Q``!H@&M%`%")1>3H24$``(/$#.L&BT7LB47DC46H4/\5
+MA"!&`(OPC86,_O__:(````!0Z*0Y__]H#$,``(V%3./^_U#HDSG__X7V=#AH
+M$"<``/]UX/\5K"!&`(-EZ`"+=>2`/@!U%&ID_Q6<,$,`BT7H0(E%Z(/X9'SG
+MBT7@HZ3L10#K!HMUY(A=\X-][`!T$%;_%4PQ0P#_=>S_%1@P0P"`??,`#X2"
+M^___:)H```#H`"K__U"-A8S>__]0:!!10P"-A62I__]H``H``%#HQ8C^_X/$
+M%+E0#T0`4^CBN/[_:C!HE@```.C(*?__4(V%9*G__U!7Z*/J____!5R$1`#I
+M)_O__VH`:F=7B1U4A$0`Z-E;_O]J`&IF5^C/6_[_:.8```#HBRG__U!35_\5
+M4"%&`%-J:5?HLUO^_VBT-4,`:F57_Q50(48`:F57_Q5D(48`B_"%]G08:O!6
+M_Q5`(48`#8````!0:O!6_Q4\(48`:@7_-3B$1`!7Z`\)``!J`O\U.(1$`%?H
+M`0D``&B0W$4`5X@=M`Q&`.@='```:@;_-3B$1`#&!;0,1@``5^C;"```@#U0
+MA$0``'4@@SU<A$0``'47@SVD[$4``'4.:@3_-3B$1`!7Z+((``!34U?H[5K^
+M_X,E5(1$``"@4(1$`(,]7(1$```/C@W[__^$P`^%!?O__VB0````B!U1A$0`
+MZ*`H__]04U?_%5`A1@"+#5`/1`"#^0EU![Z@````ZQ8SP(/Y`P^5P$B#X`H%
+MEP```(E%[(OP:C!HE@```.AC*/__4%;H7"C__U!7Z#[I___I]`(``%?HC!<`
+M`*%TQ40`,]M#B3U,A$0`B3U8A$0`A<!T#E!3:(````!7_Q4`(48`H7QK10"%
+MP'014&H`:'(!``!J;%?_%<`@1@!J:%?_%60A1@!H``!``&H`:#4$``!0B47L
+M_Q4`(48`:``(``"-A8SN__]0Z#+G__]J9E?_%60A1@!F@SURI$0``(OPB77H
+MN7*D1`!U!HV-C.[__U%6_Q5<(48`5NA5[/__:#R$1`!H.(1$`&B0W$4`5\8%
+M8X1$``#H-/'__X3`=0:('5*$1`"#/3R$1```=@YJ!_\U.(1$`%?H10<``(`]
+MF.Q%``!U)VB_````Z%DG__]0:FM7_Q50(48`:+X```#H12?__U!35_\54"%&
+M`(,]/(1$```/AJL```!J`/\U.(1$`%?H^@8``*&$W$4`A<!T+H,];*1$``!U
+M)8L-0(1$`&H`:@!0_W7L_S74#D0`Z,+>____-83<10#HW7X``%DY'6RD1`!T
+M45?_%<@@1@`Y'6RD1`!T0H`]<:1$``!U.6H#_S4XA$0`5^B5!@``@SV0[$4`
+M`'0B:@!H8*]!`&H`:'Q00P#_-=0.1`#_%;0@1@"%P`^$X/C__U/_-3B$1`!7
+MZ%T&``"`/6.$1```#X6C````@SV$W$4```^%E@```(,];*1$```/A8D````S
+MP+ZJ````9HF%9&G__X'^J@```'4)@#V8[$4``'0_@?ZK````=0F`/9CL10``
+M=2YH`"```&B44$,`C85D:?__4.AT1O__:``@``!6Z`PF__]0C85D:?__4.A<
+M1O__1H'^L````'ZGBPU`A$0`C85D:?__:@!J`%#_=>S_-=0.1`#HH]W__XMU
+MZ(,];*1$``)U"6H`5O\58"%&`(`]:)1$``!T%&H`:F=7Z,M7_O]J`&IF5^C!
+M5_[_H6RD1`"%P'0D@#U0A$0``'4;:@!3:!$!``!7.\-U"/\5`"%&`.L&_Q6H
+M($8`@#U2A$0``'03:)````#H927__U!35_\54"%&`(O#BTWT7UY;9(D-````
+M`(OE7<(0`,S,S,S,S,S,S,S,N%`:``#HMBH``%.+G"1@&@``55:+M"1D&@``
+M,^U7B[PD9!H``%55:!A/0P#_M"1\&@``4U97Z&!7_O^$P'0(,\!`Z5`#``"!
+M[A`!``!T;H/N`0^%/0,``&H"#[?#7BO&="*#Z&IT4H/H`71(@^@!=#^#Z`%T
+M$8/H`70Q@^@!#X41`P``:@9>555H<0$``&IF5_\5P"!&`(7`=`=0_Q78($8`
+M5E?_%;@@1@#KDVH#Z]9J!.O2,_9&Z\Z+]>O*:FQ7_Q5D(48`4/\5Q"!&`+X`
+M"```C80D8`H``%;_M"1T&@``4.C:1/__5HV$)&0*``!04.CY`O__C80D8`H`
+M`%!J95?_%5`A1@!H``$``&BT`@``C80DM`<``%!5C80D<`H``%#_%8`@1@!5
+M_[0DL`<``&AP`0``:F97_Q7`($8`C80D7`$``%"-A"1D"@``4/\59#!#`(O8
+M@_O_#X0V`@``C40D$%"-A"1T`0``4/\5`#%#`(U$)!A0C40D%%#_%0@Q0P!J
+M,HU$)#1058U$)"10:@)>5F@`!```_Q5P,4,`:C*-A"28````4%6-1"0D4%5H
+M``0``/\5=#%#`(U$)#!0C80DF````%!HF0```.AK(___4&A,3T,`C80DO`,`
+M`&@``@``4.@V@O[_@\08C80DK`,``%!J:E?_%5`A1@!3_Q5@,$,`]H0D7`$`
+M`!!U9&HRC80D_````#/)`XPD@`$``%"+A"2``0``$\504>@KZ___:)@```#H
+M`2/__U"-A"3\````NP`"``!0:&!/0P"-A"2X`P``4U#HPX'^_X/$%(V$)*P#
+M``!0:FA7_Q50(48`ZP6[``(``%7_M"2P!P``:'`!``!J9U?_%<`@1@"+#62$
+M1`"-1"0H4.B@4/__C40D$%"-1"0L4/\5`#%#`(U$)!A0C40D%%#_%0@Q0P!J
+M,HU$)#1058U$)"105KX`!```5O\5<#%#`&HRC80DF````%!5C40D)%!55O\5
+M=#%#`(U$)#!0C80DF````%!HF0```.@V(O__4&A,3T,`C80DO`,``%-0Z`6!
+M_O^#Q!B-A"2L`P``4&IK5_\54"%&`/:$)%P!```0BPV,W$4`BQ6(W$4`=`:+
+MP@O!=$MJ,HV$)/P```!045+H`>K__VB8````Z-<A__]0C80D_````%!H8$]#
+M`(V$)+@#``!34.B>@/[_@\04C80DK`,``%!J:5?_%5`A1@`SP%]>75N!Q%`:
+M``#"$`"X`"```.@2)P``5E=H`!```(U$)`PS]E#_M"04(```Z'L___^+^(7_
+M#X3S````5;T`"```1H/^`0^$R````&:#?"0,+W0,9H-\)`PM#X6T````#[=$
+M)`Y0Z$1;__^#Z$0/A)````"#Z`%T:H/H"W14@^@##X6-````#[=$)!!0Z!U;
+M__^#Z`!T*(/H,70C@^@!=!*#Z!YU;E6-1"064&ARM$0`ZUS'!6RD1``"````
+MZPK'!6RD1``!````Q@5Z:T4``>M"C40D$+ERQ$0`4.BA+___ZS$/MT0D$%#H
+MP5K__X/X3'4A9H-\)!(`=1G&!7&D1``!ZQ!5C40D%%!H<J1$`.@70?__:``0
+M``"-1"004%?HB3[__XOXA?\/A13___]=7UZ!Q``@``#"!`!6BW0D#%?_="04
+M_W0D$%;HW4#__S/_B\]F.3YT(XO&#[<0@_HZ=`J#^EQT!8/Z+W4&:B5:9HD0
+M08T$3F8Y.'7?7U["#`"X(R-#`.C%)```N$R]`0#HER4``(-]#``/A+$,``!H
+M`!```(U%ZU"-1?-0C87XRO__4(V%J`+__U#_=0SH`.S__XO(B4T,A<D/A($,
+M``!3BUT05E=J!HV%^,K__XVUJ$+^_U]H`!```%90Z&/H__^!Q@`@``"#[P%U
+MZ8OW_S2U&.9#`(V%J`+__U#HL%G__X7`=`M&@_X.<N/I_0L``(/^#0^']`L`
+M`/\DM67-00"#^P(/A>0+``"_``@``(V%L(+__U=0Z+;>__]7C86H(O__4(V%
+M^,K__U"-A;""__]0Z.SY_O^-C:AR___H'.7^_XV%J"+__S/;4(V-J'+__XE=
+M_.@_YO[_C8VPHO__Z(.O_O_I.@$``%.-A;"B__]0_Q58,$,`.)V\LO__#X2@
+M````5XV%^.[__U"-A;""__]0Z![U_O]7C87X[O__4.@A\O[_C86P@O__4.BA
+M=@``B_!9@_X$<A&-A?CN__]0Z(UV``!9._!W%(V%^,K__U#H#OG^_X3`#X7A
+M````C86PHO__4.AH=@``,\EJ'E-FB8Q%LJ+__XU%P%#HOS,``(/$$,=%Q`,`
+M``!J%%AFB470C86PHO__B47(C47`4/\5="!&`(V%L*+__U#_%5PP0P"#^/]T
+M;HV%L*+__U#_%2@P0P"%P'5=B_-3ZP)&5HV%L*+__U!H"%)#`(V%^.[__U=0
+MZ/=\_O^#Q!2-A?CN__]0_Q5<,$,`@_C_=="-A?CN__]0C86PHO__4/\5.#!#
+M`(7`=!!J!%.-A?CN__]0_Q5H,4,`4XV%L*+__U"-C:AR___H->3^_X3`#X6K
+M_O__@TW\_XV-J'+__^BGX_[_Z1P*``"%VP^%%`H``*&$W$4`A<`/E,.$VW42
+M:+1%0P!0Z#.Q``"AA-Q%`%E9BGWSA/]T"(VU^,K__^L0C44,4.CFZO__B_"A
+MA-Q%`(3;=0E0Z"YU``!9B_A6Z"5U```#QXT$10H```!0_S6$W$4`Z#MU``"#
+MQ`R%P'07HX3<10"$VW0%,\EFB0A64.C)L```65F$_P^%APD``%;H_W0``%GI
+M>PD``(7;#X5S"0``C87XRO__4/]U"/\57"%&`.E>"0``A=L/A58)``!F.3UR
+MI$0`#X5)"0``,\"-O?C*__]J(F:)A?CN__]89CF%^,K__W4&C;WZRO__5^B%
+M=```O@`(``!9.\8/@Q0)```/MP=J7%F#^"YU)V8Y3P)U(8/'!#/;9CD?#X3U
+M"```5E>-A?CN__]0Z/@\___I^````&8[P0^$WP```&:%P'0+9H-_`CH/A,\`
+M``"-1>0SVU!J`5-H(%)#`&@"``"`_Q4H($8`A<!U2(U%[,=%[``0``!0C87X
+M[O__4(U%X%!3:'120P#_=>3_%20@1@#_=>3_%00@1@"+1>RY_P<``-'H.\%R
+M`HO!,\EFB8Q%^.[__V8YG?CN__]T+(V%^.[__U#HLG,``%EJ7%EF.8Q%]N[_
+M_W025FB44D,`C87X[O__4.@8//__5^B,<P``B_"-A?CN__]0Z'YS```#\%F!
+M_O\'``"^``@``%ES(%97C87X[O__4.CE.___ZQ!65XV%^.[__U#H_3O__S/;
+M:B)84(V%^.[__U#H)54``%E9A<!T"V8Y6`)U!3/)9HD(5HV%^.[__[]RI$0`
+M4%?HQSO__U:-A?CN__]0Z.GE__]J9O]U"/\59"%&`(OPC87X[O__4%;_%5PA
+M1@!74VA#`0``5O\5`"%&`(V%^.[__U!7Z`QS``!9687`#X1I!P``C87X[O__
+M4%-H0P$``%;_%0`A1@#I4`<``(,];*1$``$/A$,'```/MX7XRO__4.C0.?__
+MA,!T%`^WA?C*__^#Z#"C;*1$`.D>!P``QP5LI$0``@```.D/!P``#[>%^,K_
+M_S/)*\%T+8/H,'07@^@!=".#Z`$/A>\&``#&!5.$1``!ZP:(#5.$1`"(#6"$
+M1`#IU08``(@-4X1$`,8%8(1$``'IPP8```^WA?C*__]0Z*:@``!9@_A&="*#
+M^%5T$3/`HF&$1`"B8H1$`.F:!@``Q@5BA$0``>F.!@``Q@5AA$0``>F"!@``
+M,__&!9CL10`!1XV=^,K__V:#O?C*__\\#X6>````C87ZRO__:CY0Z%!1``!9
+M687`#X2&````C4@"B4WL,\EFB0B-A?C^__]J9%"-A?K*__]0Z&/B__^+V(7;
+M=%UF@[WX_O__`'13:)A20P"-A?C^__]0Z*]3___WV&BD4D,`&\`C^(V%^/[_
+M_U#HF%/__X7`=0-J`U]HK%)#`(V%^/[__U#H@%/__X7`=0-J!E]J9(V%^/[_
+M_U!3ZYB+7>R#?1`%=16#_@D/A;<%``!J`5=3_W4(Z&H)``"#?1`$#X6A!0``
+M@_X&#X68!0``:@!74_]U".A+"0``Z8<%``#&!9GL10`!9CF]^,K__P^$<P4`
+M`(V%^,K__U#H]U+__Z/\Y4,`Z5T%``"#^P$/A7L!``"-A;""__^_``@``%!7
+M_Q5D,4,`5XV%L(+__U#H"^S^_S/`B_!0ZP)&5O\U^.5#`(V%L(+__U!HM%)#
+M`%=H:I1$`.A]=_[_@\08:&J41`#H5-O^_X3`==!H:I1$`&IF_W4(_Q50(48`
+M9H.]^,K__P`/A-\$``"`/7IK10``#X72!```,\!FB87XZO__C87XRO__:BQ0
+MZ+5/``!9687`=5(STHOR9CF5^,K__W1%B\J-A?C*__]F@SA`=!-&C87XRO__
+MC0PV`\%F.1!UZ>LD:``"``"-A?K*__\#P5"-A?CJ__]0Z'XX__\SP&:)A'7X
+MRO__9H.]^.K__P!U,&@`$```C86H0O[_4(V%^,K__U#H4CC__V@``@``C86H
+M8O[_4(V%^.K__U#H.CC__XV%^,K__U#H?][__S/`9HF%^-K__XV%^.K__VHD
+M4(V%^,K__U#_=0CH<=C__X/X!@^$\P,``&H!_W4(,\#&!5"$1``!9J-JE$0`
+M_Q6X($8`@_L'#X70`P``@SULI$0``'4*QP5LI$0``@```,8%:)1$``'IL0,`
+M`(/[`W4I9CF]^,K__W02C87XRO__4.ANJ@``6:.4[$4`C44,4.B2Y/__HY#L
+M10#&!7MK10`!Z7<#``"#^P8/A6X#```SP&:)A?BR__\/MX6H0O[_4.A(G0``
+MO@`(``!95H/X4'0S@_A4C87XLO__=!1H@LM%`%#H1S?__\=%[!````#K+&B"
+MJT4`4.@S-___QT7L!P```.L8:(*[10"-A?BR__]0Z!DW___'1>P"````,\!F
+MB86H8O__9HF%^,+__XV%J&+^_U90C86PDO__4.CN-O__:B);9CF=L)+__W5/
+MOP`(``"-A:IB_O]74(V%L)+__U#HR3;__XV%LI+__U-0Z*5-``!9687`#X3U
+M````,\EFB0B#P`)H``0``%"-A?C"__]0Z)@V___IU@```(V%L)+__U#HR=C^
+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
+M(48`Z1/___^X#"%&`.D)____N`@A1@#I__[__[@$(48`Z?7^__^X`"%&`.GK
+M_O__N/P@1@#IX?[__[CX($8`Z=?^__^X]"!&`.G-_O__N/`@1@#IP_[__[CL
+M($8`Z;G^__^XZ"!&`.FO_O__N.0@1@#II?[__[C@($8`Z9O^__^XO"!&`.F1
+M_O__N*`@1@#IA_[__[BD($8`Z7W^__^XJ"!&`.ES_O__N*P@1@#I:?[__[BP
+M($8`Z5_^__^XM"!&`.E5_O__N+@@1@#I2_[__[AH(48`Z4'^__^XP"!&`.DW
+M_O__N,0@1@#I+?[__[C(($8`Z2/^__^XS"!&`.D9_O__N-`@1@#I#_[__[C4
+M($8`Z07^__^XV"!&`.G[_?__N-P@1@#I\?W__[AH($8`Z0````!14E!HY+U#
+M`.BC!```6EG_X+AD($8`Z>7___^X6"!&`.G;____N$P@1@#IT?___[A0($8`
+MZ<?___^X5"!&`.F]____N&P@1@#IL____[A<($8`Z:G___^X8"!&`.F?____
+MN$0@1@#I`````%%24&@$OD,`Z#@$``!:6?_@N#P@1@#IY?___[A`($8`Z=O_
+M__]14E!H)+Y#`.@3!```6EG_X+@(($8`Z>7___^X#"!&`.G;____N``@1@#I
+MT?___[@4($8`Z<?___^X&"!&`.F]____N!P@1@#IL____[@L($8`Z:G___^X
+M!"!&`.F?____N!`@1@#IE?___[@H($8`Z8O___^X)"!&`.F!____N"`@1@#I
+M=____[B(($8`Z0````!14E!H1+Y#`.B``P``6EG_X+B0($8`Z>7___^XC"!&
+M`.G;____N'0@1@#IT?___[B$($8`Z<?___^X@"!&`.F]____N'P@1@#IL___
+M_[AX($8`Z:G___^X?"%&`.D`````45)0:&2^0P#H'P,``%I9_^"X>"%&`.GE
+M____N(0A1@#IV____[B`(48`Z='___^X="%&`.G'____]P5@54,``!```'0F
+MZ)X```"AX`Q&`$"CX`Q&`(/X`74,:.0,1@!J!.C4`0``Z7<"``##H=`,1@!3
+M,]M#.\-U!#+`6\.%P'0$BL-;PU9HC%1#`/\5@#!#`(OPA?9U!(OSZRIHJ%1#
+M`%;_%8PP0P"%P'3L:,!40P!6H]0,1@#_%8PP0P"%P'37H]@,1@"+SKK0#$8`
+M,\#P#[$*A<!U!#OS=`0[PW4$,L#K`HK#7EO#S(O_58OL4:%HYD,`,\6)1?SH
+M;____X3`=!E6BS74#$8`B\YHW`Q&`/\58#)#`/_67NL=NMP,1@#K`O.0H=P,
+M1@"%P'7U,\E!\`^Q"H7`=>R+3?PSS>C$#@``B^5=PXO_58OL@^Q`C47D:AQ0
+M_W4(_Q6@,4,`A<!U!6H96<TI]D7X1'1&5E>-1<!0_Q68,4,`BWW$,]*-1_^+
+MR(UW_R-%#/?6(TT(2`//(W4(`\'W]S/2B\B+10SW]P/(=`PSP/`)!@/W@^D!
+M=?1?7HOE7<((`(O_58OLBPT\`$``@[ET`$``#7<$,\#K35:+L>``0`"%]G4$
+M,\#K/0^W@10`0`"-D1@`0``/MXD&`$```]!7B[X,`$``,_:%R707.WH,<@J+
+M0@@#0@P[^'(01H/"*#OQ<NDSP%]>7<((`(M%"(M*"(D(BT4,BTHDB0B+0@P%
+M``!``.O@B_]5B^Q145:-1?A0C47\4.AH____B_"%]G4+BT4,QP`$````ZT.#
+M/>@,1@``=2'W1?@```"`QP7H#$8``0```'4%:AE9S2G_=?Q6Z+O^____=0S_
+M=0C_=?Q6_Q6<,4,`A<!U!6H96<TI7HOE7<((`(O_58OL4?<%8%5#```0``!T
+M(N@G_O__@RW@#$8``74/C47\4/\UY`Q&`.AA____Z`0```"+Y5W#B_]5B^Q1
+MH6CF0P`SQ8E%_.AU_?__A,!T&5:+-=@,1@"+SFC<#$8`_Q5@,D,`_]9>ZPK'
+M!=P,1@``````BTW\,\WHW0P``(OE7<.+_U6+[(/L.*%HYD,`,\6)1?Q35E?H
+M\_S__XM-"+\``$``QT70)````(E-U(M!!(M9"`/'BU$,`]^+<1`#UP/WB5WX
+MBWD4@<<``$``B47<B7WTBWD<B7W,BWT,B7W8,__W`0$```")?>")?>2)?>B)
+M?>R)??!U)(U%T(E%^.C\_O__C47X4&H!5VA7`&W`_Q64,4,`,\#IUP$``(M%
+M#(L[*\+!^`*)1<B+#(:+P<'H'_?0@^`!B47@C8$"`$``=0,/M\&+'=A40P`S
+M]HE%Y(7;=!^-1="+RU!6_Q5@,D,`_].+\(7V#X5<`0``BQW85$,`A?\/A9,`
+M``"%VW06C470B\M0:@'_%6`R0P#_TXOXA?]U83/;4U/_==S_%:0Q0P"+^(7_
+M=4[_%0`P0P"+/=Q40P")1?"%_W06C470B\]0:@/_%6`R0P#_UXOXA?]U)8U%
+MT(E%^.@D_O__C47X4&H!4VA^`&W`_Q64,4,`BT7LZ?X```"+3?B+QX<!.\=U
+M!U?_%8@P0P"+'=A40P")?>B%VW02C470B\M0:@+_%6`R0P#_TXOPA?8/A94`
+M``"+10@SVSE8%'0M.5@<="B+1SR!/#A010``=1R+3<PY3#@(=1,[?#@T=0V+
+M=<B+1?2+-+"%]G5>_W7D5_\5C#!#`(OPA?9U3O\5`#!#`(LUW%1#`(E%\(7V
+M=!:-1="+SE!J!/\58#)#`/_6B_"%]G4EC470B47TZ%;]__^-1?10:@%3:'\`
+M;<#_%90Q0P#HSOK__XMU[(M%#(DPBQW85$,`A=MT&H-E\`"-1=!0:@6+RXE]
+MZ(EU[/\58#)#`/_3Z`[]__^+QHM-_%]>,\U;Z%H*``"+Y5W""`"XF"!&`.D`
+M````45)0:(2^0P#H9/W__UI9_^"X-"!&`.D`````45)0:*2^0P#H2?W__UI9
+M_^#_)5@R0P#_)50R0P#_)5`R0P#_)4PR0P#_)4@R0P#_)40R0P#_)4`R0P#_
+M)3PR0P#_)3@R0P!5B^SK'_]U".A^CP``687`=1*#?0C_=0?H3PH``.L%Z"L*
+M``#_=0CH95,``%F%P'347<-5B^S_=0CH2PH``%E=P\QJ_U!DH0````!0BT0D
+M#&2))0````");"0,C6PD#%#RP\S,S,S,S,S,S,S,S%=64S/_BT0D%`O`?11'
+MBU0D$/?8]]J#V`")1"04B50D$(M$)!P+P'T41XM4)!CWV/?:@]@`B40D'(E4
+M)!@+P'48BTPD&(M$)!0STO?QB]B+1"00]_&+T^M!B]B+3"08BU0D%(M$)!#1
+MZ]'9T>K1V`O;=?3W\8OP]V0D'(O(BT0D&/?F`]%R#CM4)!1W"'('.T0D$'8!
+M3C/2B\9/=0?WVO?8@]H`6UY?PA``S,S,S,S,48U,)`0KR!O`]]`CR(O$)0#P
+M__\[R/)R"XO!692+`(D$)/+#+0`0``"%`.OG:A!H@+A#`.A'"0``,]N)7>"(
+M7>>)7?P[71!T&HM-%.@?"0``BTT(_U44BT4,`44(0XE=X.OAL`&(1>?'1?S^
+M____Z`X```#H30D``,(4`(M=X(I%YX3`=0__=1A3_W4,_W4(Z'L```##:@QH
+MH+A#`.C>"```QD7G`(M=#(O#BWT0#Z_'BW4(`_")=0B#9?P`B\=/B7T0A<!T
+M%"OSB74(BTT4Z)P(``"+SO]5%.OBL`&(1>?'1?S^____Z!0```#HU0@``,(0
+M`(M]$(M=#(MU"(I%YX3`=0O_=1174U;H`0```,-J&&C`N$,`Z&0(```S]HEU
+M_(M]"(EUY#MU$'1"*WT,B7T(BTT4Z#8(``"+S_]5%$;KXHM%[(E%X(M%X(L`
+MB47<BT7<@3AC<VW@=`O'1=@`````BT78P^B8C0``BV7HQT7\_O___^A,"```
+MPA``S,S,@/E`<Q6`^2!S!@^MT-/JPXO",]*`X1_3Z,,SP#/2P\Q5B^SV10@!
+M5HOQQP8$54,`=`IJ#%;H6_W__UE9B\9>7<($`%6+[%WI%OW__^F:!P``58OL
+MBT4(5HM(/`/(#[=!%(U1&`/0#[=!!FOP*`/R.]9T&8M-##M*#'(*BT((`T(,
+M.\AR#(/"*#O6=>HSP%Y=PXO"Z_GH7PD``(7`=0,RP,-DH1@```!6OO@,1@"+
+M4`3K!#O0=!`SP(O*\`^Q#H7`=?`RP%[#L`%>PU6+[(-]"`!U!\8%%`U&``'H
+M?`<``.@B.@``A,!U!#+`7</H)IL``(3`=0IJ`.@S.@``6>OIL`%=PU6+[(/L
+M#%:+=0B%]G0%@_X!=7SHW@@``(7`="J%]G4F:/P,1@#H7YD``%F%P'0$,L#K
+M5V@(#48`Z$R9``#WV%D:P/[`ZT2A:.9#`(UU]%>#X!^__`Q&`&H@62O(@\C_
+MT\@S!6CF0P")1?2)1?B)1?REI:6_"`U&`(E%](E%^(UU](E%_+`!I:6E7UZ+
+MY5W#:@7H;`@``,QJ"&C@N$,`Z%H&``"#9?P`N$U:``!F.04``$``=5VA/`!`
+M`(&X``!``%!%``!U3+D+`0``9CF(&`!``'4^BT4(N0``0``KP5!1Z&G^__]9
+M687`=">#>"0`?"''1?S^____L`'K'XM%[(L`,\F!.`4``,`/E,&+P<.+9>C'
+M1?S^____,L#H(P8``,-5B^SHS0<``(7`=`^`?0@`=0DSP+GX#$8`AP%=PU6+
+M[(`]%`U&``!T!H!]#`!U$O]U".C.F0``_W4(Z,PX``!96;`!7<-5B^RA:.9#
+M`(O(,P7\#$8`@^$?_W4(T\B#^/]U!^C.EP``ZPMH_`Q&`.@RF```6??861O`
+M]]`C10A=PU6+[/]U".BZ____]]A9&\#WV$A=P\S,S,S,S,R`^4!S%8#Y(',&
+M#Z7"T^##B]`SP(#A']/BPS/`,]+#S(M$)`B+3"00"\B+3"0,=0F+1"0$]^'"
+M$`!3]^&+V(M$)`CW9"04`]B+1"0(]^$#TUO"$`#,S,S,S,S,S,S,S,Q75E4S
+M_S/MBT0D%`O`?15'18M4)!#WV/?:@]@`B40D%(E4)!"+1"0<"\!]%$>+5"08
+M]]CWVH/8`(E$)!R)5"08"\!U*(M,)!B+1"04,]+W\8O8BT0D$/?QB_"+P_=D
+M)!B+R(O&]V0D&`/1ZT>+V(M,)!B+5"04BT0D$-'KT=G1ZM'8"]MU]/?QB_#W
+M9"0<B\B+1"08]^8#T7(..U0D%'<(<@\[1"00=@E.*T0D&!M4)!PSVRM$)!`;
+M5"0437D']]KWV(/:`(O*B].+V8O(B\9/=0?WVO?8@]H`75Y?PA``S%-6BT0D
+M&`O`=1B+3"04BT0D$#/2]_&+V(M$)`SW\8O3ZT&+R(M<)!2+5"00BT0D#-'I
+MT=O1ZM'8"\EU]/?SB_#W9"08B\B+1"04]^8#T7(..U0D$'<(<@<[1"0,=@%.
+M,]*+QEY;PA``S,S,S,S,S,Q3BT0D%`O`=1B+3"00BT0D##/2]_&+1"0(]_&+
+MPC/2ZU"+R(M<)!"+5"0,BT0D"-'IT=O1ZM'8"\EU]/?SB\CW9"04D?=D)!`#
+MT7(..U0D#'<(<@X[1"0(=@@K1"00&U0D%"M$)`@;5"0,]]KWV(/:`%O"$`!5
+MB^S_=0CH7/O__UE=P\S,S,S,S,S,S,S,S,Q6:@+H.9<``.@X!P``4.COF```
+MZ"&:``"+\.@Q!P``:@&)!NC;^___@\0,7H3`=&S;XNB$!P``:*#T00#H8_W_
+M_^BO!```4.B`CP``65F%P'5*Z/P&``#H1P<``(7`=`MH`/1!`.B/EP``6>@P
+M10``Z"M%``#HY08``.C1!@``4.@=F0``6>BUE0``A,!T!>A.D0``Z+<&```S
+MP,-J!^AB!```S,S,S,S,S,S,S,S,S.C1!@``,\##S,S,S,S,S,SHC@4``.B&
+M!@``4.@ZF0``6<-J%&@`N4,`Z"("``!J`>CE^O__683`=0=J!^@4!```,MN(
+M7>>#9?P`Z);Z__^(1=RA]`Q&`#/)03O!=-R%P'5)B0WT#$8`:+0R0P!HF#)#
+M`.B6EP``65F%P'01QT7\_O___[C_````Z?8```!HE#)#`&AD,D,`Z!27``!9
+M6<<%]`Q&``(```#K!8K9B%WG_W7<Z+S[__]9Z$$&``"+\#/_.3YT&E;H'OO_
+M_UF$P'0/5VH"5XLVB\[H8@$``/_6Z"`&``"+\#D^=!-6Z/GZ__]9A,!T"/\V
+MZ..*``!9Z&T$```/M\!0Z%*6``!05V@``$``Z!GJ__^+\.C0B0``A,!U!E;H
+M[XH``(3;=07HB8H``%=J`>A7^___65G'1?S^____B\;K/8M-[(L!BP")1>!1
+M4.BWA@``65G#BV7HZ(R)``"$P'4(_W7@Z%N*``"`?><`=07H,HH``,=%_/[_
+M__^+1>#H#0$``,/,S,S,S,SH9`0``.F(_O__.PUHYD,`\G4"\L/RZ>@%``#,
+MS,S,S%6+[%;_=0B+\>@"+O__QP:`54,`B\9>7<($`(-A!`"+P8-A"`#'002(
+M54,`QP&`54,`P\S,S,S,S,S,S,S,S,R-003'`6A50P!0Z(@Q``!9PU6+[(/L
+M#(U-].B9+?__:`2W0P"-1?10Z$LI``#,58OL@^P,C4WTZ)____]H'+E#`(U%
+M]%#H+BD``,SI_D@``/\E8#)#`,S,S,S,S,S,S,QH4"%"`&3_-0````"+1"00
+MB6PD$(UL)!`KX%-65Z%HYD,`,47\,\50B67H_W7XBT7\QT7\_O___XE%^(U%
+M\&2C`````/+#BTWP9(D-`````%E?7UY;B^5=4?+#58OL@R48#48``(/L*%,S
+MVT,)'7#F0P!J"NA#*@$`A<`/A&T!``"#9?``,\"##7#F0P`",\E65XD=&`U&
+M`(U]V%,/HHOS6XD'B7<$B4\(B5<,BT78BTWDB47X@?%I;F5)BT7@-6YT96P+
+MR(M%W&H!-4=E;G4+R%AJ`%E3#Z*+\UN)!XEW!(E/"(E7#'5#BT78)?`__P\]
+MP`8!`'0C/6`&`@!T'#UP!@(`=!4]4`8#`'0./6`&`P!T!SUP!@,`=1&+/1P-
+M1@"#SP&)/1P-1@#K!HL]'`U&`(-]^`>+1>2)1>B+1>")1?R)1>Q\,FH'6#/)
+M4P^BB_-;C5W8B0.)<P2)2PB)4PR+1=RI``(``(E%\(M%_'0)@\\"B3T<#48`
+M7UZI```0`'1M@PUPYD,`!,<%&`U&``(```"I````"'15J0```!!T3C/)#P'0
+MB47TB57XBT7TBTWX@^`&,\F#^`9U,X7)=2^A<.9#`(/(",<%&`U&``,```#V
+M1?`@HW#F0P!T$H/((,<%&`U&``4```"C<.9#`#/`6XOE7<,SP$##,\`Y!1P7
+M1@`/E<##58OL@>PD`P``4U9J%^BE*`$`A<!T!8M-",TI,_:-A=S\__]HS`(`
+M`%90B34@#48`Z`8$``"#Q`R)A8S]__^)C8C]__^)E83]__^)G8#]__^)M7S]
+M__^)O7C]__]FC)6D_?__9HR-F/W__V:,G73]__]FC(5P_?__9HRE;/W__V:,
+MK6C]__^<CX6<_?__BT4$B864_?__C44$B86@_?__QX7<_/__`0`!`(M`_&I0
+MB860_?__C46H5E#H?0,``(M%!(/$#,=%J!4``$#'1:P!````B46T_Q6L,4,`
+M5HU8__?;C46HB47XC87<_/__&MN)1?S^P_\5M#%#`(U%^%#_%;`Q0P"%P'4-
+M#[;#]]@;P"$%(`U&`%Y;B^5=PU6+[(/L1&I$C46\:@!0Z`T#``"#Q`R-1;Q0
+M_Q6X,4,`]D7H`70&#[=%[.L#:@I8B^5=PV@0\T$`_Q6T,4,`P\Q5B^R+10B+
+M`($X8W-MX'4E@W@0`W4?BT`4/2`%DQET&STA!9,9=!0](@63&70-/0!`F0%T
+M!C/`7<($`.CC@0``S(,E(`U&``##58OL@^P4@V7T`(-E^`"A:.9#`%97OT[F
+M0+N^``#__SO'=`V%QG0)]]"C9.9#`.MFC47T4/\5Q#%#`(M%^#-%](E%_/\5
+MP#%#`#%%_/\5D#!#`#%%_(U%[%#_%;PQ0P"+3?"-1?PS3>PS3?PSR#O/=0>Y
+M3^9`N^L0A<YU#(O!#1%'``#!X!`+R(D-:.9#`/?1B0UDYD,`7UZ+Y5W#N`!`
+M``##S,S,S,PSP,-H*`U&`/\5R#%#`,-H```#`&@```$`:@#HSY(``(/$#(7`
+M=0'#:@?HAOW__\RX,`U&`,/H(4O^_XM(!(,(!(E(!.CG____BT@$@P@"B4@$
+MPS/`.05TYD,`#Y3`P[@8%T8`P[@4%T8`PU-6OBRQ0P"[++%#`#OS<QA7BSZ%
+M_W0)B\_H%_O____7@\8$._-RZE]>6\/,S,S,S,S,S,S,4U:^-+%#`+LTL4,`
+M._-S&%>+/H7_=`F+S^CB^O___]>#Q@0[\W+J7UY;PU6+[&H`_Q6T,4,`_W4(
+M_Q6P,4,`:`D$`,#_%0PP0P!0_Q7,,4,`7<-5B^R!["0#``!J%^AI)0$`A<!T
+M!6H"6<TIHS@.1@")#30.1@")%3`.1@")'2P.1@")-2@.1@")/20.1@!FC!50
+M#D8`9HP-1`Y&`&:,'2`.1@!FC`4<#D8`9HPE&`Y&`&:,+10.1@"<CP5(#D8`
+MBT4`HSP.1@"+102C0`Y&`(U%"*-,#D8`BX7<_/__QP6(#48``0`!`*%`#D8`
+MHT0-1@#'!3@-1@`)!`#`QP4\#48``0```,<%2`U&``$```!J!%AKP`#'@$P-
+M1@`"````:@18:\``BPUHYD,`B4P%^&H$6,'@`(L-9.9#`(E,!?AHH%5#`.CA
+M_O__B^5=P\S,BTPD#`^V1"0(B]>+?"0$A<D/A#P!``!IP`$!`0&#^2`/CM\`
+M``"!^8`````/C(L````/NB4<#48``7,)\ZJ+1"0$B_K##[HE<.9#``$/@[(`
+M``!F#V[`9@]PP``#SP\1!X/'$(/G\"O/@?F`````?DR-I"0`````C:0D````
+M`)!F#W\'9@]_1Q!F#W]'(&8/?T<P9@]_1T!F#W]'4&8/?T=@9@]_1W"-OX``
+M``"!Z8````#WP0#___]UQ>L3#[HE<.9#``%S/F8/;L!F#W#``(/Y('(<\P]_
+M!_,/?T<0@\<@@^D@@_D@<^SWP1\```!T8HU\.>#S#W\'\P]_1Q"+1"0$B_K#
+M]\$#````=`Z(!T>#Z0'WP0,```!U\O?!!````'0(B0>#QP2#Z03WP?C___]T
+M((VD)`````"-FP````")!XE'!(/'"(/I"/?!^/___W7MBT0D!(OZP\S,S,S,
+MS%=6BW0D$(M,)!2+?"0,B\&+T0/&._YV"#OX#X*4`@``@_D@#X+2!```@?F`
+M````<Q,/NB5PYD,``0^"C@0``.GC`0``#[HE'`U&``%S"?.DBT0D#%Y?PXO'
+M,\:I#P```'4.#[HE<.9#``$/@N`#```/NB4<#48```^#J0$``/?'`P````^%
+MG0$``/?&`P````^%K`$```^ZYP)S#8L&@^D$C78$B0>-?P0/NN<#<Q'S#WX.
+M@^D(C78(9@_6#XU_"/?&!P```'1E#[KF`P^#M````&8/;T[TC7;TB_]F#V]>
+M$(/I,&8/;T8@9@]O;C"-=C"#^3!F#V_39@\Z#]D,9@]_'V8/;^!F#SH/P@QF
+M#W]'$&8/;\UF#SH/[`QF#W]O((U_,'VWC78,Z:\```!F#V].^(UV^(U)`&8/
+M;UX0@^DP9@]O1B!F#V]N,(UV,(/Y,&8/;]-F#SH/V0AF#W\?9@]OX&8/.@_"
+M"&8/?T<09@]OS68/.@_L"&8/?V\@C7\P?;>-=@CK5F8/;T[\C7;\B_]F#V]>
+M$(/I,&8/;T8@9@]O;C"-=C"#^3!F#V_39@\Z#]D$9@]_'V8/;^!F#SH/P@1F
+M#W]'$&8/;\UF#SH/[`1F#W]O((U_,'VWC78$@_D0?!/S#V\.@^D0C7809@]_
+M#XU_$.OH#[KA`G,-BP:#Z02-=@2)!XU_!`^ZX0-S$?,/?@Z#Z0B-=@AF#]8/
+MC7\(BP2-M/E!`/_@]\<#````=!.*!H@'28/&`8/'`??'`P```'7MB]&#^2`/
+M@JX"``#!Z0+SI8/B`_\DE;3Y00#_)(W$^4$`D,3Y00#,^4$`V/E!`.SY00"+
+M1"0,7E_#D(H&B`>+1"0,7E_#D(H&B`>*1@&(1P&+1"0,7E_#C4D`B@:(!XI&
+M`8A'`8I&`HA'`HM$)`Q>7\.0C30QC3PY@_D@#X)1`0``#[HE<.9#``$/@I0`
+M``#WQP,```!T%(O7@^(#*\J*1O^(1_].3X/J`77S@_D@#X(>`0``B]'!Z0*#
+MX@.#[@2#[P3]\Z7\_R258/I!`)!P^D$`>/I!`(CZ00"<^D$`BT0D#%Y?PY"*
+M1@.(1P.+1"0,7E_#C4D`BD8#B$<#BD8"B$<"BT0D#%Y?PY"*1@.(1P.*1@*(
+M1P**1@&(1P&+1"0,7E_#]\</````=`])3D^*!H@']\</````=?&!^8````!R
+M:('N@````('O@````/,/;P;S#V].$/,/;U8@\P]O7C#S#V]F0/,/;VY0\P]O
+M=F#S#V]^</,/?P?S#W]/$/,/?U<@\P]_7S#S#W]G0/,/?V]0\P]_=V#S#W]_
+M<('I@````/?!@/___W60@_D@<B.#[B"#[R#S#V\&\P]O3A#S#W\'\P]_3Q"#
+MZ2#WP>#___]UW??!_/___W05@^\$@^X$BP:)!X/I!/?!_/___W7KA<ET#X/O
+M`8/N`8H&B`>#Z0%U\8M$)`Q>7\/K`\S,S(O&@^`/A<`/A>,```"+T8/A?\'J
+M!W1FC:0D`````(O_9@]O!F8/;TX09@]O5B!F#V]>,&8/?P=F#W]/$&8/?U<@
+M9@]_7S!F#V]F0&8/;VY09@]O=F!F#V]^<&8/?V=`9@]_;U!F#W]W8&8/?W]P
+MC;:`````C;^`````2G6CA<ET7XO1P>H%A=)T(8V;`````/,/;P;S#V].$/,/
+M?P?S#W]/$(UV((U_($IUY8/A'W0PB\'!Z0)T#XL6B1>#QP2#Q@2#Z0%U\8O(
+M@^$#=!.*!H@'1D=)=?>-I"0`````C4D`BT0D#%Y?PXVD)`````"+_[H0````
+M*]`KRE&+PHO(@^$#=`F*%H@71D=)=??!Z`)T#8L6B1>-=@2-?P1(=?-9Z>G^
+M__]5B^R#[!BA:.9#`(U-Z(-EZ``SP8M-"(E%\(M%#(E%](M%%$#'1>P`_T$`
+MB4WXB47\9*$`````B47HC47H9*,`````_W484?]U$.@])P``B\B+1>ADHP``
+M``"+P8OE7<-5B^R#[#A3@7T((P$``'42N-/]00"+30R)`3/`0.FV````@V7(
+M`,=%S,7_00"A:.9#`(U-R#/!B470BT48B474BT4,B478BT4<B47<BT4@B47@
+M@V7D`(-EZ`"#9>P`B67DB6WH9*$`````B47(C47(9*,`````QT7X`0```(M%
+M"(E%\(M%$(E%].BJ)0``BT`(B47\BTW\_Q5@,D,`C47P4(M%"/\P_U7\65F#
+M9?@`@WWL`'079(L=`````(L#BUW(B0-DB1T`````ZPF+1<ADHP````"+1?A;
+MB^5=PU6+[%%35HMU#%>+?0B+3PR+T8M?$(E-_(7V>#9KP12#P`@#PX/Y_W1)
+MBWT0@^@423EX_(M]"'T*BWT0.SB+?0A^!8/Y_W4'BU7\3HE-_(7V>=*+111!
+MB0B+11B)$#M7#'<0.\IW#&O!%%]>`\-;B^5=P^B[=@``S%6+[%%3BT4,@\`,
+MB47\9(L=`````(L#9*,`````BT4(BUT,BVW\BV/\_^!;B^5=P@@`58OL45%3
+M5E=DBS4`````B77XQT7\U?Y!`&H`_W4,_W7\_W4(_Q70,4,`BT4,BT`$@^#]
+MBTT,B4$$9(L]`````(M=^(D[9(D=`````%]>6XOE7<((`%6+[%;\BW4,BTX(
+M,\[HZ.___VH`5O]V%/]V#&H`_W40_W80_W4(Z)$Q``"#Q"!>7<-5B^R+30Q6
+MBW4(B0[H&B0``(M()(E.!.@/)```B7`DB\9>7<-5B^Q6Z/XC``"+=0@[<"1U
+M$.CQ(P``C4@DBT8$B0%>7</HX2,``(M().L)BT$$._!T"HO(@WD$`'7QZPB+
+M1@2)003KVNB5=0``S%6+[.BU(P``BT`DA<!T#HM-"#D(=`R+0`2%P'7U,\!`
+M7<,SP%W#58OL45/\BT4,BT@(,TT,Z"'O__^+10B+0`2#X&9T$8M%#,=`)`$`
+M```SP$#K;.MJ:@&+10S_<!B+10S_<!2+10S_<`QJ`/]U$(M%#/]P$/]U".B@
+M,```@\0@BT4,@W@D`'4+_W4(_W4,Z'C^__]J`&H`:@!J`&H`C47\4&@C`0``
+MZ-G\__^#Q!R+1?R+70R+8QR+:R#_X#/`0%N+Y5W#58OL@^P(4U97_(E%_#/`
+M4%!0_W7\_W44_W40_W4,_W4(Z#(P``"#Q"")1?A?7EN+1?B+Y5W#58OL4XM=
+M$(O#5H/H``^$Y18``(/H`0^$RQ8``(/H`0^$DQ8``(/H`0^$0!8``(M5#(/H
+M`0^$K!4``(MU"%>#^R`/@J$$``"+!CL"#X2`````#[;X#[8"*_AT%C/)A?\/
+MG\&-#$W_____A<D/A9L(```/MGX!#[9"`2OX=!8SR87_#Y_!C0Q-_____X7)
+M#X5Y"```#[9^`@^V0@(K^'06,\F%_P^?P8T,3?____^%R0^%5P@```^V3@,/
+MMD(#*\AT$C/`A<D/G\"-#$7_____ZP(SR87)#X4Q"```BT8$.T($='\/MO@/
+MMD($*_AT%(7_#Y_!C0Q-_____X7)#X4*"```#[9^!0^V0@4K^'06,\F%_P^?
+MP8T,3?____^%R0^%Z`<```^V?@8/MD(&*_AT%C/)A?\/G\&-#$W_____A<D/
+MA<8'```/MDX'#[9"!RO(=!(SP(7)#Y_`C0Q%_____^L",\F%R0^%H`<``(M&
+M"#M""'1_#[;X#[9"""OX=!2%_P^?P8T,3?____^%R0^%>0<```^V?@D/MD()
+M*_AT%C/)A?\/G\&-#$W_____A<D/A5<'```/MGX*#[9""BOX=!8SR87_#Y_!
+MC0Q-_____X7)#X4U!P``#[9."P^V0@LKR'02,\"%R0^?P(T,1?_____K`C/)
+MA<D/A0\'``"+1@P[0@QT?P^V^`^V0@PK^'04A?\/G\&-#$W_____A<D/A>@&
+M```/MGX-#[9"#2OX=!8SR87_#Y_!C0Q-_____X7)#X7&!@``#[9^#@^V0@XK
+M^'06,\F%_P^?P8T,3?____^%R0^%I`8```^V3@\/MD(/*\AT$C/`A<D/G\"-
+M#$7_____ZP(SR87)#X5^!@``BT80.T(0#X2`````#[9"$`^V?A`K^'04A?\/
+MG\&-#$W_____A<D/A5(&```/MGX1#[9"$2OX=!8SR87_#Y_!C0Q-_____X7)
+M#X4P!@``#[9^$@^V0A(K^'06,\F%_P^?P8T,3?____^%R0^%#@8```^V3A,/
+MMD(3*\AT$C/`A<D/G\"-#$7_____ZP(SR87)#X7H!0``BT84.T(4='\/MO@/
+MMD(4*_AT%(7_#Y_!C0Q-_____X7)#X7!!0``#[9^%0^V0A4K^'06,\F%_P^?
+MP8T,3?____^%R0^%GP4```^V?A8/MD(6*_AT%C/)A?\/G\&-#$W_____A<D/
+MA7T%```/MDX7#[9"%RO(=!(SP(7)#Y_`C0Q%_____^L",\F%R0^%5P4``(M&
+M&#M"&'1_#[;X#[9"&"OX=!2%_P^?P8T,3?____^%R0^%,`4```^V?AD/MD(9
+M*_AT%C/)A?\/G\&-#$W_____A<D/A0X%```/MGX:#[9"&BOX=!8SR87_#Y_!
+MC0Q-_____X7)#X7L!```#[9.&P^V0ALKR'02,\"%R0^?P(T,1?_____K`C/)
+MA<D/A<8$``"+1AP[0AQT?P^V^`^V0APK^'04A?\/G\&-#$W_____A<D/A9\$
+M```/MGX=#[9"'2OX=!8SR87_#Y_!C0Q-_____X7)#X5]!```#[9^'@^V0AXK
+M^'06,\F%_P^?P8T,3?____^%R0^%6P0```^V3A\/MD(?*\AT$C/`A<D/G\"-
+M#$7_____ZP(SR87)#X4U!```:B!9*]D#\0/1.]D/@U_[__\#\P/3@_L?#X<5
+M!```_R2=FA="`(M&Y#M"Y`^$@0````^V^`^V0N0K^'06,\F%_P^?P8T,3?__
+M__^%R0^%XP,```^V?N4/MD+E*_AT%C/)A?\/G\&-#$W_____A<D/A<$#```/
+MMG[F#[9"YBOX=!8SR87_#Y_!C0Q-_____X7)#X6?`P``#[9.YP^V0N<KR'02
+M,\"%R0^?P(T,1?_____K`C/)A<D/A7D#``"+1N@[0N@/A($````/MO@/MD+H
+M*_AT%C/)A?\/G\&-#$W_____A<D/A4P#```/MG[I#[9"Z2OX=!8SR87_#Y_!
+MC0Q-_____X7)#X4J`P``#[9^Z@^V0NHK^'06,\F%_P^?P8T,3?____^%R0^%
+M"`,```^V3NL/MD+K*\AT$C/`A<D/G\"-#$7_____ZP(SR87)#X7B`@``BT;L
+M.T+L#X2!````#[;X#[9"["OX=!8SR87_#Y_!C0Q-_____X7)#X6U`@``#[9^
+M[0^V0NTK^'06,\F%_P^?P8T,3?____^%R0^%DP(```^V?NX/MD+N*_AT%C/)
+MA?\/G\&-#$W_____A<D/A7$"```/MD[O#[9"[RO(=!(SP(7)#Y_`C0Q%____
+M_^L",\F%R0^%2P(``(M&\#M"\`^$@0````^V^`^V0O`K^'06,\F%_P^?P8T,
+M3?____^%R0^%'@(```^V?O$/MD+Q*_AT%C/)A?\/G\&-#$W_____A<D/A?P!
+M```/MG[R#[9"\BOX=!8SR87_#Y_!C0Q-_____X7)#X7:`0``#[9.\P^V0O,K
+MR'02,\"%R0^?P(T,1?_____K`C/)A<D/A;0!``"+1O0[0O0/A((````/MD+T
+M#[9^]"OX=!8SR87_#Y_!C0Q-_____X7)#X6&`0``#[9^]0^V0O4K^'06,\F%
+M_P^?P8T,3?____^%R0^%9`$```^V?O8/MD+V*_AT%C/)A?\/G\&-#$W_____
+MA<D/A4(!```/MD[W#[9"]RO(=!(SP(7)#Y_`C0Q%_____^L",\F%R0^%'`$`
+M`(M&^#M"^`^$@0````^V^`^V0O@K^'06,\F%_P^?P8T,3?____^%R0^%[P``
+M``^V?OD/MD+Y*_AT%C/)A?\/G\&-#$W_____A<D/A<T````/MG[Z#[9"^BOX
+M=!8SR87_#Y_!C0Q-_____X7)#X6K````#[9.^P^V0OLKR'02,\"%R0^?P(T,
+M1?_____K`C/)A<D/A84```"+1OP[0OQT=0^V^`^V0OPK^'02,\F%_P^?P8T,
+M3?____^%R75@#[9^_0^V0OTK^'02,\F%_P^?P8T,3?____^%R75"#[9^_@^V
+M0OXK^'02,\F%_P^?P8T,3?____^%R74D#[9._P^V0O\KR'02,\"%R0^?P(T,
+M1?_____K`C/)A<EU`C/)B\%?Z>8-``"+1N,[0N-T=0^V^`^V0N,K^'02,\F%
+M_P^?P8T,3?____^%R773#[9^Y`^V0N0K^'02,\F%_P^?P8T,3?____^%R76U
+M#[9^Y0^V0N4K^'02,\F%_P^?P8T,3?____^%R767#[9.Y@^V0N8KR'02,\"%
+MR0^?P(T,1?_____K`C/)A<D/A7'___^+1N<[0N</A($````/MO@/MD+G*_AT
+M%C/)A?\/G\&-#$W_____A<D/A43___\/MG[H#[9"Z"OX=!8SR87_#Y_!C0Q-
+M_____X7)#X4B____#[9^Z0^V0NDK^'06,\F%_P^?P8T,3?____^%R0^%`/__
+M_P^V3NH/MD+J*\AT$C/`A<D/G\"-#$7_____ZP(SR87)#X7:_O__BT;K.T+K
+M#X2!````#[;X#[9"ZROX=!8SR87_#Y_!C0Q-_____X7)#X6M_O__#[9^[`^V
+M0NPK^'06,\F%_P^?P8T,3?____^%R0^%B_[__P^V?NT/MD+M*_AT%C/)A?\/
+MG\&-#$W_____A<D/A6G^__\/MD[N#[9"[BO(=!(SP(7)#Y_`C0Q%_____^L"
+M,\F%R0^%0_[__XM&[SM"[P^$@0````^V^`^V0N\K^'06,\F%_P^?P8T,3?__
+M__^%R0^%%O[__P^V?O`/MD+P*_AT%C/)A?\/G\&-#$W_____A<D/A?3]__\/
+MMG[Q#[9"\2OX=!8SR87_#Y_!C0Q-_____X7)#X72_?__#[9.\@^V0O(KR'02
+M,\"%R0^?P(T,1?_____K`C/)A<D/A:S]__^+1O,[0O,/A($````/MO@/MD+S
+M*_AT%C/)A?\/G\&-#$W_____A<D/A7_]__\/MG[T#[9"]"OX=!8SR87_#Y_!
+MC0Q-_____X7)#X5=_?__#[9^]0^V0O4K^'06,\F%_P^?P8T,3?____^%R0^%
+M._W__P^V3O8/MD+V*\AT$C/`A<D/G\"-#$7_____ZP(SR87)#X45_?__BT;W
+M.T+W#X2"````#[9"]P^V?O<K^'06,\F%_P^?P8T,3?____^%R0^%Y_S__P^V
+M?O@/MD+X*_AT%C/)A?\/G\&-#$W_____A<D/A<7\__\/MG[Y#[9"^2OX=!8S
+MR87_#Y_!C0Q-_____X7)#X6C_/__#[9.^@^V0OHKR'02,\"%R0^?P(T,1?__
+M___K`C/)A<D/A7W\__^+1OL[0OL/A($````/MO@/MD+[*_AT%C/)A?\/G\&-
+M#$W_____A<D/A5#\__\/MG[\#[9"_"OX=!8SR87_#Y_!C0Q-_____X7)#X4N
+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
+M9/\U`````*%HYD,`,\10C40D!&2C`````(M$)"B+6`B+<`R#_O]T.H-\)"S_
+M=`8[="0L=BV--':+#+.)3"0,B4@,@WRS!`!U%V@!`0``BT2S".A)````BT2S
+M".A?````Z[>+3"0$9(D-`````(/$&%]>6\,SP&2+#0````"!>010-T(`=1"+
+M40R+4@PY40AU!;@!````PU-1NY#F0P#K"U-1NY#F0P"+3"0,B4L(B4,$B6L,
+M55%06%E=65O"!`#_T,-6Z._J__^+<`2%]G0)B\[H);?____6Z+$\``#,B_]5
+MB^R+10AFBPB#P`)FA<EU]2M%"-'X2%W#Z5M/``"+_U6+[%WIBD\``(O_58OL
+M7>EM4```B_]5B^R+50Q6BW4(5P^W.@^W#BO/=14K\F:%_W0.@\("#[<Z#[<,
+M%BO/=.U?7H7)>06#R/]=PS/`A<D/G\!=P\S,S,S,S,R+3"0$]\$#````="2*
+M`8/!`83`=$[WP0,```!U[P4`````C:0D`````(VD)`````"+`;K__OY^`]"#
+M\/\SPH/!!*D``0&!=.B+0?R$P'0RA.1T)*D``/\`=!.I````_W0"Z\V-0?^+
+M3"0$*\'#C4'^BTPD!"O!PXU!_8M,)`0KP<.-0?R+3"0$*\'#B_]5B^R![(0$
+M``"A:.9#`#/%B47\@WT8`(M%$%.+712)A:#[__]U&.C"4@``QP`6````Z)91
+M``"#R/_I$0$``(7;=`2%P'3@5E?_=1R-C7S[___HPP8``(M-"(V]D/O__S/`
+M,]*KJZNKB\&+O:#[__^#X`*)A8S[__\+PHF]D/O__XF=E/O__XF5F/O__W4*
+MB)6<^___A?]U!\:%G/O__P'_=2"-A9#[__^)A:#[__^-A8#[__]0_W48C86@
+M^____W4,45"-C:3[___HX04``(V-I/O__^C4"```B_"%_W1+BT4(,\F#X`$+
+MP70<A=MU!(7V=6^+A9C[__\[PW4JA?9X*3OS=B7K6XN%C/O__PO!=$V%VW05
+MA?9Y!(@/ZPV+A9C[__\[PW1-B`P'C8WD^___Z&<&``"`O8C[__\`=`V+C7S[
+M__^#H5`#``#]7XO&7HM-_#/-6^@3M/__B^5=PX7;=06#SO_KPXN%F/O__SO#
+M=;9J_EZ(3!__Z["+_U6+[('LA`0``*%HYD,`,\6)1?R#?1@`BT404XM=%(F%
+MH/O__W48Z$91``#'`!8```#H&E```(/(_^D7`0``A=MT!(7`=.!65_]U'(V-
+M?/O__^A'!0``BTT(C;V0^___,\`STJNKJZN+P8N]H/O__X/@`HF%C/O__PO"
+MB;V0^___B9V4^___B968^___=0J(E9S[__^%_W4'QH6<^___`?]U((V%D/O_
+M_XF%H/O__XV%@/O__U#_=1B-A:#[____=0Q14(V-I/O__^B:!```C8VD^___
+MZ'0(``"+\(7_=%&+10B#X`&#R`!T'(7;=02%]G5VBX68^___.\-U+H7V>#`[
+M\W8LZV*+A8S[__^#R`!T4X7;=!N%]GD',\!FB0?K$(N%F/O__SO#=%`SR6:)
+M#$>-C>3[___HY00``("]B/O__P!T#8N-?/O__X.A4`,``/U?B\9>BTW\,\U;
+MZ)&R__^+Y5W#A=MU!8/._^O#BX68^___.\-ULVK^7C/`9HE$7_[KK8.Y!`0`
+M``!U!K@``@``PXN!``0``-'HPXO_58OL48/(_S/25HMU"/?V5X/@_HOY@_@"
+M<P_HM4\``,<`#````#+`ZU-3,]L#]CF?!`0``'4(@?X`!```=@@[MP`$``!W
+M!+`!ZS%6Z$)+``")1?Q9A<!T&HU%_%"-CP0$``#H-@0``(M%_+,!B;<`!```
+M4.C@2@``68K#6U]>B^5=P@0`B_]5B^R+111(@^@!="Z#Z`%T)8/H"70@@WT4
+M#70>BD40/&-T"#QS=`0RR>L"L0$SP(3)#Y3`7<.P`5W#,L!=PXO_58OLBT44
+M2(/H`70]@^@!=#2#Z`ET+X-]%`UT*8M%"#/)@^`$L@$+P74"BM%F@WT08W0'
+M9H-]$'-U`K$!,\`ZT0^4P%W#L`%=PS+`7<.+_U:+\5>+O@0$``#HPO[__X7_
+M=00#QNL"`\=?7L.+_U6+[%-6B_%7C4Y`B[D$!```A?]U`HOYZ)?^__^+70A(
+M`_B)?C2+3BB%R7\$A=MT,#/2B\/W=0Q)@,(PB4XHB]B`^CE^$8!]$``/E,#^
+MR"3@!&$L.@+0BT8TB!#_3C3KQ8M&-"OXB7XX0%^)1C1>6UW"#`"+_U6+[%%1
+M4U:+\5>-3D"+N00$``"%_W4"B_GH(/[__XM5#$B+70@#^(E^-(M.*(7)?P:+
+MPPO"=#IJ`/]U$(U!_U)3B48HZ&G=``"`P3")7?R+V(#Y.7X1@'T4``^4P/[(
+M).`$82PZ`LB+1C2("/].-.NYBT8T*_B)?CA`7XE&-%Y;B^5=PA``B_]5B^Q6
+M,_8Y=1!^'%>+?12+30A7_W4,Z$D8``"#/_]T!D8[=1!\Z5]>7<.+_U6+[%8S
+M]CEU$'XA4V8/OET,5XM]%(M-"%=3Z%L8``"#/_]T!D8[=1!\ZU];7EW#B_]5
+MB^Q1,\")3?R)`8E!!(E!"(E!#(E!$(E!%(E!&(E!'(E!((E!)(E!*&:)03")
+M03B(03R)@4`$``")@40$``"+P8OE7<.+_U6+[%$STHE-_#/`B1%FB4$RB\&)
+M402)40B)40R)41")412)41B)41R)42")422)42B(43")43B(43R)D4`$``")
+MD40$``"+Y5W#B_]5B^Q6B_'H8/___XM%"(L`B89(!```BT4,B0:+11")1@2+
+M11B)1@B+112)1A"+11R)1A2+QEY=PA@`B_]5B^Q6B_'H:____XM%"(L`B89(
+M!```BT4,B0:+11")1@2+11B)1@B+112)1A"+11R)1A2+QEY=PA@`B_]5B^Q6
+M_W4<B_'_=1C_=13_=1#_=0S_=0CH:?___X.F4`0```#H$TP``(E&#(O&7EW"
+M&`"+_U6+[%;_=1R+\?]U&/]U%/]U$/]U#/]U".AP____@Z90!````.C>2P``
+MB48,B\9>7<(8`(O_58OL5XOYBTT(QD<,`(7)=`J+`8E'!(M!!.L6H6P21@"%
+MP'42H1#H0P")1P2A%.A#`(E'".M$5NC140``C5<$B0=2C7<(BTA,B0J+2$A0
+MB0[H#5,``%;_-^@R4P``BP^#Q!"+@5`#``!>J`)U#8/(`HF!4`,``,9'#`&+
+MQU]=P@0`B_]6B_'_M@0$``#HQ48``(.F!`0```!97L.+_U6+[%:+\?\VZ*Q&
+M``"+50B#)@!9BP*)!HO&@R(`7EW"!`"+_U6+[(M%#(M-"%.+`(N`B````(L`
+MBACK!3K#=`=!B@&$P'7UB@%!A,!T*.L)/&5T"SQ%=`=!B@&$P'7QB]%)@#DP
+M=/HX&74!28H"04*(`83`=?9;7<.+_U6+[(I-"(U!X#Q:=P\/OL$/MH@X7D,`
+M@^$/ZP(SR8M%#`^VA,A87D,`P>@$7<((`(O_58OLBTT(C4'@9H/X6G</#[?!
+M#[:(.%Y#`(/A#^L",\F+10P/MH3(6%Y#`,'H!%W""`"+_U6+[%:+=0@/O@90
+MZ*HD``"#^&7K#$8/M@90Z(])``"%P%EU\0^^!E#HC20``%F#^'AU`X/&`HM%
+M#(H.BP"+@(@```"+`(H`B`9&B@:(#HK(B@9&A,!U\UY=PXO_58OL45-6B_&-
+M3?Q7:@I1BWX,BQ^#)P"+1A"#9?P`2%#HYDD``(M-"(/$#(D!BT8,@S@B=`^+
+M1?P[1A!R!XE&$+`!ZP(RP(,_`'4&A=MT`HD?7UY;B^5=P@0`B_]5B^Q14U:+
+M\8U-_%=J"E&+?@R+'X,G`(M&$(-E_`"#Z`)0Z+1)``"+30B#Q`R)`8M&#(,X
+M(G0/BT7\.T80<@>)1A"P`>L",L"#/P!U!H7;=`*)'U]>6XOE7<($`(O_5HOQ
+MC8Y(!```Z-43``"$P'4%@\C_7L-3,]LY7A`/A;L```#H%DD``,<`%@```.CJ
+M1P``@\C_Z;D```")7CB)7ASIA0```/]&$#E>&`^,C````/]V'`^V1C&+SE#H
+M(?[__XE&'(/X"'2Z@_@'=\7_)(4V1$(`B\[H.`(``.M%@TXH_XE>)(A>,(E>
+M((E>+(A>/.LXB\[HH`$``.LGB\[HMPH``.L>B5XHZR&+SNCG`@``ZQ"+SN@O
+M`P``ZP>+SN@+!@``A,`/A&C___^+1A"*`(A&,83`#X5K_____T80_X90!```
+M@[Y0!````@^%2O___XM&&%M>PXU)`+%#0@"Z0T(`ST-"`-A#0@#A0T(`YD-"
+M`.]#0@#X0T(`B_]6B_&-CD@$``#HN1(``(3`=06#R/]>PU,SVSE>$`^%P```
+M`.CZ1P``QP`6````Z,Y&``"#R/_IO@```(E>.(E>'.F&````@T80`CE>&`^,
+MD````/]V'`^W1C*+SE#H-OW__XE&'(/X"'2Y@_@'=\3_)(5614(`B\[H.@$`
+M`.M%@TXH_XE>)(A>,(E>((E>+(A>/.LXB\[HP````.LGB\[HQ0D``.L>B5XH
+MZR&+SNCR`0``ZQ"+SNA[`P``ZP>+SN@=!P``A,`/A&?___^+1A`/MP!FB48R
+M9H7`#X5G____@T80`O^&4`0``(.^4`0```(/A47___^+1AA;7L.+_\Y$0@#7
+M1$(`[$1"`/5$0@#^1$(``T5"``Q%0@`514(`#[Y!,8/H('0M@^@#="*#Z`AT
+M%TB#Z`%T"X/H`W4<@TD@".L6@TD@!.L0@TD@`>L*@TD@(.L$@TD@`K`!PP^W
+M03*#Z"!T+8/H`W0B@^@(=!=(@^@!=`N#Z`-U'(-)(`CK%H-)(`3K$(-)(`'K
+M"H-)("#K!(-)(`*P`</H.0```(3`=1/H?$8``,<`%@```.A010``,L##L`'#
+MZ$0```"$P'43Z%U&``#'`!8```#H,44``#+`P[`!PXO_5FH`B_'H.0```(3`
+M=0)>PXU&&%`/MD8QC8Y(!```4.CF$```L`%>PXU1&,9!/`%2#[=1,H'!2`0`
+M`%+H#!$``+`!PXO_5HOQ5[\`@```BT8(BDXQQD8\``^VT8L`BP!FA3Q0=#B-
+M1AA048V.2`0``.B5$```BTX0B@&(1C&-00&`?C$`B480=13HO$4``,<`%@``
+M`.B01```,L#K`K`!7U["!`"`>3$J=`J-02A0Z)W[___#@T$4!(M!%(M`_(E!
+M*(7`>02#22C_L`'#9H-Y,BIT"HU!*%#HT/O__\.#010$BT$4BT#\B4$HA<!Y
+M!(-)*/^P`<.*03$\1G4:BP&#X`B#R``/A5$!``#'01P'````Z<0"```\3G4F
+MBP%J"%HCPH/(``^%,0$``(E1'.@810``QP`6````Z.Q#```RP,.#>2P`=></
+MOL"#^&H/C[X````/A*\```"#^$ET3X/X3'0^@_A4="V#^&@/A>L```"+01"`
+M.&AU$$#'02P!````B4$0Z=,```#'02P"````Z<<```#'02P-````Z;L```#'
+M02P(````Z:\```"+41"*`CPS=1B`>@$R=1*-0@+'02P*````B4$0Z8X````\
+M-G45@'H!-'4/C4("QT$L"P```(E!$.MU/&1T%#QI=!`\;W0,/'5T"#QX=`0\
+M6'5=QT$L"0```.M4QT$L!0```.M+@_AL="J#^'1T'(/X=W0.@_AZ=3?'02P&
+M````ZR['02P,````ZR7'02P'````ZQR+01"`.&QU#4#'02P$````B4$0ZP?'
+M02P#````L`'##[=!,H/X1G4:BP&#X`B#R``/A6(!``#'01P'````Z8@#``"#
+M^$YU)HL!:@A:(\*#R``/A4$!``")41SHK$,``,<`%@```.B`0@``,L##@WDL
+M`'7G@_AJ#X_-````#X2^````@_A)=%.#^$QT0H/X5'0Q:FA:.\(/A?P```"+
+M01!F.1!U$H/``L=!+`$```")01#IX@```,=!+`(```#IU@```,=!+`T```#I
+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
+M___HZ/[__X/$#/^U"/___XO._[7\_O___Q5@,D,`_]:#Q`B%P'X55_^U"/__
+M__^U_/[__^BV_O__@\0,_[4(____B\Y3_Q5@,D,`_]:#Q`B%P'X05_^U"/__
+M_U/HCO[__X/$#(N%"/___XOXB[7\_O__BY4$____B87L_O__D#O>=C<#\HFU
+M]/[__SOS<R6+C0#___]35O\58#)#`/^5`/___XN5!/___X/$"(7`?M,[WG<]
+MBX4(____B[T`____`_([\'<?4U:+S_\58#)#`/_7BY4$____@\0(A<"+A0C_
+M__]^VXN][/[__XFU]/[__XNU`/___^L&C9L`````BY4$____*_H[^W894U>+
+MSO\58#)#`/_6@\0(A<!_X8N5!/___XNU]/[__XF][/[__SO^<EZ)E>C^__^)
+MO>3^__\[]W0SB]Z+UXNUZ/[__RO?B@*-4@&*3!/_B$03_XA*_X/N`77KB[7T
+M_O__BYWP_O__BY4$____BX4(____.]\/A?K^__^+WHF=\/[__^GM_O__`_H[
+MWW,RC:0D`````"OZ._MV)8N-`/___U-7_Q5@,D,`_Y4`____BY4$____@\0(
+MA<!TV3O?<B^+M0#___\K^CN]_/[__W894U>+SO\58#)#`/_6BY4$____@\0(
+MA<!TW8NU]/[__XN5"/___XO'BYW\_O__B\HKSBO#.\%\.3O?<QB+A?C^__^)
+MG(4,____B7R%A$")A?C^__^+O03___\[\G-,B\Z+M0#___^)C?S^___I:OW_
+M_SOR<QB+A?C^__^)M(4,____B52%A$")A?C^__^+C?S^__^+M0#___\[SW,5
+MB]>+O03____I*_W__XNU`/___^L&B[T$____BX7X_O__@^@!B87X_O__>!:+
+MC(4,____BU2%A(F-_/[__^GV_/__6XM-_%\SS5[HY(W__XOE7</,S,S,S,R+
+M5"0$BTPD"/?"`P```'5`BP(Z`74RA,!T)CIA`74IA.1T'<'H$#I!`G4=A,!T
+M$3IA`W44@\$$@\($A.1UTHO_,\##ZP/,S,P;P(/(`<.+__?"`0```'08B@*#
+MP@$Z`77G@\$!A,!TV/?"`@```'2@9HL"@\(".@%USH3`=,(Z80%UQ83D=+F#
+MP0+KA,S,S,Q35HM,)`R+5"00BUPD%/?#_____W10*\KWP@,```!T%P^V!`HZ
+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
+M=`>[````@.L0N____W_K"?;#`G0"]]Z+WH!]Y`!>#X0@_O__BT78@Z!0`P``
+M_>D1_O__B_]5B^R#[!R-30Q35^AYZO__A,!T(XM%%&H"7X7`="\[QWP%@_@D
+M?B;HN!\``,<`%@```.B,'@``,]N+51"%TG0%BTT,B0I?B\-;B^5=PU;_=0B-
+M3>3HM]/__XM%##/VB77XB47TZP.+10P/MS`#QVH(5HE%#.CA.```65F%P'7G
+M,]LX71@/E<-F@_XM=00+W^L&9H/^*W4.BWT,#[<W@\<"B7T,ZP.+?0R+313'
+M1?P9````:C!8:A!:A<ET"#O*#X7;`@``9COP#X)5`@``:CI89COP<PL/M\:#
+MZ##I/0(``+@0_P``9COP#X,8`@``N&`&``!F._`/@B8"``"#P`IF._!S#0^W
+MQBU@!@``Z0P"``"X\`8``&8[\`^"`P(``(/`"F8[\',-#[?&+?`&``#IZ0$`
+M`+AF"0``9COP#X+@`0``@\`*9COP<PT/M\8M9@D``.G&`0``N.8)``!F._`/
+M@KT!``"#P`IF._!S#0^WQBWF"0``Z:,!``"X9@H``&8[\`^"F@$``(/`"F8[
+M\',-#[?&+68*``#I@`$``+CF"@``9COP#X)W`0``@\`*9COP<PT/M\8MY@H`
+M`.E=`0``N&8+``!F._`/@E0!``"#P`IF._!S#0^WQBUF"P``Z3H!``"X9@P`
+M`&8[\`^",0$``(/`"F8[\',-#[?&+68,``#I%P$``+CF#```9COP#X(.`0``
+M@\`*9COP<PT/M\8MY@P``.GT````N&8-``!F._`/@NL```"#P`IF._!S#0^W
+MQBUF#0``Z=$```"X4`X``&8[\`^"R````(/`"F8[\',-#[?&+5`.``#IK@``
+M`+C0#@``9COP#X*E````@\`*9COP<PT/M\8MT`X``.F+````N"`/``!F._`/
+M@H(```"#P`IF._!S"@^WQBT@#P``ZVNX0!```&8[\')F@\`*9COP<PH/M\8M
+M0!```.M/N.`7``!F._!R2H/`"F8[\',*#[?&+>`7``#K,[@0&```9COP<BZ#
+MP`IF._!S)@^WQBT0&```ZQ>X&O\``&8[\',*#[?&+1#_``#K`X/(_X/X_W4P
+M:D%89CO&=PAJ6EAF._!V"8U&GV8[1?QW%(U&GV8[1?P/M\9W`X/H((/`R>L#
+M@\C_A<!T#87)=47'110*````ZSP/MP>#QP*)?0R#^'AT'H/X6'09A<EU!\=%
+M%`@```!0C4T,Z($#``"+?0SK$(7)=0.)510/MS>#QP*)?0R#R/\STO=U%(O(
+M:C!89COP#X)5`@``:CI89COP<PL/M\:#Z##I/0(``+@0_P``9COP#X,8`@``
+MN&`&``!F._`/@B8"``"#P`IF._!S#0^WQBU@!@``Z0P"``"X\`8``&8[\`^"
+M`P(``(/`"F8[\',-#[?&+?`&``#IZ0$``+AF"0``9COP#X+@`0``@\`*9COP
+M<PT/M\8M9@D``.G&`0``N.8)``!F._`/@KT!``"#P`IF._!S#0^WQBWF"0``
+MZ:,!``"X9@H``&8[\`^"F@$``(/`"F8[\',-#[?&+68*``#I@`$``+CF"@``
+M9COP#X)W`0``@\`*9COP<PT/M\8MY@H``.E=`0``N&8+``!F._`/@E0!``"#
+MP`IF._!S#0^WQBUF"P``Z3H!``"X9@P``&8[\`^",0$``(/`"F8[\',-#[?&
+M+68,``#I%P$``+CF#```9COP#X(.`0``@\`*9COP<PT/M\8MY@P``.GT````
+MN&8-``!F._`/@NL```"#P`IF._!S#0^WQBUF#0``Z=$```"X4`X``&8[\`^"
+MR````(/`"F8[\',-#[?&+5`.``#IK@```+C0#@``9COP#X*E````@\`*9COP
+M<PT/M\8MT`X``.F+````N"`/``!F._`/@H(```"#P`IF._!S"@^WQBT@#P``
+MZVNX0!```&8[\')F@\`*9COP<PH/M\8M0!```.M/N.`7``!F._!R2H/`"F8[
+M\',*#[?&+>`7``#K,[@0&```9COP<BZ#P`IF._!S)@^WQBT0&```ZQ>X&O\`
+M`&8[\',*#[?&+1#_``#K`X/(_X/X_W4P:D%89CO&=PAJ6EAF._!V"8U&GV8[
+M1?QW%(U&GV8[1?P/M\9W`X/H((/`R>L#@\C_@_C_=#$[111S+(MU^(/+"#OQ
+M<@MU!#O"=@6#RP3K"0^O=10#\(EU^`^W-X/'`HE]#.DY_?__5HU-#.B2````
+M]L,(=0J+1?0SVXE%#.M!BW7X5E/H]O;__UE9A,!T*.A'&0``QP`B````]L,!
+M=06#SO_K&O;#`G0'NP```(#K$+O___]_ZPGVPP)T`O?>B]Z`??``7@^$9?G_
+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
+M_Q44,4,`B47XA<`/A)D```"-'`"-2P@[V1O`A<%T2HU+"#O9&\`CP8U+"#T`
+M!```=QD[V1O`(\'H?E@``(OTA?9T8,<&S,P``.L9.]D;P"/!4.B<P___B_!9
+MA?9T1<<&W=T``(/&".L"B_>%]G0T4U=6Z#0Q__^#Q`S_=?A6_W44_W40:@'_
+M=1S_%10Q0P"%P'00_W484%;_=0S_%0PR0P"+^%;HXN#__UF`??0`=`J+1>B#
+MH%`#``#]B\>-9=Q?7EN+3?PSS>CI*?__B^5=PXO_58OLBT4(\/]`#(M(?(7)
+M=`/P_P&+B(0```"%R70#\/\!BXB`````A<ET`_#_`8N(C````(7)=`/P_P%6
+M:@:-2"A>@7GX&.A#`'0)BQ&%TG0#\/\"@WGT`'0*BU'\A=)T`_#_`H/!$(/N
+M`776_["<````Z$X!``!97EW#B_]5B^Q14U:+=0A7BX:(````A<!T;#U0[4,`
+M=&6+1GR%P'1>@S@`=5F+AH0```"%P'08@S@`=1-0Z"["____MH@```#HEOO_
+M_UE9BX:`````A<!T&(,X`'434.@,PO___[:(````Z'+\__]96?]V?.CWP?__
+M_[:(````Z.S!__]968N&C````(7`=$6#.`!U0(N&D````"W^````4.C*P?__
+MBX:4````OX`````KQU#HM\'__XN&F````"O'4.BIP?___[:,````Z)[!__^#
+MQ!#_MIP```#HEP```%EJ!EB-GJ````")1?R-?BB!?_@8Z$,`=!V+!X7`=!2#
+M.`!U#U#H9L'___\SZ%_!__]968M%_(-_]`!T%HM'_(7`=`R#.`!U!U#H0L'_
+M_UF+1?R#PP2#QQ"#Z`&)1?QUL%;H*L'__UE?7EN+Y5W#B_]5B^R+30B%R706
+M@?D@94,`=`XSP$#P#\&!L````$!=P[C___]_7<.+_U6+[%:+=0B%]G0@@?X@
+M94,`=!B+AK````"%P'4.5NCJ^___5NC.P/__65E>7<.+_U6+[(M-"(7)=!:!
+M^2!E0P!T#H/(__`/P8&P````2%W#N/___W]=PXO_58OLBT4(A<!T<_#_2`R+
+M2'R%R70#\/\)BXB$````A<ET`_#_"8N(@````(7)=`/P_PF+B(P```"%R70#
+M\/\)5FH&C4@H7H%Y^!CH0P!T"8L1A=)T`_#_"H-Y]`!T"HM1_(72=`/P_PJ#
+MP1"#[@%UUO^PG````.A:____65Y=PVH,:*"\0P#HQ2?__X-EY`#HP<K__XOX
+MBPV@[4,`A8]0`P``=`>+=TR%]G5#:@3H[][__UF#9?P`_S60$D8`C4=,4.@P
+M````65F+\(EUY,=%_/[____H#````(7V=1'H1,#__XMUY&H$Z`7?__]9PXO&
+MZ*$G___#B_]5B^Q6BW4,5X7V=#R+10B%P'0UBS@[_G4$B\;K+5:),.B8_/__
+M687_=.]7Z-;^__^#?PP`677B@?]8YT,`=-I7Z/7\__]9Z]$SP%]>7<.+_U6+
+M[(M-"#/`]L$0=`6X@````%-65[\``@``]L$(=`(+Q_;!!'0%#0`$``#VP0)T
+M!0T`"```]L$!=`4-`!```+X``0``]\$```@`=`(+QHO1NP`#```CTW0?.]9T
+M%CO7=`L[TW43#0!@``#K#`T`0```ZP4-`"```+H````#7R/*7EN!^0````%T
+M&('Y`````G0+.\IU$0T`@```7<.#R$!=PPU`@```7<.+_U6+[(/L#-U]_-OB
+M@ST8#48``0^,@P```&:+1?PSR8O15[\```@`J#]T*:@!=`-J$%JH!'0#@\H(
+MJ`AT`X/*!*@0=`.#R@*H('0#@\H!J`)T`@O7#ZY=^(M%^(/@P(E%]`^N5?2+
+M1?BH/W0IJ`%T`VH06:@$=`.#R0BH"'0#@\D$J!!T`X/)`J@@=`.#R0&H`G0"
+M"\\+RHO!7^L]9HM-_#/`]L$_=#+VP0%T`VH06/;!!'0#@\@(]L$(=`.#R`3V
+MP1!T`X/(`O;!('0#@\@!]L$"=`4-```(`(OE7<.+_U6+[(/L$)O9??AFBT7X
+M,\FH`70#:A!9J`1T`X/)"*@(=`.#R02H$'0#@\D"J"!T`X/)`:@"=`:!R0``
+M"`!35@^W\+L`#```B]97OP`"```CTW0F@?H`!```=!B!^@`(``!T##O3=1*!
+MR0`#``#K"@O/ZP:!R0`!``"!Y@`#``!T##OW=0Z!R0```0#K!H')```"`+H`
+M$```9H7"=`:!R0``!`"+?0R+]XM%"/?6(_$CQPOP._$/A*8```!6Z#\"``!9
+M9HE%_-EM_)O9??QFBT7\,_:H`70#:A!>J`1T`X/."*@(=`.#S@2H$'0#@\X"
+MJ"!T`X/.`:@"=`:!S@``"``/M]"+RB/+="J!^0`$``!T'('Y``@``'0,.\MU
+M%H'.``,``.L.@<X``@``ZP:!S@`!``"!X@`#``!T$('Z``(``'4.@<X```$`
+MZP:!S@```@"Z`!```&:%PG0&@<X```0`@ST8#48``0^,B0$``('G'P,(`P^N
+M7?"+1?`SR83`>0-J$%FI``(``'0#@\D(J0`$``!T`X/)!*D`"```=`.#R0*%
+MPG0#@\D!J0`!``!T!H')```(`(O0NP!@```CTW0J@?H`(```=!R!^@!```!T
+M##O3=1:!R0`#``#K#H')``(``.L&@<D``0``:D`E0(```%LKPW0;+<!_``!T
+M#"O#=1:!R0````'K#H')`````^L&@<D````"B\<C?0CWT"/!"\<[P0^$M0``
+M`%#H1/S__U")1?3H1R```%E9#ZY=](M%]#/)A,!Y`VH06:D``@``=`.#R0BI
+M``0``'0#@\D$J0`(``!T`X/)`JD`$```=`.#R0&I``$``'0&@<D```@`B]"_
+M`&```"/7="J!^@`@``!T'('Z`$```'0,.]=U%H')``,``.L.@<D``@``ZP:!
+MR0`!```E0(```"O#=!LMP'\``'0,*\-U%H')`````>L.@<D````#ZP:!R0``
+M``*+P0O.,\:I'P,(`'0&@<D```"`B\'K`HO&7UY;B^5=PXO_58OLBTT(,\#V
+MP1!T`4#VP0AT`X/(!/;!!'0#@\@(]L$"=`.#R!#VP0%T`X/((/?!```(`'0#
+M@\@"5HO1O@`#``!7OP`"```CUG0C@?H``0``=!8[UW0+.]9U$PT`#```ZPP-
+M``@``.L%#0`$``"+T8'B```#`'0,@?H```$`=08+Q^L""\9?7O?!```$`'0%
+M#0`0``!=PXO_58OLBU4(5H72=1;HGK[__VH67HDPZ'.]__^+QNF6````@WT,
+M`';DBTT0Q@(`A<E^!(O!ZP(SP$`Y10QW">ALOO__:B+KS(MU%(7V=+Y3C5H!
+MB\-7BWX(Q@(PA<E^%HH?A-MT`T?K`K,PB!A`287)?^V-6@'&``"%R7@2@#\U
+M?`WK`\8`,$B`.#ET]_X`@#HQ=07_1@3K'(O+C7$!B@%!A,!U^2O.C4$!4%-2
+MZ)1,__^#Q`Q?,\!;7EW#B_]6B_%6Z$,?``"+!H/@'UD\'W4&QD8(`.L+5NB3
+M'P``6<9&"`&+QE[#B_]5B^R![!P"``!3BUT(BP.%P'4',]);B^5=PU>+?0R+
+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
+M@_K_#X26````B_*-A3#^__^+E;#X__\K\HT$L(F%M/C__SO*<FT[\W,$BSCK
+M`C/_C4;_.\-S"XN%M/C__XM`_.L",\`CA8SX__\CO:CX__^+C9#X___3Z(N-
+MI/C__]/GBXV@^/__"\>)A(TP_O__28N%M/C__TZ#Z`2)C:#X__^)A;3X__^#
+M^?]T"(N=+/[__^N/BY6L^/__B[6P^/__A?9T#(O.C;TP_O__,\#SJX"]N_C_
+M_P"[S`$``'0+C4(!B84L_O__ZS.)E2S^___K*S/`N\P!``!0B86,^O__B84L
+M_O__C860^O__4(V%,/[__U-0Z(#A__^#Q!"#I93Z__\`,\EJ!%A!B860^O__
+MB8V,^O__B8U<_/__4(V%D/K__U"-A6#\__]34.A)X?__@\00Z5P$``"+A;3X
+M__\STD"+^(/@'VH@62O(B86P^/__,\#![P5`B;VT^/__B8V0^/__Z#`3__^+
+MC)TL_O__2(.EG/C__P`/O<F)A:CX___WT(F%C/C__W0#0>L",\EJ(%@KP8T4
+M.SF%L/C__XF5H/C__P^7P(/Z<XB%N_C__P^7P8/Z<W4(A,!T!+`!ZP(RP(3)
+M#X7L````A,`/A>0```!J<ED[T7((B]&)C:#X__^+PHF%K/C__X/Z_P^$DP``
+M`(ORC8TP_O__BY6T^/__*_*-#+&)C:3X__\[PG)G._-S!(LYZP(S_XU&_SO#
+M<P6+0?SK`C/`([VH^/__(X6,^/__BXVP^/__T^>+C9#X___3Z(N-I/C__POX
+MBX6L^/__@^D$B8VD^/__B;R%,/[__TA.B86L^/__@_C_=`B+G2S^___KE8N5
+MH/C__XN]M/C__VH"7H7_=`R+SS/`C;TP_O__\ZN`O;OX__\`N\P!``!T"XU"
+M`8F%+/[__^LSB94L_O__ZRLSP+O,`0``4(F%C/K__XF%+/[__XV%D/K__U"-
+MA3#^__]34.B<W___@\00@Z64^O__`#/`0(FUD/K__XF%C/K__XF%7/S__VH$
+MZ1G^__^!_@+\__\/A!D!``"#I9#Z__\`:@)9QX64^O__```0`(F-C/K__SO9
+M#X7W````,]*+A!60^O__.X05,/[__P^%X0```(/"!(/Z"'7D@Z6<^/__``^]
+MQW0%C5`!ZP(STFH@6"O"B_$[P8V%./[__XF%K/C__XOX#Y*%N_C__SOS<PJ+
+M%XF5L/C__^L'@Z6P^/__`(U&_SO#<P6+5_SK`C/2BX6P^/__@^\$P>`"P>H>
+M,]"+A:SX__].B1"#Z`2)A:SX__^#_O]T"(N=+/[__^NM,\`XA;OX__\/E<`#
+MP2N-M/C__XOYB84L_O__P>\%C860^O__B_>)C:CX___!Y@)6:@!0Z`T<__^+
+MC:CX__\SP$"#X1_3X(F$-9#Z__^-1P'I0`$``(N$G2S^__^#I9SX__\`#[W`
+M=`6-2`'K`C/):B!8*\&#^`$/DL"#^W.(A;OX__\/E\&#^W-U"(3`=`2P`>L"
+M,L"$R0^%FP```(3`#X63````:G)9.]ES`HO+@_G_=&F-O3#^__^+\8T\CXF]
+MK/C__SOS<PJ+%XF5L/C__^L'@Z6P^/__`(U&_SO#<P6+5_SK`C/2BX6P^/__
+M@^\$`\#!ZA\ST(N%K/C__TZ)$(/H!(F%K/C__X/^_W0(BYTL_O__ZZZ+M;3X
+M__^`O;OX__\`=`N-00&)A2S^___K,XF-+/[__^LK@Z6,^O__`(V%D/K__X.E
+M+/[__P!J`%"-A3#^__]HS`$``%#H1MW__X/$$#/_C860^O__1RO^B]_!ZP6+
+M\\'F`E9J`%#HQ!K__S/`@^<?0(O/T^")A#60^O__C4,!B86,^O__N\P!``")
+MA5S\___!X`)0C860^O__4(V%8/S__U-0Z.C<__^#Q!R+A93X__\STFH*68F-
+MC/C__X7`#XAC!```]_&)A9#X__^+RHF-G/C__X7`#X1Q`P``@_@F=@-J)E@/
+MM@R%]GQ#``^V-(7W?$,`B_F)A:3X___!YP)7C00QB86,^O__C860^O__:@!0
+MZ!@:__^+QL'@`E"+A:3X__\/MP2%]'Q#`(T$A?!S0P!0C860^O__`\=0Z$X;
+M__^+C8SZ__^#Q!B)C:#X__^#^0%W>HN]D/K__X7_=1,SP(F%O/C__XF%7/S_
+M_^F?`@``@_\!#X2N`@``@[U<_/__``^$H0(``(N%7/S__S/)B86H^/__,_:+
+MQ_>DM6#\__\#P8F$M6#\__^#T@!&B\H[M:CX__]UX.FL````B8R%8/S___^%
+M7/S__^E:`@``@[U<_/__`0^'O@```(N]8/S__XO!P>`"4(V%D/K__XF-7/S_
+M_U"-A6#\__]34.B.V___@\00A?]U&C/`B86,^O__B85<_/__4(V%D/K__^GU
+M`0``@_\!#X3]`0``@[U<_/__``^$\`$``(N%7/S__S/)B86H^/__,_:+Q_>D
+MM6#\__\#P8F$M6#\__^#T@!&B\H[M:CX__]UX(7)#X2X`0``BX5<_/__@_AS
+M#X(]____,\")A8SZ__^)A5S\__]0C860^O__Z>P!```[C5S\__^-O9#Z__\/
+MDL"$P`^%@P```(V]8/S__XV5D/K__XF5L/C__X3`=0:+C5S\__^)C:SX__^$
+MP'0,BX5<_/__B86@^/__,](S]HF5O/C__X7)#X01`0``C87`^/__*_B)O7SX
+M__^-!+>+A`7`^/__B86H^/__A<!U)3OR#X7>````(82UP/C__XU6`8F5O/C_
+M_^G)````C95@_/__ZX$SP#/_B\Z)A;3X__\YA:#X__\/A)0```"#^7-T5SO*
+M=1>#I(W`^/__`$`#QHF%O/C__XN%M/C__XN5L/C__XL$@O>EJ/C__P/'@](`
+M`82-P/C__XN%M/C__X/2`$!!B86T^/__B_J+E;SX__\[A:#X__]UI(7_=#2#
+M^7,/A+0````[RG41@Z2-P/C__P"-00&)A;SX__^+QS/_`82-P/C__XN5O/C_
+M_Q/_0>O(@_ES#X2`````B[U\^/__BXVL^/__1COQ#X7]_O__B\*)E5S\___!
+MX`)0C87`^/__4(V%8/S__U-0Z&K9__^#Q!"P`83`=&R+A9#X__\KA:3X__^)
+MA9#X__\/A97\__^+C9SX__^%R0^$$P4``(L\C8Q]0P"%_W5=,\")A9SV__^)
+MA5S\__]0ZSHSP(F%G/;__XF%7/S__U"-A:#V__]0C85@_/__4U#H_-C__X/$
+M$#+`ZY"#I9SV__\`@Z5<_/__`&H`C86@]O__4(V%8/S__^FA!```@_\!#X2B
+M!```BX5<_/__B86<^/__A<`/A(X$```S]C/)B\?WI(U@_/__`\:)A(U@_/__
+M@](`08OR.XV<^/__=>"%]@^$8@0``(N%7/S__X/X<P^#2____XFTA6#\____
+MA5S\___I000``/?8]_&)A:SX__^+RHF-J/C__X7`#X1,`P``@_@F=@-J)E@/
+MM@R%]GQ#``^V-(7W?$,`B_F)A;3X___!YP)7C00QB86,^O__C860^O__:@!0
+MZ+,5__^+QL'@`E"+A;3X__\/MP2%]'Q#`(T$A?!S0P!0C860^O__`\=0Z.D6
+M__^+C8SZ__^#Q!B)C:#X__^#^0$/AY,```"+O9#Z__^%_W4:,\")A9SV__^)
+MA2S^__]0C86@]O__Z7("``"#_P$/A'H"``"#O2S^__\`#X1M`@``BX4L_O__
+M,\F)A9SX__\S]HO']Z2U,/[__P/!B82U,/[__X/2`$:+RCNUG/C__W7@A<D/
+MA#4"``"+A2S^__^#^',/@\0"``")C(4P_O___X4L_O__Z10"``"#O2S^__\!
+M=WR+O3#^__^+P<'@`E"-A9#Z__^)C2S^__]0C84P_O__4U#H$-?__X/$$(7_
+M#X0]____@_\!#X31`0``@[TL_O__``^$Q`$``(N%+/[__S/)B86<^/__,_:+
+MQ_>DM3#^__\#P8F$M3#^__^#T@!&B\H[M9SX__]UX.E2____.XTL_O__C;V0
+M^O__#Y+`A,`/A8,```"-O3#^__^-E9#Z__^)E9#X__^$P'4&BXTL_O__B8VP
+M^/__A,!T#(N%+/[__XF%H/C__S/2,_:)E;SX__^%R0^$$0$``(V%P/C__ROX
+MB;U\^/__C02WBX0%P/C__XF%G/C__X7`=24[\@^%W@```"&$M<#X__^-5@&)
+ME;SX___IR0```(V5,/[__^N!,\`S_XO.B86D^/__.86@^/__#X24````@_ES
+M=%<[RG47@Z2-P/C__P!``\:)A;SX__^+A:3X__^+E9#X__^+!(+WI9SX__\#
+MQX/2``&$C<#X__^+A:3X__^#T@!`08F%I/C__XOZBY6\^/__.X6@^/__=:2%
+M_W0T@_ES#X0*`0``.\IU$8.DC<#X__\`C4$!B86\^/__B\<S_P&$C<#X__^+
+ME;SX__\3_T'KR(/Y<P^$U@```(N]?/C__XN-L/C__T8[\0^%_?[__XO"B94L
+M_O__P>`"4(V%P/C__U"-A3#^__]34.@NU?__@\00L`&$P`^$P0```(N%K/C_
+M_RN%M/C__XF%K/C__P^%NOS__XN-J/C__X7)#X33````BP2-C'U#`(F%G/C_
+M_X7`#X28````@_@!#X2U````BXTL_O__A<D/A*<````S_S/V]Z2U,/[__P/'
+MB82U,/[__XN%G/C__X/2`$:+^COQ=>"%_W1_BX4L_O__@_AS<TZ)O(4P_O__
+M_X4L_O__ZV4SP%")A9SV__^)A2S^__^-A:#V__]0C84P_O__4U#H:M3__X/$
+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
+MF_:%8?___T%UE=G`V?S9Y)O=O6#___^;BI5A____V<G8X=GDF]V]8/___]GA
+MV?##V<#9_-C9F]_@GG4:V<#<#?*?0P#9P-G\WMF;W^">=`VX`0```,.X````
+M`.OXN`(```#K\5:#['2+]%:#[`C='"2#[`C='"2;W78(Z(('``"#Q!3=9@C=
+M!H/$=%Z%P'0%Z=`!``##S,S,S,S,S,S,@'H.!7419HN=7/___X#/`H#G_K,_
+MZP1FNS\39HF=7O___]FM7O___[M.H$,`V>6)E6S___^;W;U@____QH5P____
+M`)N*C6'____0X=#YT,&*P20/UP^^P('A!`0``(O:`]B#PQ#_(X!Z#@5U$6:+
+MG5S___^`SP*`Y_ZS/^L$9KL_$V:)G5[____9K5[___^[3J!#`-GEB95L____
+MF]V]8/___\:%</___P#9R8J-8?___]GEF]V]8/___]G)BJUA____T.70_=#%
+MBL4D#]>*X-#AT/G0P8K!)`_7T.30Y`K$#[[`@>$$!```B]H#V(/#$/\CZ,X`
+M``#9R=W8P^C$````Z_;=V-W8V>[#W=C=V-GNA.UT`MG@P]W8W=C9Z,/;O6+_
+M___;K6+____VA6G___]`=`C&A7#___\`P\:%</___P#<!3Z@0P##V<G;O6+_
+M___;K6+____VA6G___]`=`G&A7#___\`ZP?&A7#___\`WL'#V[UB____VZUB
+M____]H5I____0'0@V<G;O6+____;K6+____VA6G___]`=`G&A7#___\`ZP?&
+MA7#___\!WL'#W=C=V-LM(*!#`("]</___P!_!\:%</___P$*R</=V-W8VRTT
+MH$,`"NUT`MG@"LET"-T%1J!#`-[)PPK)=`+9X,/,S,S,S,S,S,S,S,S9P-G\
+MW.'9R=G@V?#9Z-[!V?W=V<.+5"0$@>(``P``@\I_9HE4)`;9;"0&PZD```@`
+M=`:X`````,/<!6"@0P"X`````,.+0@0E``#P?ST``/!_=`/=`L.+0@2#[`H-
+M``#_?XE$)`:+0@2+"@^DR`O!X0N)1"0$B0PDVRPD@\0*J0````"+0@3#BT0D
+M""4``/!_/0``\']T`<.+1"0(PV:!/"1_`G0#V2PD6L-FBP0D9CU_`G0>9H/@
+M('05F]_@9H/@('0,N`@```#HV0```%K#V2PD6L.#[`C=%"2+1"0$@\0()0``
+M\'_K%(/L"-T4)(M$)`2#Q`@E``#P?W0]/0``\']T7V:+!"1F/7\"="IF@^`@
+M=2&;W^!F@^`@=!BX"````(/Z'70'Z'L```!:P^A=````6L/9+"1:P]T%C*!#
+M`-G)V?W=V=G`V>'<'7R@0P";W^">N`0```!SQ]P-G*!#`.N_W06$H$,`V<G9
+M_=W9V<#9X=P==*!#`)O?X)ZX`P```':>W`V4H$,`ZY;,S,S,58OL@\3@B47@
+MBT48B47PBT4<B47TZPE5B^R#Q.")1>#=7?B)3>2+11"+312)1>B)3>R-10B-
+M3>!045+HO@0``(/$#-U%^&:!?0A_`G0#V6T(R<.+_U6+[(/L)*%HYD,`,\6)
+M1?R#/1`71@``5E=T$/\U(!=&`/\5,#)#`(OXZP6_8(1"`(M%%(/X&@^/(0$`
+M``^$#P$``(/X#@^/IP````^$C@```&H"62O!='B#Z`%T:H/H!716@^@!#X6;
+M`0``QT7@J*!#`(M%"(O/BW40QT7<`0```-T`BT4,W5WDW0"-1=S=7>S=!E#=
+M7?3_%6`R0P#_UUF%P`^%60$``.@X@/__QP`A````Z4D!``")3=S'1>"HH$,`
+MZ00!``#'1>"DH$,`ZZ*)3=S'1>"DH$,`Z>P```#'1=P#````QT7@L*!#`.G9
+M````@^@/=%&#Z`ET0X/H`0^%`0$``,=%X+2@0P"+10B+SXMU$,=%W`0```#=
+M`(M%#-U=Y-T`C47<W5WLW090W5WT_Q5@,D,`_]=9Z<(```#'1=P#````ZWS'
+M1>"PH$,`Z[O9Z(M%$-T8Z:D```"#Z!MT6X/H`71*@^@5=#F#Z`ET*(/H`W07
+M+:L#``!T"8/H`0^%@````(M%"-T`Z\;'1>"XH$,`Z=G^___'1>#`H$,`Z<W^
+M___'1>#(H$,`Z<'^___'1>"TH$,`Z;7^___'1=P"````QT7@M*!#`(M%"(O/
+MBW40W0"+10S=7>3=`(U%W-U=[-T&4-U=]/\58#)#`/_7687`=0OHZG[__\<`
+M(@```-U%]-T>BTW\7S/-7NA3X?[_B^5=PXO_58OL45%35K[__P``5F@_&P``
+MZ'??___=10B+V%E9#[=-#KCP?P``(\A14=T<)&8[R'4WZ$0+``!(65F#^`)W
+M#E93Z$??___=10A96>MCW44(W070H$,`4X/L$-C!W5PD"-T<)&H,:@CK/^@M
+M`P``W57XW44(@\0(W>'?X/;$1'H25MW94]W8Z`+?___=1?A96>L>]L,@=>E3
+M@^P0V<G=7"0(W1PD:@QJ$.@X`P``@\0<7EN+Y5W#B_]5B^Q1H<#M0P"#^/YU
+M"N@."P``H<#M0P"#^/]U![C__P``ZQMJ`(U-_%%J`8U-"%%0_Q6X,$,`A<!T
+MXF:+10B+Y5W#B_]5B^Q14=U%"%%1W1PDZ`H+``!96:B0=4K=10A14=T<).AY
+M`@``W44(W>'?X%E9W=GVQ$1Z*]P-`*E#`%%1W57XW1PDZ%8"``#=1?C:Z=_@
+M65GVQ$1Z!6H"6.L),\!`ZP3=V#/`B^5=PXO_58OLW44(N0``\'_9X;@``/#_
+M.4T4=3N#?1``=779Z-C1W^#VQ`5Z#]W9W=C=!9"J0P#IZ0```-C1W^#=V?;$
+M08M%&`^%V@```-W8V>[IT0```#E%%'4[@WT0`'4UV>C8T=_@]L0%>@O=V=W8
+MV>[IK0```-C1W^#=V?;$08M%&`^%G@```-W8W060JD,`Z9$```#=V#E-#'4N
+M@WT(``^%@@```-GNW440V-'?X/;$00^$<____]C9W^#VQ`6+11A[8MW8V>CK
+M7#E%#'59@WT(`'53W44045'='"3HM?[__]GNW44065G8T8O(W^#VQ$%U$]W9
+MW=C=!9"J0P"#^0%U(-G@ZQS8V=_@]L0%>@^#^0%U#MW8W06@JD,`ZP3=V-GH
+MBT48W1@SP%W#B_]3B]Q148/D\(/$!%6+:P2);"0$B^R![(@```"A:.9#`#/%
+MB47\BT,05HMS#%</MPB)C7S___^+!H/H`70I@^@!=""#Z`%T%X/H`70.@^@!
+M=!6#Z`-U<FH0ZPYJ$NL*:A'K!FH$ZP)J"%]1C4884%?HK0$``(/$#(7`=4>+
+M2PB#^1!T$(/Y%G0+@_D==`:#9<#^ZQ*+1<#=1A"#X..#R`/=7;")1<"-1AA0
+MC48(4%%7C85\____4(U%@%#H0@,``(/$&(N-?/___VC__P``4>@HW/__@SX(
+M65ET%.@2<___A,!T"U;H-W/__UF%P'4(_S;H(`8``%F+3?Q?,\U>Z+C=_O^+
+MY5V+XUO#B_]5B^Q14=U%"-G\W5WXW47XB^5=PXO_58OLBT4(J"!T!&H%ZQ>H
+M"'0%,\!`7<.H!'0$:@+K!J@!=`5J`UA=PP^VP(/@`@/`7<.+_U.+W%%1@^3P
+M@\0$58MK!(EL)`2+[('LB````*%HYD,`,\6)1?Q6BW,@C4,85U90_W,(Z)4`
+M``"#Q`R%P'4F@V7`_E"-0QA0C4,04/]S#(U#(/]S"%"-18!0Z'$"``"+<R"#
+MQ!S_<PCH7O___UF+^.@H<O__A,!T*87_="7=0QA6@^P8W5PD$-GNW5PD"-U#
+M$-T<)/]S#%?H4P4``(/$).L85^@9!0``QP0D__\``%;H\MK__]U#&%E9BTW\
+M7S/-7NB@W/[_B^5=B^-;PXO_58OL@^P04XM="%:+\X/F'_;#"'06]D40`700
+M:@'HXMK__UF#YO?ID`$``(O#(T40J`1T$&H$Z,G:__]9@^;[Z7<!``#VPP$/
+MA)H```#V11`(#X20````:@CHIMK__XM%$%FY``P``"/!=%0]``0``'0W/0`(
+M``!T&CO!=6*+30S9[MP9W^#=!9BJ0P#VQ`5[3.M(BTT,V>[<&=_@]L0%>RS=
+M!9BJ0P#K,HM-#-GNW!G?X/;$!7H>W068JD,`ZQZ+30S9[MP9W^#VQ`5Z"-T%
+MD*I#`.L(W060JD,`V>#=&8/F_NG4````]L,"#X3+````]D40$`^$P0```%<S
+M__;#$'0!1XM-#-T!V>[:Z=_@]L1$#XN1````W0&-1?Q045'='"3HG`0``(M%
+M_(/$#`4`^O__B47\W57PV>X]SOO__WT',__>R4?K6=[9,]+?X/;$074!0HM%
+M]KD#_/__@^`/@\@09HE%]HM%_#O!?2LKR(M%\/9%\`%T!87_=0%'T>CV1?0!
+MB47P=`@-````@(E%\-%M](/I`77:W47PA=)T`MG@BT4,W1CK`S/_1X7_7W0(
+M:A#H3=G__UF#YOWVPQ!T$?9%$"!T"VH@Z#?9__]9@^;O,\"%]EX/E,!;B^5=
+MPXO_58OL:@#_=1S_=1C_=13_=1#_=0S_=0CH!0```(/$'%W#B_]5B^R+10@S
+MR5,SVT.)2`2+10A7OPT``,")2`B+10B)2`R+31#VP1!T"XM%"+^/``#`"5@$
+M]L$"=`R+10B_DP``P(-(!`+VP0%T#(M%"+^1``#`@T@$!/;!!'0,BT4(OXX`
+M`,"#2`0(]L$(=`R+10B_D```P(-(!!"+30A6BW4,BP;!X`3WT#-!"(/@$#%!
+M"(M-"(L&`\#WT#-!"(/@"#%!"(M-"(L&T>CWT#-!"(/@!#%!"(M-"(L&P>@#
+M]]`S00B#X`(Q00B+!HM-",'H!??0,T$((\,Q00CH?]C__XO0]L(!=`>+30B#
+M20P0]L($=`>+10B#2`P(]L((=`>+10B#2`P$]L(0=`>+10B#2`P"]L(@=`:+
+M10@)6`R+!KD`#```(\%T-3T`!```="(]``@``'0,.\%U*8M%"(,(`^LABTT(
+MBP&#X/Z#R`*)`>L2BTT(BP&#X/T+P^OPBT4(@R#\BP:Y``,``"/!="`]``(`
+M`'0,.\%U(HM%"(,@X^L:BTT(BP&#X.>#R`3K"XM-"(L!@^#K@\@(B0&+10B+
+M313!X04S"('AX/\!`#$(BT4("5@@@WT@`'0LBT4(@V`@X8M%&-D`BT4(V5@0
+MBT4("5A@BT4(BUT<@V!@X8M%"-D#V5A0ZSJ+30B+02"#X..#R`*)02"+11C=
+M`(M%"-U8$(M%"`E88(M-"(M='(M!8(/@XX/(`HE!8(M%"-T#W5A0Z*#6__^-
+M10A0:@%J`%?_%90Q0P"+30CV00@0=`.#)O[V00@(=`.#)OOV00@$=`.#)O?V
+M00@"=`.#)N_V00@!=`.#)M^+`;K_\___@^`#@^@`=#6#Z`%T(H/H`70-@^@!
+M=2B!#@`,``#K((L&)?_[__\-``@``(D&ZQ"+!B7_]___#0`$``#K[B$6BP'!
+MZ`*#X`>#Z`!T&8/H`70)@^@!=1HA%NL6BP8CP@T``@``ZPF+!B/"#0`#``")
+M!H-](`!>=`?905#9&^L%W4%0W1M?6UW#B_]5B^R+10B#^`%T%8/`_H/X`7<8
+MZ`MU___'`"(```!=P^C^=/__QP`A````7<.+_U6+[(M5#(/L(#/)B\$Y%,68
+MJ4,`=`A`@_@=?/'K!XL,Q9RI0P")3>2%R715BT40B47HBT44B47LBT48B47P
+MBT4<5HMU"(E%](M%(&C__P``_W4HB47XBT4DB77@B47\Z%'5__^-1>!0Z&UL
+M__^#Q`R%P'4'5NA5____6=U%^%[K&VC__P``_W4HZ"?5____=0CH.?___]U%
+M((/$#(OE7<.+_U6+[-U%"-GNW>'?X%?VQ$1Z"=W9,__IKP```%9FBW4.#[?&
+MJ?!_``!U?(M-#(M5"/?!__\/`'4$A=)T:M[9OP/\___?X/;$074%,\!`ZP(S
+MP/9%#A!U'P/)B4T,A=)Y!H/)`8E-#`/23_9%#A!TZ&:+=0Z)50BY[_\``&8C
+M\6:)=0Z%P'0,N`"```!F"_!FB74.W44(:@!14=T<).@Q````@\0,ZR-J`%'=
+MV%'='"3H'@````^W_H/$#,'O!('G_P<``('O_@,``%Z+11").%]=PXO_58OL
+M45&+31`/MT4.W44()0^```#=7?B-B?X#``#!X00+R&:)3?[=1?B+Y5W#B_]5
+MB^R!?0P``/!_BT4(=0>%P'450%W#@7T,``#P_W4)A<!U!6H"6%W#9HM-#KKX
+M?P``9B/*9CO*=01J`^OHNO!_``!F.\IU$?=%#/__!P!U!(7`=`1J!.O-,\!=
+MPS/`4%!J`U!J`V@```!`:*BJ0P#_%20P0P"CP.U#`,/,S,S,S,S,S,S,H<#M
+M0P"#^/]T#(/X_G0'4/\5&#!#`,.+_U6+[&:+30ZZ\'\``&:+P68CPF8[PG4S
+MW44(45'='"3H//___UE9@^@!=!B#Z`%T#H/H`70%,\!`7<-J`NL":@187<.X
+M``(``%W##[?)@>$`@```9H7`=1[W10S__P\`=0:#?0@`=`_WV1O)@^&0C8&`
+M````7</=10C9[MKIW^#VQ$1Z#/?9&\F#X>"-04!=P_?9&\F!X0C___^-@0`!
+M``!=P\S_):@Q0P#_)=`Q0P#,S,S,S,S,S%6+[(M%"#/24U97BT@\`\@/MT$4
+M#[=9!H/`&`/!A=MT&XM]#(MP##O^<@F+2`@#SCOY<@I"@\`H.]-RZ#/`7UY;
+M7</,S,S,S,S,S,S,S,S,58OL:OYHJ+U#`&A0(4(`9*$`````4(/L"%-65Z%H
+MYD,`,47X,\50C47P9*,`````B67HQT7\`````&@``$``Z'P```"#Q`2%P'14
+MBT4(+0``0`!0:```0`#H4O___X/$"(7`=#J+0"3!Z!_WT(/@`<=%_/[___^+
+M3?!DB0T`````65]>6XOE7<.+1>R+`#/)@3@%``#`#Y3!B\'#BV7HQT7\_O__
+M_S/`BTWP9(D-`````%E?7EN+Y5W#S,S,S,S,58OLBT4(N4U:``!F.0AT!#/`
+M7<.+2#P#R#/`@3E010``=0RZ"P$``&8Y41@/E,!=PU!D_S4`````C40D#"MD
+M)`Q35E>)*(OHH6CF0P`SQ5")9?#_=?S'1?S_____C47T9*,`````\L/,S,S,
+MS,S,S%:+1"04"\!U*(M,)!"+1"0,,]+W\8O8BT0D"/?QB_"+P_=D)!"+R(O&
+M]V0D$`/1ZT>+R(M<)!"+5"0,BT0D"-'IT=O1ZM'8"\EU]/?SB_#W9"04B\B+
+M1"00]^8#T7(..U0D#'<(<@\[1"0(=@E.*T0D$!M4)!0SVRM$)`@;5"0,]]KW
+MV(/:`(O*B].+V8O(B\9>PA``S,S,S,S,S,S,S,QH4"%"`&3_-0````"+1"00
+MB6PD$(UL)!`KX%-65Z%HYD,`,47\,\6)1>10B67H_W7XBT7\QT7\_O___XE%
+M^(U%\&2C`````/+#BTWD,\WRZ`;2_O_RZ?S2_O_,S,S,S,Q1C4PD""O(@^$/
+M`\$;R0O!6>D:R?[_48U,)`@KR(/A!P/!&\D+P5GI!,G^_\S,S,R#/1@-1@``
+M=#=5B^R#[`B#Y/C='"3R#RP$),G#@ST8#48``'0;@^P$V3PD6&:#X']F@_A_
+M=-.-I"0`````C4D`58OL@^P@@^3PV<#95"08WWPD$-]L)!"+5"08BT0D$(7`
+M=#S>Z872>1[9'"2+#"2!\0```("!P?___W^#T`"+5"04@](`ZRS9'"2+#"2!
+MP?___W^#V`"+5"04@]H`ZQ2+5"04]\+___]_=;C97"08V5PD&,G#S,S,S,S,
+MS,S,S,Q5B^Q7@ST8#48``0^"_0```(M]"'=W#[95#(O"P>(("]!F#V[:\@]P
+MVP`/%MNY#P```"//@\C_T^`K^3/2\P]O#V8/[])F#W319@]TRV8/U\HCR'48
+M9@_7R2/(#[W!`\>%R0]%T(/(_X/'$.O04V8/U]DCV-'A,\`KP2/(22/+6P^]
+MP0/'A<D/1,)?R<,/ME4,A=)T.3/`]\</````=!4/M@\[R@]$QX7)="!']\</
+M````=>MF#V["@\<09@\Z8T?P0(U,#_`/0L%U[5_)P[CP____(\=F#^_`9@]T
+M`+D/````(\^Z_____]/B9@_7^"/Z=11F#^_`9@]T0!"#P!!F#]?XA?]T[`^\
+MUP/"Z[V+?0@SP(/)__*N@\$!]]F#[P&*10S]\JZ#QP$X!W0$,\#K`HO'_%_)
+MPXM-\.G!>/W_BTWP@<$H$```Z65!_?^+3?"!P>@@``#I@ZO]_XM-\('!@"(`
+M`.E@]_S_BTWP@<'010``Z5+W_/]H\((``/]U[.C1Q?[_65G#N(BQ0P#IX^#^
+M_[@XL4,`Z=G@_O^-3<CI+_;\_[CDL4,`Z<?@_O^-3=SI'?;\_[ADL4,`Z;7@
+M_O^-3>#I4O;\_[@0LD,`Z:/@_O^-323IZ__\_[@\LD,`Z9'@_O^-33#IV?_\
+M_[AHLD,`Z7_@_O^-C109___I__W]_[B4LD,`Z6K@_O^+3?#I69/]_XM-\('!
+M'*,``.G$._W_BTWP@<%\HP``Z;8[_?^+3?"!P=RC``#IJ#O]_XM-\('!/*0`
+M`.F:._W_BTWP@<&<I```Z8P[_?^XN+)#`.D2X/[_:!!A0`!J!&@L`0``_W7P
+MZ&#&_O_#:!!A0`!J!&AX`0``BT7P!;0$``!0Z$7&_O_#N!RS0P#IV-_^_XU-
+MU.DN]?S_C8U<S___Z5%W_?^XP+-#`.F[W_[_C8TLG___Z3QW_?^-C<3?___I
+M,7?]_XV-5*___^DF=_W_N(RS0P#ID-_^_XM-\(/!$.GOJ?W_:.#F``#_=>SH
+M6<3^_UE9P[A4M$,`Z6O?_O^-C:AB___I3_7\_[CLLT,`Z5;?_O^-C<3^___I
+M=LS]_XV-G-[__^G,=OW_N(BT0P#I-M_^_XV-N.___^FW=OW_C4W@Z8'T_/^X
+M(+1#`.D9W_[_C4W@Z6_T_/^XM+1#`.D'W_[_C8W(W___Z8AV_?^XX+1#`.GR
+MWO[_BTWP@<$D4```Z0_,_?^+3?"!P7!A``#I@I']_[@4M4,`Z<S>_O^+3?"!
+MP9````#I6(G]_XM-\('!I````.E*B?W_BTWP@<&X````Z3R)_?]HP!```/]U
+M[.AVP_[_65G#:,`0``#_=>SH9L/^_UE9P[@XM4,`Z7C>_O^-C?S<___I^77]
+M_[B,M4,`Z6/>_O^+3?"#P03IE(?]_XM-\(/!).FK\_S_BTWP@\$XZ:#S_/^+
+M3?"#P4SI9_O]_XM-\('!1$L``.FD^_W_BTWP@<'8F```Z9O[_?^+3?"!P63F
+M``#I4)W]_[A@MD,`Z0/>_O^-3<3I6?/\_[@\MD,`Z?'=_O\SVXM%\+GD2@``
+M]^$/D,/WVPO8,\"#PP0/DL#WV`O#4/]U[.CZR?[_65G#N+BU0P#IO-W^_XU-
+MU.D2\_S_N.2U0P#IJMW^_XU-V.D`\_S_N!"V0P#IF-W^_V@X`P``_W7PZ&S"
+M_O]96<.XQ+9#`.E^W?[_C8W<@O__Z6+S_/^-3=SI$//\_[@`N$,`Z6'=_O^-
+MC63.___IXG3]_[@LN$,`Z4S=_O^-C:AR___I@X/]_[A8N$,`Z3?=_O^-C?#>
+M___IZ5K]_[B(MT,`Z2+=_O^+5"0(C4(,BTKL,\CHI\O^_[@8ND,`Z0?=_O_,
+MS,RYZ`Y$`.GSJ_W_S,S,S,S,N<"!1`#I^<G]_\S,S,S,S+EX:D4`Z07*_?_,
+MS,S,S,RY@MM%`.GUR?W_S,S,S,S,N7+$1`#IY<G]_\S,S,S,S+EXQ40`Z<."
+M_O\`````````````````````````````````````````````````````````
+M`````````````````````````````````````,L#`!#+`P`@RP,`,LL#`$;+
+M`P!8RP,`9LL#`'3+`P"(RP,`G,L#`*K+`P"XRP,`RLL#`-[+`P#RRP,`_LL#
+M``S,`P`<S`,`*,P#`#3,`P!(S`,`6,P#`&K,`P"`S`,`ELP#`*+,`P"TS`,`
+MQ,P#`-3,`P#LS`,``,T#``[-`P`DS0,`.,T#`$C-`P!6S0,`:,T#`'[-`P",
+MS0,`ILT#`*[-`P"^S0,`U,T#`.;-`P#VS0,`!,X#`!3.`P`DS@,`/LX#`$[.
+M`P!BS@,`?LX#`);.`P"NS@,`QLX#`-+.`P#@S@,`],X#``K/`P`:SP,`+L\#
+M`#[/`P!@SP,`@L\#`)K/`P"TSP,`SL\#`.;/`P#RSP,`!-`#`!K0`P`PT`,`
+M/M`#`$[0`P!<T`,`;-`#`'K0`P"*T`,`G-`#`+30`P#*T`,`VM`#`.K0`P#Z
+MT`,`#-$#`"+1`P`VT0,`2-$#`&+1`P!^T0,`CM$#`)S1`P"NT0,`P-$#`-+1
+M`P#^U0,`[-4#`-S5`P#0U0,`P-4#`*[5`P"^T@,`T-(#`.#2`P#RT@,``M,#
+M`!33`P`PTP,`1-,#`&#3`P!^TP,`D-,#`*K3`P#`TP,`VM,#`/#3`P`$U`,`
+M$-0#`"#4`P!(U`,`5-0#`&+4`P!PU`,`>M0#`(S4`P"HU`,`OM0#`-34`P#>
+MU`,`ZM0#`/;4`P`$U0,`%M4#`";5`P`ZU0,`2M4#`%S5`P!HU0,`>M4#`)35
+M`P`2U@,``````*#2`P".T@,`<-(#`%#2`P`RT@,`'M(#``S2`P``T@,`]-$#
+M``````!0,D(``````'#M00``$$``$!!``"`00`!`$$``4!!``&`00`"P$$``
+MT!!``'`00`"0$$````````````"P[$$`8.U!`'!:0@"@GD(`<.Q"`!`#0P``
+M``````````"&0@"P&4,`<)]"```````````````````0````$!`````@$```
+M`$`0````4!````!@$````'`0````D!````"P$````-`0````T!8```#`'0``
+M`+`_````D&`````080```$"8````<)@```!0FP```)"=````T)X```#@GP``
+M`$"J````T-$```!PT@```*#2````$-,````PTP```&#3````D-,```"@#`$`
+M`-`<`0``\!P!```@'0$``+`>`0``D!\!``#0<@$``/"&`0``T(L!``#@BP$`
+M`/"+`0```(P!```0C`$``"",`0``P(P!``#0C`$``.",`0``,(T!``!`C0$`
+M`-"-`0``X(T!``#PC0$``!".`0``((X!```PC@$``$".`0``<(X!``"`C@$`
+M`!"/`0``((\!``#@D@$```"4`0``\)0!````E0$``!"5`0``()4!```PE0$`
+M``"6`0``,)8!``!`E@$``%"6`0``8)8!``!PE@$``&"8`0``<)@!``#`F0$`
+M`-"9`0``X)D!``#PF0$```":`0``$)H!```@F@$``+"=`0``\)T!``#`I@$`
+M`""L`0``8*\!``!PL0$``'"[`0``4,\!``#0YP$``+#L`0``8.T!``!P[0$`
+M`/#N`0``$.\!``!0[P$``!#S`0```/0!``"@]`$``%`A`@`!0","``"@)`(`
+M`$`E`@``@"4"``!0,@(``/`R`@``4#<"``!P6@(``"!^`@``0'X"``"@@@(`
+M`,""`@``X(("``#P@@(```"#`@``0(,"``!0@P(``&"$`@```(8"``"@D0(`
+M`,"3`@``\),"``"@G@(``'"?`@``<*$"``#0H0(``,"F`@``(*<"```@JP(`
+M`-"K`@``$*P"``"@M0(``%"Y`@``H+H"``#`N@(``'#L`@``$`,#``"P&0,`
+M`&`C`P``<",#``"`(P,``)`C`P``H",#``"P(P,``````````````````"H`
+M````````T!9``%";0`!PF$``D)U``-">0`#@GT``P!U```````!-`&$`>`!I
+M`&T`=0!M`"``80!L`&P`;P!W`&4`9``@`&$`<@!R`&$`>0`@`',`:0!Z`&4`
+M(``H`"4`=0`I`"``:0!S`"``90!X`&,`90!E`&0`90!D````0P!-`%0```!2
+M`%(``````&@`)0!U````:`!C`"4`=0``````>``E`'4```!X`&,`)0!U````
+M```````````````````[`"4`=0```````````0(#!`4&!P@)"@L,#0X/#@H$
+M"`D/#08!#``""P<%`PL(#``%`@\-"@X#!@<!"00'"0,!#0P+#@(&!0H$``\(
+M"0`%!P($"@\.`0L,!@@##0(,!@H`"P@#!`T'!0\.`0D,!0$/#@T$"@`'!@,)
+M`@@+#0L'#@P!`PD%``\$"`8""@8/#@D+`P`(#`(-!P$$"@4*`@@$!P8!!0\+
+M"0X##`T`9^8):H6N9[MR\VX\.O5/I7]2#E&,:`6;J]F#'QG-X%M_4@Y1C&@%
+MFZO9@Q\9S>!;9^8):H6N9[MR\VX\.O5/I2X`7```````4P!E`%,`90!C`'4`
+M<@!I`'0`>0!0`'(`:0!V`&D`;`!E`&<`90```%,`90!2`&4`<P!T`&\`<@!E
+M`%``<@!I`'8`:0!L`&4`9P!E``````!3`&4`0P!R`&4`80!T`&4`4P!Y`&T`
+M8@!O`&P`:0!C`$P`:0!N`&L`4`!R`&D`=@!I`&P`90!G`&4```!<`#\`/P!<
+M``````!5`$X`0P!<``````!!`$,`3````%,`5`!-````<@!T`&T`<``E`&0`
+M`````$"80`!0FT``<)A``)"=0`#0GD``X)]``,`=0``N````+@`N```````J
+M`#\``````"X`<@!A`'(``````"X`90!X`&4``````"X`<P!F`'@``````#``
+M,```````/P`J`#P`/@!\`"(``````#\`*@``````)0!C`#H`7```````7`!<
+M`#\`7```````50!.`$,````J;65S<V%G97,J*BH`````*@!M`&4`<P!S`&$`
+M9P!E`',`*@`J`"H``````'(A&@<`````<SH``%,`5`!2`$D`3@!'`%,```!$
+M`$D`00!,`$\`1P``````30!%`$X`50``````1`!)`%(`10!#`%0`20!/`$X`
+M``!2`%0`3````"0E<SH`````0"5S.@`````@``D`+````',````D)7,`0"5S
+M`"0`)0!S`#H`)0!S```````D`"4`<P`Z``````!#`$$`4`!4`$D`3P!.````
+M4P!)`%H`10``````0P!R`'D`<`!T`#,`,@`N`&0`;`!L````0W)Y<'10<F]T
+M96-T365M;W)Y``!#<GEP=%5N<')O=&5C=$UE;6]R>0````!#`'(`>0!P`'0`
+M4`!R`&\`=`!E`&,`=`!-`&4`;0!O`'(`>0`@`&8`80!I`&P`90!D````0P!R
+M`'D`<`!T`%4`;@!P`'(`;P!T`&4`8P!T`$T`90!M`&\`<@!Y`"``9@!A`&D`
+M;`!E`&0`````````F"^*0I%$-W'/^\"UI=NUZ5O"5CGQ$?%9I((_DM5>'*N8
+MJ@?8`5N#$KZ%,23#?0Q5=%V^<OZQWH"G!MR;=/&;P<%IF^2&1[[OQIW!#\RA
+M#"1O+.DMJH1T2MRIL%S:B/EV4E$^F&W&,:C()P.PQW]9O_,+X,9'D:?546/*
+M!F<I*12%"K<G."$;+OQM+$T3#3A35',*9;L*:G8NR<*!A2QRDJ'HOZ)+9AJH
+M<(M+PJ-1;,<9Z)+1)`:9UH4U#O1PH&H0%L&D&0AL-QY,=T@GM;RP-+,,'#E*
+MJMA.3\J<6_-O+FCN@H]T;V.E>!1XR(0(`L>,^O^^D.ML4*3WH_F^\GAQQ@``
+M``!X;&ES='!O<P````!K`&4`<@!N`&4`;``S`#(``````%-E=$1L;$1I<F5C
+M=&]R>5<`````4V5T1&5F875L=$1L;$1I<F5C=&]R:65S`````'8`90!R`',`
+M:0!O`&X`+@!D`&P`;````$0`6`!'`$D`1`!E`&(`=0!G`"X`9`!L`&P```!S
+M`&8`8P!?`&\`<P`N`&0`;`!L``````!3`%,`4`!)`$,`3`!)`"X`1`!,`$P`
+M``!R`',`80!E`&X`:``N`&0`;`!L``````!5`%@`5`!H`&4`;0!E`"X`9`!L
+M`&P```!D`'<`;0!A`'``:0`N`&0`;`!L``````!C`'(`>0!P`'0`8@!A`',`
+M90`N`&0`;`!L````;`!P`&L`+@!D`&P`;````'4`<P!P`#$`,``N`&0`;`!L
+M````8P!L`&(`8P!A`'0`<0`N`&0`;`!L````8P!O`&T`<@!E`',`+@!D`&P`
+M;```````=P!S`#(`7P`S`#(`+@!D`&P`;```````=P!S`#(`:`!E`&P`<``N
+M`&0`;`!L````<`!S`&$`<`!I`"X`9`!L`&P```!I`&4`9@!R`&$`;0!E`"X`
+M9`!L`&P```!N`'0`<P!H`'(`=0!I`"X`9`!L`&P```!A`'0`;``N`&0`;`!L
+M````<P!E`'0`=0!P`&$`<`!I`"X`9`!L`&P``````&$`<`!P`&@`90!L`'``
+M+@!D`&P`;````'4`<P!E`'(`90!N`'8`+@!D`&P`;````&X`90!T`&$`<`!I
+M`#,`,@`N`&0`;`!L``````!S`&@`9`!O`&,`=@!W`"X`9`!L`&P```!C`'(`
+M>0!P`'0`,P`R`"X`9`!L`&P```!M`',`80!S`&X`,0`N`&0`;`!L``````!C
+M`'(`>0!P`'0`=0!I`"X`9`!L`&P```!W`&D`;@!T`'(`=0!S`'0`+@!D`&P`
+M;```````<P!H`&4`;`!L`#,`,@`N`&0`;`!L````<P!E`&,`=0!R`#,`,@`N
+M`&0`;`!L````8P!A`&(`:0!N`&4`=``N`&0`;`!L````;P!L`&4`80!C`&,`
+M<@!C`"X`9`!L`&P``````&X`=`!M`&$`<@!T`&$`+@!D`&P`;````'``<@!O
+M`&8`80!P`&D`+@!D`&P`;````%<`:0!N`&0`;P!W`',`0P!O`&0`90!C`',`
+M+@!D`&P`;````',`<@!V`&,`;`!I`"X`9`!L`&P``````&,`<P!C`&$`<`!I
+M`"X`9`!L`&P``````',`;`!C`"X`9`!L`&P```!I`&T`80!G`&4`<@!E`',`
+M+@!D`&P`;```````9`!N`',`80!P`&D`+@!$`$P`3```````:0!P`&@`;`!P
+M`&$`<`!I`"X`1`!,`$P``````%<`20!.`$X`4P!)`"X`1`!,`$P``````&X`
+M90!T`'4`=`!I`&P`<P`N`&0`;`!L``````!M`'``<@`N`&0`;`!L````9`!E
+M`'8`<@!T`&P`+@!D`&P`;```````<`!R`&\`<`!S`'D`<P`N`&0`;`!L````
+M;0!L`&$`;@!G`"X`9`!L`&P```!S`&$`;0!C`&P`:0`N`&0`;`!L``````!S
+M`&$`;0!L`&D`8@`N`&0`;`!L``````!W`&L`<P!C`&P`:0`N`&0`;`!L````
+M``!D`&8`<P!C`&P`:0`N`&0`;`!L``````!B`'(`;P!W`&,`;`!I`"X`9`!L
+M`&P```!R`&$`<P!A`&0`:`!L`'``+@!D`&P`;```````9`!H`&,`<`!C`',`
+M=@!C`#8`+@!D`&P`;````&0`:`!C`'``8P!S`'8`8P`N`&0`;`!L``````!8
+M`&T`;`!,`&D`=`!E`"X`9`!L`&P```!L`&D`;@!K`&D`;@!F`&\`+@!D`&P`
+M;```````8P!R`'D`<`!T`',`<``N`&0`;`!L````4@!P`&,`4@!T`%(`90!M
+M`&\`=`!E`"X`9`!L`&P```!A`&,`;`!U`&D`+@!D`&P`;````&0`<P!R`&\`
+M;`!E`"X`9`!L`&P``````'``90!E`'(`9`!I`',`=``N`&0`;`!L``````!U
+M`'@`=`!H`&4`;0!E`"X`9`!L`&P```!0`&P`90!A`',`90`@`'(`90!M`&\`
+M=@!E`"``)0!S`"``9@!R`&\`;0`@`"4`<P`@`&8`;P!L`&0`90!R`"X`(`!)
+M`'0`(`!I`',`(`!U`&X`<P!E`&,`=0!R`&4`(`!T`&\`(`!R`'4`;@`@`"4`
+M<P`@`'4`;@!T`&D`;``@`&D`=``@`&D`<P`@`&0`;P!N`&4`+@```$,`<@!E
+M`&$`=`!E`%0`:`!R`&4`80!D`"``9@!A`&D`;`!E`&0````*`%<`80!I`'0`
+M1@!O`'(`30!U`&P`=`!I`'``;`!E`$\`8@!J`&4`8P!T`',`(`!E`'(`<@!O
+M`'(`(``E`&0`+``@`$<`90!T`$P`80!S`'0`10!R`'(`;P!R`"``)0!D````
+M``````H`5`!H`'(`90!A`&0`(`!P`&\`;P!L`"``:0!N`&D`=`!I`&$`;`!I
+M`'H`80!T`&D`;P!N`"``9@!A`&D`;`!E`&0`+@```"4`;`!S````/@```"4`
+M<P`Z`"``)0!S```````-``H``````%5N:VYO=VX@97AC97!T:6]N````8F%D
+M(&%L;&]C871I;VX``-T\/Q^_6?-(H62\6C)F46`9#@D'!04$!`0#`P,"`@("
+M`)1!`-"+00``ED$`X(Q!`#".00#0C4$`$)I!`."200#@C$$`\)1!`."+00`P
+MED$`0(Y!`,",00`0FD$`$)I!`!":00"`CD$`<)A!`,",00`0FD$`X(Q!`.",
+M00#@DD$``)5!`/"+00!`ED$`<(Y!`-",00#`C$$`P(Q!`,",00!PF$$`<)A!
+M`#".00#`C$$`X))!`,",00#@F4$`()5!`!",00!@ED$`P(Q!`#".00`0CD$`
+M$(]!`!"500``C$$`4)9!`,"900#PC4$`T)E!`!":00`0FD$`,(U!`."200#@
+MDD$`8)A!`/"900`@CD$`<)A!`."-00``FD$`0(U!`#"500`@C$$`<)9!`,",
+M00`PCD$`$(Y!`""/00!2`&$`<@!(`'0`;0!L`$,`;`!A`',`<P!.`&$`;0!E
+M``````!3`&@`90!L`&P`+@!%`'@`<`!L`&\`<@!E`'(``````&$`8@!O`'4`
+M=``Z`&(`;`!A`&X`:P```#P`:`!T`&T`;``^```````\`&@`90!A`&0`/@`\
+M`&T`90!T`&$`(`!H`'0`=`!P`"T`90!Q`'4`:0!V`#T`(@!C`&\`;@!T`&4`
+M;@!T`"T`=`!Y`'``90`B`"``8P!O`&X`=`!E`&X`=``]`"(`=`!E`'@`=``O
+M`&@`=`!M`&P`.P`@`&,`:`!A`'(`<P!E`'0`/0``````=0!T`&8`+0`X`"(`
+M/@`\`"\`:`!E`&$`9``^```````\`"\`:`!T`&T`;``^````/``O`'``/@``
+M````/`!B`'(`/@``````/`!S`'0`>0!L`&4`/@```#P`+P!S`'0`>0!L`&4`
+M/@```````````#P`<P!T`'D`;`!E`#X`8@!O`&0`>0![`&8`;P!N`'0`+0!F
+M`&$`;0!I`&P`>0`Z`"(`00!R`&D`80!L`"(`.P!F`&\`;@!T`"T`<P!I`'H`
+M90`Z`#$`,@`[`'T`/``O`',`=`!Y`&P`90`^```````F`&X`8@!S`'``.P``
+M````L)U!`/"=00"PG4$`\)U!`$4`1`!)`%0``````*G(7NR5PQ1#G'=4UZDU
+M_W!0`$X`1P```'(`:0!C`&@`90!D`#(`,``N`&0`;`!L``````!S.DE$4U]"
+M4D]74T54251,10```',Z24137T--1$585%)!0U1)3D<`<SI)1%-?4TM)4%!)
+M3D<``',Z24137U5.15A014]&``!S.DE$4U]&24Q%2$5!1$520E)/2T5.``!S
+M.DE$4U](14%$15)"4D]+14X``',Z24137TU!24Y(14%$15)"4D]+14X``',Z
+M24137T--5$A%041%4D)23TM%3@```',Z24137T--5$)23TM%3@!S.DE$4U]/
+M551/1DU%34]264524D]2``!S.DE$4U]53DM.3U=.34542$]$`',Z24137T-!
+M3DY/5$]014X`````<SI)1%-?0T%.3D]40U)%051%``!S.DE$4U]#04Y.3U1-
+M2T1)4@```',Z24137T5.0U)#4D-&04E,140`<SI)1%-?15A44D-20T9!24Q%
+M1`!S.DE$4U]004-+141$051!0U)#1D%)3$5$````<SI)1%-?5U))5$5%4E)/
+M4@````!S.DE$4U]214%$15)23U(`<SI)1%-?0TQ/4T5%4E)/4@````!S.DE$
+M4U]#04Y.3U1&24Y$5D],`',Z24137T)!1$%20TA)5D4`````<SI)1%-?15A4
+M4D%#5$E.1P````!S.DE$4U]!4TM.15A45D],5$E43$4```!S.DE$4U]!4D-(
+M14%$15)"4D]+14X```!S.DE$4U]$3TY%``!S.DE$4U]%4E)/4@!S.DE$4U]%
+M4E)/4E,`````<SI)1%-?0EE415,`<SI)1%-?34]$249)141/3@````!S.DE$
+M4U]"041&3TQ$15(`<SI)1%-?0U)%051%15)23U)3``!S.DE$4U]#4D-%4E)/
+M4E,`<SI)1%-?04Q,1DE,15,``',Z24137U1)5$Q%,0````!S.DE$4U]4251,
+M13%!````<SI)1%-?5$E43$4R`````',Z24137U1)5$Q%,P````!S.DE$4U]4
+M251,130`````<SI)1%-?5$E43$4U`````',Z24137U1)5$Q%-@````!S.DE$
+M4U]!4D-"4D]+14X`<SI)1%-?15A44D9)3$535$\```!S.DE$4U]%6%121DE,
+M15-43U1%35````!S.DE$4U]%6%1204-40E545$].`',Z24137T585%)!0U10
+M4D]'4D534P```',Z24137TU!6%!!5$A,24U)5```<SI)1%-?54Y+14Y#3454
+M2$]$``!S.DE$4U]74D].1U!!4U-73U)$`',Z24137U=23TY'1DE,15!!4U-7
+M3U)$`',Z24137T-/4%E%4E)/4@!S.DE$4U]#04Y.3U1#4D5!5$5,3DM3``!S
+M.DE$4U]#04Y.3U1#4D5!5$5,3DM(``!S.DE$4U]%4E),3DM405)'150``',Z
+M24137TY%141!1$U)3@!S.DE$4U]0055310!S.DE$4U]#3TY424Y510``<SI)
+M1%-?4T5#5T%23DE.1P````!S.DE$4U]314-$14Q$3$P`)%-405)41$Q'.E-)
+M6D4``"135$%25$1,1SI#05!424].````)%-405)41$Q'.DE$0U]$15-4141)
+M5%1)5$Q%`"135$%25$1,1SI)1$-?0TA!3D=%1$E2`"135$%25$1,1SI)1$-?
+M4%)/1U)%4U-"05)4251,10``)%-405)41$Q'.DE$3TL``"135$%25$1,1SI)
+M1$-!3D-%3```)%)%4$Q!0T5&24Q%1$Q'.E-)6D4`````)%)%4$Q!0T5&24Q%
+M1$Q'.D-!4%1)3TX`)%)%4$Q!0T5&24Q%1$Q'.DE$0U]/5U)&24Q%15A)4U13
+M````)%)%4$Q!0T5&24Q%1$Q'.DE$0U]/5U)!4TM215!,04-%````)%)%4$Q!
+M0T5&24Q%1$Q'.DE$0U]/5U)154535$E/3@`D4D503$%#149)3$5$3$<Z241#
+M7T]74EE%4P``)%)%4$Q!0T5&24Q%1$Q'.DE$0U]/5U)!3$P``"1215!,04-%
+M1DE,141,1SI)1$-?3U=24D5.04U%````)%)%4$Q!0T5&24Q%1$Q'.DE$0U]/
+M5U).3P```"1215!,04-%1DE,141,1SI)1$-?3U=23D]!3$P`````)%)%4$Q!
+M0T5&24Q%1$Q'.DE$0U]/5U)#04Y#14P````D4D5.04U%1$Q'.E-)6D4`)%)%
+M3D%-141,1SI#05!424].```D4D5.04U%1$Q'.DE$3TL`)%)%3D%-141,1SI)
+M1$-!3D-%3``D4D5.04U%1$Q'.DE$0U]214Y!345&4D]-````)%)%3D%-141,
+M1SI)1$-?4D5.04U%5$\`)$=%5%!!4U-73U)$,3I325I%```D1T544$%34U=/
+M4D0Q.D-!4%1)3TX````D1T544$%34U=/4D0Q.DE$0U]005-35T]21$5.5$52
+M`"1'151005-35T]21#$Z241/2P``)$=%5%!!4U-73U)$,3I)1$-!3D-%3```
+M)$Q)0T5.4T5$3$<Z4TE:10`````D3$E#14Y3141,1SI#05!424].`"1,24-%
+M3E-%1$Q'.DE$3TL`````)$Q)0T5.4T5$3$<Z241#04Y#14P`````)$%32TY%
+M6%163TPZ4TE:10`````D05-+3D585%9/3#I#05!424].`"1!4TM.15A45D],
+M.DE$0U].15A45D],24Y&3S$`````)$%32TY%6%163TPZ241#7TY%6%163TQ&
+M24Y$`"1!4TM.15A45D],.DE$0U].15A45D],24Y&3S(`````)$%32TY%6%16
+M3TPZ241/2P`````D05-+3D585%9/3#I)1$-!3D-%3`````!2`&$`<@!3`$8`
+M6```````4P!4`$$`5`!)`$,``````%(`10!0`$P`00!#`$4`1@!)`$P`10!$
+M`$P`1P``````4@!%`$X`00!-`$4`1`!,`$<````E`',`(``E`',`(``E`',`
+M`````"4`<P`@`"4`<P```$<`10!4`%``00!3`%,`5P!/`%(`1``Q```````E
+M`',``````%@```!!`%,`2P!.`$4`6`!4`%8`3P!,``````!W`&D`;@!R`&$`
+M<@!S`&8`>`!M`&$`<`!P`&D`;@!G`&8`:0!L`&4`+@!T`&T`<```````<P!F
+M`'@`;@!A`&T`90```"4`-`!D`"T`)0`P`#(`9``M`"4`,``R`&0`+0`E`#``
+M,@!D`"T`)0`P`#(`9``M`"4`,``R`&0`+0`E`#``,P!D````<P!F`'@`<P!T
+M`&D`;0!E``````!3`%0`00!2`%0`1`!,`$<``````',`9@!X`&,`;0!D````
+M``!S`&8`>`!P`&$`<@``````3`!)`$,`10!.`%,`10!$`$P`1P``````(```
+M`%\`7P!T`&T`<`!?`'(`80!R`%\`<P!F`'@`7P!A`&,`8P!E`',`<P!?`&,`
+M:`!E`&,`:P!?`"4`=0```"T`90!L`"``+0!S`#(`(``B`"T`9``E`',`(@`@
+M`"(`+0!S`'``)0!S`"(``````'(`=0!N`&$`<P```"(`)0!S`"(`"@`E`',`
+M``!$`&4`;`!E`'0`90``````5`!E`'@`=```````5`!I`'0`;`!E````4`!A
+M`'0`:```````4P!I`&P`90!N`'0``````$\`=@!E`'(`=P!R`&D`=`!E````
+M4P!E`'0`=0!P````5`!E`&T`<`!-`&\`9`!E``````!,`&D`8P!E`&X`<P!E
+M````4`!R`&4`<P!E`'0`=0!P``````!3`&@`;P!R`'0`8P!U`'0``````%,`
+M80!V`&4`4`!A`'0`:```````50!P`&0`80!T`&4``````%,`90!T`'4`<`!#
+M`&\`9`!E````)0!S`"X`)0!D`"X`=`!M`'``````````4P!O`&8`=`!W`&$`
+M<@!E`%P`30!I`&,`<@!O`',`;P!F`'0`7`!7`&D`;@!D`&\`=P!S`%P`0P!U
+M`'(`<@!E`&X`=`!6`&4`<@!S`&D`;P!N````4`!R`&\`9P!R`&$`;0!&`&D`
+M;`!E`',`1`!I`'(```!<````2`!)`$0`10``````30!!`%@```!-`$D`3@``
+M`"4`<P`E`',`)0!U```````N`&P`;@!K```````N`&D`;@!F``````!)`&X`
+M<P!T`&$`;`!L````4P!O`&8`=`!W`&$`<@!E`%P`5P!I`&X`4@!!`%(`(`!3
+M`$8`6````````````````````%5315(S,BYD;&P```````!'1$DS,BYD;&P`
+M````````0T]-1$Q',S(N9&QL`````$%$5D%023,R+F1L;`````!32$5,3#,R
+M+F1L;`#Y%`(``````,````````!&`````&]L93,R+F1L;```````````````
+MP````````$8`!`(``````,````````!&&`$```````#`````````1A(!````
+M````P````````$86`0```````,````````!&$P$```````#`````````1AD!
+M````````P````````$:$LI:QM+H:$+:<`*H`-!T'@"/5?P=.&Q"N+0@`*R['
+M$V$6#-.OS=`1BCX`P$_)XFZ@%:<TAV70$9)*`""OQZQ-P",_O3[4SQ&).P"J
+M`+W.&@L!````````P````````$8!%`(``````,````````!&8O+*RG"3%4:A
+M.Y]5.=I,"B3#W6\#3OY+L84]=W:-R1!+`$4`4@!.`$4`3``S`#(`+@!$`$P`
+M3```````06-Q=6ER95-25TQO8VM%>&-L=7-I=F4`4F5L96%S95-25TQO8VM%
+M>&-L=7-I=F4```````````!32$Q705!)+F1L;```````0T]-0U1,,S(N9&QL
+M`````!2K0P#0YT$`7```````````````````````````````````````````
+M````````````````````````````````````:.9#`)"L0P`E````8#)#````
+M``#4,D,`D``````U`1!<JT,`D!]!`/"&00"DJT,`D!]!`/"&00#PJT,`@"5"
+M`/"&00!B860@87)R87D@;F5W(&QE;F=T:``````X#48`B`U&`&-S;>`!````
+M```````````#````(`63&0``````````H"1"`$"L0P"`)4(`\(9!`&)A9"!E
+M>&-E<'1I;VX```#X54,`#%9#`$A60P!@.T,`80!D`'8`80!P`&D`,P`R````
+M```\`'``:0`M`&T`<P`M`'<`:0!N`"T`8P!O`'(`90`M`&8`:0!B`&4`<@!S
+M`"T`;``Q`"T`,0`M`#$````\`'``:0`M`&T`<P`M`'<`:0!N`"T`8P!O`'(`
+M90`M`',`>0!N`&,`:``M`&P`,0`M`#(`+0`P```````!`````P```$9L<T%L
+M;&]C``````$````#````1FQS1G)E90`!`````P```$9L<T=E=%9A;'5E``$`
+M```#````1FQS4V5T5F%L=64``@````,```!);FET:6%L:7IE0W)I=&EC86Q3
+M96-T:6]N17@``````(A80P"46$,`G%A#`*A80P"T6$,`P%A#`,Q80P#<6$,`
+MZ%A#`/!80P#X6$,`!%E#`!!90P!0.T,`'%E#`"190P`L64,`,%E#`#190P`X
+M64,`/%E#`$!90P!$64,`2%E#`%190P!864,`7%E#`&!90P!D64,`:%E#`&Q9
+M0P!P64,`=%E#`'A90P!\64,`@%E#`(190P"(64,`C%E#`)!90P"464,`F%E#
+M`)Q90P"@64,`I%E#`*A90P"L64,`L%E#`+190P"X64,`O%E#`,!90P#$64,`
+MR%E#`,Q90P#064,`W%E#`.A90P#P64,`_%E#`!1:0P`@6D,`-%I#`%1:0P!T
+M6D,`E%I#`+1:0P#46D,`^%I#`!1;0P`X6T,`6%M#`(!;0P"<6T,`K%M#`+!;
+M0P"X6T,`R%M#`.Q;0P#T6T,``%Q#`!!<0P`L7$,`3%Q#`'1<0P"<7$,`Q%Q#
+M`/!<0P`,74,`,%U#`%1=0P"`74,`K%U#`,A=0P!0.T,`V%U#`.Q=0P`(7D,`
+M'%Y#`#Q>0P!?7V)A<V5D*`````!?7V-D96-L`%]?<&%S8V%L`````%]?<W1D
+M8V%L;````%]?=&AI<V-A;&P``%]?9F%S=&-A;&P``%]?=F5C=&]R8V%L;```
+M``!?7V-L<F-A;&P```!?7V5A8FD``%]?<'1R-C0`7U]R97-T<FEC=```7U]U
+M;F%L:6=N960`<F5S=')I8W0H````(&YE=P`````@9&5L971E`#T````^/@``
+M/#P``"$````]/0``(3T``%M=``!O<&5R871O<@`````M/@``*@```"LK```M
+M+0``+0```"L````F````+3XJ`"\````E````/````#P]```^````/CT``"P`
+M```H*0``?@```%X```!\````)B8``'Q\```J/0``*ST``"T]```O/0``)3T`
+M`#X^/0`\/#T`)CT``'P]``!>/0``8'9F=&%B;&4G````8'9B=&%B;&4G````
+M8'9C86QL)P!@='EP96]F)P````!@;&]C86P@<W1A=&EC(&=U87)D)P````!@
+M<W1R:6YG)P````!@=F)A<V4@9&5S=')U8W1O<B<``&!V96-T;W(@9&5L971I
+M;F<@9&5S=')U8W1O<B<`````8&1E9F%U;'0@8V]N<W1R=6-T;W(@8VQO<W5R
+M92<```!@<V-A;&%R(&1E;&5T:6YG(&1E<W1R=6-T;W(G`````&!V96-T;W(@
+M8V]N<W1R=6-T;W(@:71E<F%T;W(G````8'9E8W1O<B!D97-T<G5C=&]R(&ET
+M97)A=&]R)P````!@=F5C=&]R('9B87-E(&-O;G-T<G5C=&]R(&ET97)A=&]R
+M)P!@=FER='5A;"!D:7-P;&%C96UE;G0@;6%P)P``8&5H('9E8W1O<B!C;VYS
+M=')U8W1O<B!I=&5R871O<B<`````8&5H('9E8W1O<B!D97-T<G5C=&]R(&ET
+M97)A=&]R)P!@96@@=F5C=&]R('9B87-E(&-O;G-T<G5C=&]R(&ET97)A=&]R
+M)P``8&-O<'D@8V]N<W1R=6-T;W(@8VQO<W5R92<``&!U9'0@<F5T=7)N:6YG
+M)P!@14@`8%)45$D```!@;&]C86P@=F9T86)L92<`8&QO8V%L('9F=&%B;&4@
+M8V]N<W1R=6-T;W(@8VQO<W5R92<`(&YE=UM=```@9&5L971E6UT```!@;VUN
+M:2!C86QL<VEG)P``8'!L86-E;65N="!D96QE=&4@8VQO<W5R92<``&!P;&%C
+M96UE;G0@9&5L971E6UT@8VQO<W5R92<`````8&UA;F%G960@=F5C=&]R(&-O
+M;G-T<G5C=&]R(&ET97)A=&]R)P```&!M86YA9V5D('9E8W1O<B!D97-T<G5C
+M=&]R(&ET97)A=&]R)P````!@96@@=F5C=&]R(&-O<'D@8V]N<W1R=6-T;W(@
+M:71E<F%T;W(G````8&5H('9E8W1O<B!V8F%S92!C;W!Y(&-O;G-T<G5C=&]R
+M(&ET97)A=&]R)P!@9'EN86UI8R!I;FET:6%L:7IE<B!F;W(@)P``8&1Y;F%M
+M:6,@871E>&ET(&1E<W1R=6-T;W(@9F]R("<`````8'9E8W1O<B!C;W!Y(&-O
+M;G-T<G5C=&]R(&ET97)A=&]R)P``8'9E8W1O<B!V8F%S92!C;W!Y(&-O;G-T
+M<G5C=&]R(&ET97)A=&]R)P````!@;6%N86=E9"!V96-T;W(@8V]P>2!C;VYS
+M=')U8W1O<B!I=&5R871O<B<``&!L;V-A;"!S=&%T:6,@=&AR96%D(&=U87)D
+M)P!O<&5R871O<B`B(B``````(%1Y<&4@1&5S8W)I<'1O<B<````@0F%S92!#
+M;&%S<R!$97-C<FEP=&]R(&%T("@`($)A<V4@0VQA<W,@07)R87DG```@0VQA
+M<W,@2&EE<F%R8VAY($1E<V-R:7!T;W(G`````"!#;VUP;&5T92!/8FIE8W0@
+M3&]C871O<B<````&```&``$``!```P8`!@(0!$5%104%!04%-3``4``````H
+M(#A06`<(`#<P,%=0!P``("`(!P````A@:&!@8&```'AP>'AX>`@'"`<`!P`(
+M"`@```@'"``'"``'`"AN=6QL*0``*`!N`'4`;`!L`"D````````````%``#`
+M"P`````````=``#`!`````````"6``#`!`````````"-``#`"`````````".
+M``#`"`````````"/``#`"`````````"0``#`"`````````"1``#`"```````
+M``"2``#`"`````````"3``#`"`````````"T`@#`"`````````"U`@#`"```
+M```````,`````P````D```!M`',`8P!O`'(`90!E`"X`9`!L`&P```!#;W)%
+M>&ET4')O8V5S<P```````*""0@```````(-"```````@JT(`T*M"`/""0@#P
+M@D(`P*9"`""G0@"@ND(`P+I"``````!`@T(`P)-"`/"30@!PH4(`T*%"`%"Y
+M0@#P@D(`H+5"````````````\()"``````!0@T(`\()"`.""0@#`@D(`\()"
+M``$````6`````@````(````#`````@````0````8````!0````T````&````
+M"0````<````,````"`````P````)````#`````H````'````"P````@````,
+M````%@````T````6````#P````(````0````#0```!$````2````$@````(`
+M```A````#0```#4````"````00````T```!#`````@```%`````1````4@``
+M``T```!3````#0```%<````6````60````L```!L````#0```&T````@````
+M<````!P```!R````"0````8````6````@`````H```"!````"@```((````)
+M````@P```!8```"$````#0```)$````I````G@````T```"A`````@```*0`
+M```+````IP````T```"W````$0```,X````"````UP````L````8!P``#```
+M`$E.1@!I;F8`3D%.`&YA;@!.04XH4TY!3BD```!N86XH<VYA;BD```!.04XH
+M24Y$*0````!N86XH:6YD*0````!E*S`P,````%-U;@!-;VX`5'5E`%=E9`!4
+M:'4`1G)I`%-A=`!3=6YD87D``$UO;F1A>0``5'5E<V1A>0!7961N97-D87D`
+M``!4:'5R<V1A>0````!&<FED87D``%-A='5R9&%Y`````$IA;@!&96(`36%R
+M`$%P<@!-87D`2G5N`$IU;`!!=6<`4V5P`$]C=`!.;W8`1&5C`$IA;G5A<GD`
+M1F5B<G5A<GD`````36%R8V@```!!<')I;````$IU;F4`````2G5L>0````!!
+M=6=U<W0``%-E<'1E;6)E<@```$]C=&]B97(`3F]V96UB97(`````1&5C96UB
+M97(`````04T``%!-``!-32]D9"]Y>0````!D9&1D+"!-34U-(&1D+"!Y>7EY
+M`$A(.FUM.G-S`````%,`=0!N````30!O`&X```!4`'4`90```%<`90!D````
+M5`!H`'4```!&`'(`:0```%,`80!T````4P!U`&X`9`!A`'D``````$T`;P!N
+M`&0`80!Y``````!4`'4`90!S`&0`80!Y````5P!E`&0`;@!E`',`9`!A`'D`
+M``!4`&@`=0!R`',`9`!A`'D``````$8`<@!I`&0`80!Y``````!3`&$`=`!U
+M`'(`9`!A`'D``````$H`80!N````1@!E`&(```!-`&$`<@```$$`<`!R````
+M30!A`'D```!*`'4`;@```$H`=0!L````00!U`&<```!3`&4`<````$\`8P!T
+M````3@!O`'8```!$`&4`8P```$H`80!N`'4`80!R`'D```!&`&4`8@!R`'4`
+M80!R`'D``````$T`80!R`&,`:````$$`<`!R`&D`;````$H`=0!N`&4`````
+M`$H`=0!L`'D``````$$`=0!G`'4`<P!T``````!3`&4`<`!T`&4`;0!B`&4`
+M<@```$\`8P!T`&\`8@!E`'(```!.`&\`=@!E`&T`8@!E`'(``````$0`90!C
+M`&4`;0!B`&4`<@``````00!-``````!0`$T``````$T`30`O`&0`9``O`'D`
+M>0``````9`!D`&0`9``L`"``30!-`$T`30`@`&0`9``L`"``>0!Y`'D`>0``
+M`$@`2``Z`&T`;0`Z`',`<P``````90!N`"T`50!3`````````,!A0P#$84,`
+MR&%#`,QA0P#084,`U&%#`-AA0P#<84,`Y&%#`.QA0P#T84,``&)#``QB0P`4
+M8D,`(&)#`"1B0P`H8D,`+&)#`#!B0P`T8D,`.&)#`#QB0P!`8D,`1&)#`$AB
+M0P!,8D,`4&)#`%AB0P!D8D,`;&)#`#!B0P!T8D,`?&)#`(1B0P",8D,`F&)#
+M`*!B0P"L8D,`N&)#`+QB0P#`8D,`S&)#`.!B0P`!`````````.QB0P#T8D,`
+M_&)#``1C0P`,8T,`%&-#`!QC0P`D8T,`-&-#`$1C0P!48T,`:&-#`'QC0P",
+M8T,`H&-#`*AC0P"P8T,`N&-#`,!C0P#(8T,`T&-#`-AC0P#@8T,`Z&-#`/!C
+M0P#X8T,``&1#`!!D0P`D9$,`,&1#`,!C0P`\9$,`2&1#`%1D0P!D9$,`>&1#
+M`(AD0P"<9$,`L&1#`+AD0P#`9$,`U&1#`/QD0P`094,`````````(``@`"``
+M(``@`"``(``@`"``*``H`"@`*``H`"``(``@`"``(``@`"``(``@`"``(``@
+M`"``(``@`"``(``@`$@`$``0`!``$``0`!``$``0`!``$``0`!``$``0`!``
+MA`"$`(0`A`"$`(0`A`"$`(0`A``0`!``$``0`!``$``0`($!@0&!`8$!@0&!
+M`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$0`!``
+M$``0`!``$`""`8(!@@&"`8(!@@$"`0(!`@$"`0(!`@$"`0(!`@$"`0(!`@$"
+M`0(!`@$"`0(!`@$"`0(!$``0`!``$``@`"``(``@`"``(``H`"``(``@`"``
+M(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``(
+M`!``$``0`!``$``0`!``$``0`!(!$``0`#``$``0`!``$``4`!0`$``2`1``
+M$``0`!0`$@$0`!``$``0`!```0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!
+M`0$!`0$!`0$!`0$!`0$!`0$!`1```0$!`0$!`0$!`0$!`0$"`0(!`@$"`0(!
+M`@$"`0(!`@$"`0(!`@$"`0(!`@$"`0(!`@$"`0(!`@$"`0(!`@$0``(!`@$"
+M`0(!`@$"`0(!`@$!`0``````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````(``@`"``(``@`"``(``@`"``*``H`"@`*``H`"``(``@`"``(``@`"``
+M(``@`"``(``@`"``(``@`"``(``@`$@`$``0`!``$``0`!``$``0`!``$``0
+M`!``$``0`!``A`"$`(0`A`"$`(0`A`"$`(0`A``0`!``$``0`!``$``0`($`
+M@0"!`($`@0"!``$``0`!``$``0`!``$``0`!``$``0`!``$``0`!``$``0`!
+M``$``0`0`!``$``0`!``$`""`((`@@""`((`@@`"``(``@`"``(``@`"``(`
+M`@`"``(``@`"``(``@`"``(``@`"``(`$``0`!``$``@````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````"`@8*#A(6&AXB)BHN,C8Z/D)&2DY25EI>8
+MF9J;G)V>GZ"AHJ.DI::GJ*FJJZRMKJ^PL;*SM+6VM[BYNKN\O;Z_P,'"P\3%
+MQL?(R<K+S,W.S]#1TM/4U=;7V-G:V]S=WM_@X>+CY.7FY^CIZNOL[>[O\/'R
+M\_3U]O?X^?K[_/W^_P`!`@,$!08'"`D*"PP-#@\0$1(3%!46%Q@9&AL<'1X?
+M("$B(R0E)B<H*2HK+"TN+S`Q,C,T-38W.#DZ.SP]/C]`86)C9&5F9VAI:FML
+M;6YO<'%R<W1U=G=X>7I;7%U>7V!A8F-D969G:&EJ:VQM;F]P<7)S='5V=WAY
+M>GM\?7Y_@(&"@X2%AH>(B8J+C(V.CY"1DI.4E9:7F)F:FYR=GI^@H:*CI*6F
+MIZBIJJNLK:ZOL+&RL[2UMK>XN;J[O+V^O\#!PL/$Q<;'R,G*R\S-SL_0T=+3
+MU-76U]C9VMO<W=[?X.'BX^3EYN?HZ>KK[.WN[_#Q\O/T]?;W^/GZ^_S]_O^`
+M@8*#A(6&AXB)BHN,C8Z/D)&2DY25EI>8F9J;G)V>GZ"AHJ.DI::GJ*FJJZRM
+MKJ^PL;*SM+6VM[BYNKN\O;Z_P,'"P\3%QL?(R<K+S,W.S]#1TM/4U=;7V-G:
+MV]S=WM_@X>+CY.7FY^CIZNOL[>[O\/'R\_3U]O?X^?K[_/W^_P`!`@,$!08'
+M"`D*"PP-#@\0$1(3%!46%Q@9&AL<'1X?("$B(R0E)B<H*2HK+"TN+S`Q,C,T
+M-38W.#DZ.SP]/C]`04)#1$5&1TA)2DM,34Y/4%%24U155E=865I;7%U>7V!!
+M0D-$149'2$E*2TQ-3D]045)35%565UA96GM\?7Y_@(&"@X2%AH>(B8J+C(V.
+MCY"1DI.4E9:7F)F:FYR=GI^@H:*CI*6FIZBIJJNLK:ZOL+&RL[2UMK>XN;J[
+MO+V^O\#!PL/$Q<;'R,G*R\S-SL_0T=+3U-76U]C9VMO<W=[?X.'BX^3EYN?H
+MZ>KK[.WN[_#Q\O/T]?;W^/GZ^_S]_O_@;D,`*&]#``Q60P!H;T,`H&]#`.AO
+M0P!(<$,`E'!#`$A60P#0<$,`$'%#`$QQ0P"(<4,`V'%#`#!R0P"(<D,`T')#
+M`/A50P!@.T,`('-#`&$`<`!I`"T`;0!S`"T`=P!I`&X`+0!A`'``<`!M`&\`
+M9`!E`&P`+0!R`'4`;@!T`&D`;0!E`"T`;``Q`"T`,0`M`#$``````#P`<`!I
+M`"T`;0!S`"T`=P!I`&X`+0!C`&\`<@!E`"T`9`!A`'0`90!T`&D`;0!E`"T`
+M;``Q`"T`,0`M`#$````\`'``:0`M`&T`<P`M`'<`:0!N`"T`8P!O`'(`90`M
+M`&8`:0!L`&4`+0!L`#(`+0`Q`"T`,0```#P`<`!I`"T`;0!S`"T`=P!I`&X`
+M+0!C`&\`<@!E`"T`;`!O`&,`80!L`&D`>@!A`'0`:0!O`&X`+0!L`#$`+0`R
+M`"T`,0```#P`<`!I`"T`;0!S`"T`=P!I`&X`+0!C`&\`<@!E`"T`;`!O`&,`
+M80!L`&D`>@!A`'0`:0!O`&X`+0!O`&(`<P!O`&P`90!T`&4`+0!L`#$`+0`R
+M`"T`,````````````#P`<`!I`"T`;0!S`"T`=P!I`&X`+0!C`&\`<@!E`"T`
+M<`!R`&\`8P!E`',`<P!T`&@`<@!E`&$`9`!S`"T`;``Q`"T`,0`M`#(````\
+M`'``:0`M`&T`<P`M`'<`:0!N`"T`8P!O`'(`90`M`',`=`!R`&D`;@!G`"T`
+M;``Q`"T`,0`M`#`````\`'``:0`M`&T`<P`M`'<`:0!N`"T`8P!O`'(`90`M
+M`',`>0!S`&D`;@!F`&\`+0!L`#$`+0`R`"T`,0``````/`!P`&D`+0!M`',`
+M+0!W`&D`;@`M`&,`;P!R`&4`+0!W`&D`;@!R`'0`+0!L`#$`+0`Q`"T`,```
+M````/`!P`&D`+0!M`',`+0!W`&D`;@`M`&,`;P!R`&4`+0!X`',`=`!A`'0`
+M90`M`&P`,@`M`#$`+0`P````80!P`&D`+0!M`',`+0!W`&D`;@`M`'(`=`!C
+M`&\`<@!E`"T`;@!T`'4`<P!E`'(`+0!W`&D`;@!D`&\`=P`M`&P`,0`M`#$`
+M+0`P``````!A`'``:0`M`&T`<P`M`'<`:0!N`"T`<P!E`&,`=0!R`&D`=`!Y
+M`"T`<P!Y`',`=`!E`&T`9@!U`&X`8P!T`&D`;P!N`',`+0!L`#$`+0`Q`"T`
+M,```````90!X`'0`+0!M`',`+0!W`&D`;@`M`&L`90!R`&X`90!L`#,`,@`M
+M`'``80!C`&L`80!G`&4`+0!C`'4`<@!R`&4`;@!T`"T`;``Q`"T`,0`M`#``
+M`````&4`>`!T`"T`;0!S`"T`=P!I`&X`+0!N`'0`=0!S`&4`<@`M`&0`:0!A
+M`&P`;P!G`&(`;P!X`"T`;``Q`"T`,0`M`#```````&4`>`!T`"T`;0!S`"T`
+M=P!I`&X`+0!N`'0`=0!S`&4`<@`M`'<`:0!N`&0`;P!W`',`=`!A`'0`:0!O
+M`&X`+0!L`#$`+0`Q`"T`,```````=0!S`&4`<@`S`#(```````(````2````
+M`@```!(````"````$@````(````2``````````X```!'971#=7)R96YT4&%C
+M:V%G94ED``@````2````!````!(```!,0TUA<%-T<FEN9T5X````!````!(`
+M``!,;V-A;&5.86UE5&],0TE$`````+AS0P#$<T,`T'-#`-QS0P!J`&$`+0!*
+M`%````!Z`&@`+0!#`$X```!K`&\`+0!+`%(```!Z`&@`+0!4`%<```!U`&L`
+M``````#D"U0"```````08RU>QVL%````````0.KM=$;0G"R?#`````!A];FK
+MOZ1<P_$I8QT``````&2U_30%Q-*'9I+Y%3ML1````````!#9D&64+$)BUP%%
+M(IH7)B=/GP```$`"E0?!B58D'*?ZQ6=MR'/<;:WK<@$`````P<YD)Z)CRABD
+M[R5[T<UP[]]K'S[JG5\#``````#D;O[#S6H,O&8R'SDN`P)%6B7XTG%62L+#
+MV@<``!"/+J@(0[*J?!HACD#.BO,+SL2$)POK?,.4):U)$@```$`:W=I4G\R_
+M85G<JZM<QPQ$!?5G%KS14J^W^RF-CV"4*@``````(0R*NQ>DCJ]6J9]'!C:R
+M2UW@7]R`"JK^\$#9CJC0@!IK(V,``&0X3#*6QU>#U4)*Y&$BJ=D]$#R]<O/E
+MD7056<`-IAWL;-DJ$-/F````$(4>6V%/;FDJ>Q@<XE`$*S3=+^XG4&.9<<FF
+M%NE*CB@N"!=O;DD:;AD"````0#(F0*T$4'(>^=71E"F[S5MFEBX[HMM]^F6L
+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
+MO5X\5C=WXSBCRSU/GM*!+)[WI'3'^<.7YQQJ..1?K)R+\P?Z[(C5K,%:/L[,
+MKX5P/Q^=TVTMZ`P8?1=OE&E>X2R.9$@YH941X`\T6#P7M)3V2">]5R9\+MJ+
+M=:"0@#L3MMLMD$C/;7X$Y"294````````@(```,%```$"0`!!`T``042``$&
+M&``"!AX``@<E``((+0`#"#4``PD^``,*2``$"E(`!`M=``0,:0`%#'4`!0V"
+M``4.D``%#Y\`!@^N``80O@`&$<\`!Q'@``<2\@`'$P4!"!,8`0@5+0$(%D,!
+M"199`0D7<`$)&(@!"AB@`0H9N0$*&M,!"AON`0L;"0(+'"4""QT*````9```
+M`.@#```0)P``H(8!`$!"#P"`EI@``.'U!0#*FCLP````,2-)3D8````Q(U%.
+M04X``#$C4TY!3@``,2-)3D0````!````^(1#``(`````A4,``P````B%0P`$
+M````$(5#``4````@A4,`!@```"B%0P`'````,(5#``@````XA4,`"0```$"%
+M0P`*````2(5#``L```!0A4,`#````%B%0P`-````8(5#``X```!HA4,`#P``
+M`'"%0P`0````>(5#`!$```"`A4,`$@```(B%0P`3````D(5#`!0```"8A4,`
+M%0```*"%0P`6````J(5#`!@```"PA4,`&0```+B%0P`:````P(5#`!L```#(
+MA4,`'````-"%0P`=````V(5#`!X```#@A4,`'P```.B%0P`@````\(5#`"$`
+M``#XA4,`(@```.AS0P`C`````(9#`"0````(AD,`)0```!"&0P`F````&(9#
+M`"<````@AD,`*0```"B&0P`J````,(9#`"L````XAD,`+````$"&0P`M````
+M2(9#`"\```!0AD,`-@```%B&0P`W````8(9#`#@```!HAD,`.0```'"&0P`^
+M````>(9#`#\```"`AD,`0````(B&0P!!````D(9#`$,```"8AD,`1````*"&
+M0P!&````J(9#`$<```"PAD,`20```+B&0P!*````P(9#`$L```#(AD,`3@``
+M`-"&0P!/````V(9#`%````#@AD,`5@```.B&0P!7````\(9#`%H```#XAD,`
+M90````"'0P!_````M#5#``$$```(AT,``@0``!2'0P`#!```((=#``0$``#<
+M<T,`!00``"R'0P`&!```.(=#``<$``!$AT,`"`0``%"'0P`)!```$&5#``L$
+M``!<AT,`#`0``&B'0P`-!```=(=#``X$``"`AT,`#P0``(R'0P`0!```F(=#
+M`!$$``"X<T,`$@0``-!S0P`3!```I(=#`!0$``"PAT,`%00``+R'0P`6!```
+MR(=#`!@$``#4AT,`&00``."'0P`:!```[(=#`!L$``#XAT,`'`0```2(0P`=
+M!```$(A#`!X$```<B$,`'P0``"B(0P`@!```-(A#`"$$``!`B$,`(@0``$R(
+M0P`C!```6(A#`"0$``!DB$,`)00``'"(0P`F!```?(A#`"<$``"(B$,`*00`
+M`)2(0P`J!```H(A#`"L$``"LB$,`+`0``+B(0P`M!```T(A#`"\$``#<B$,`
+M,@0``.B(0P`T!```](A#`#4$````B4,`-@0```R)0P`W!```&(E#`#@$```D
+MB4,`.00``#")0P`Z!```/(E#`#L$``!(B4,`/@0``%2)0P`_!```8(E#`$`$
+M``!LB4,`000``'B)0P!#!```A(E#`$0$``"<B4,`100``*B)0P!&!```M(E#
+M`$<$``#`B4,`200``,R)0P!*!```V(E#`$L$``#DB4,`3`0``/")0P!.!```
+M_(E#`$\$```(BD,`4`0``!2*0P!2!```((I#`%8$```LBD,`5P0``#B*0P!:
+M!```2(I#`&4$``!8BD,`:P0``&B*0P!L!```>(I#`($$``"$BD,``0@``)"*
+M0P`$"```Q'-#``<(``"<BD,`"0@``*B*0P`*"```M(I#``P(``#`BD,`$`@`
+M`,R*0P`3"```V(I#`!0(``#DBD,`%@@``/"*0P`:"```_(I#`!T(```4BT,`
+M+`@``""+0P`["```.(M#`#X(``!$BT,`0P@``%"+0P!K"```:(M#``$,``!X
+MBT,`!`P``(2+0P`'#```D(M#``D,``"<BT,`"@P``*B+0P`,#```M(M#`!H,
+M``#`BT,`.PP``-B+0P!K#```Y(M#``$0``#TBT,`!!````",0P`'$```#(Q#
+M``D0```8C$,`"A```"2,0P`,$```,(Q#`!H0```\C$,`.Q```$B,0P`!%```
+M6(Q#``04``!DC$,`!Q0``'",0P`)%```?(Q#``H4``"(C$,`#!0``)2,0P`:
+M%```H(Q#`#L4``"XC$,``1@``,B,0P`)&```U(Q#``H8``#@C$,`#!@``.R,
+M0P`:&```^(Q#`#L8```0C4,``1P``""-0P`)'```+(U#``H<```XC4,`&AP`
+M`$2-0P`['```7(U#``$@``!LC4,`"2```'B-0P`*(```A(U#`#L@``"0C4,`
+M`20``*"-0P`))```K(U#``HD``"XC4,`.R0``,2-0P`!*```U(U#``DH``#@
+MC4,`"B@``.R-0P`!+```^(U#``DL```$CD,`"BP``!".0P`!,```'(Y#``DP
+M```HCD,`"C```#2.0P`!-```0(Y#``DT``!,CD,`"C0``%B.0P`!.```9(Y#
+M``HX``!PCD,``3P``'R.0P`*/```B(Y#``%```"4CD,`"D```*".0P`*1```
+MK(Y#``I(``"XCD,`"DP``,2.0P`*4```T(Y#``1\``#<CD,`&GP``.R.0P!A
+M`'(``````&(`9P``````8P!A``````!Z`&@`+0!#`$@`4P``````8P!S````
+M``!D`&$``````&0`90``````90!L``````!E`&X``````&4`<P``````9@!I
+M``````!F`'(``````&@`90``````:`!U``````!I`',``````&D`=```````
+M:@!A``````!K`&\``````&X`;```````;@!O``````!P`&P``````'``=```
+M````<@!O``````!R`'4``````&@`<@``````<P!K``````!S`'$``````',`
+M=@``````=`!H``````!T`'(``````'4`<@``````:0!D``````!B`&4`````
+M`',`;```````90!T``````!L`'8``````&P`=```````9@!A``````!V`&D`
+M`````&@`>0``````80!Z``````!E`'4``````&T`:P``````80!F``````!K
+M`&$``````&8`;P``````:`!I``````!M`',``````&L`:P``````:P!Y````
+M``!S`'<``````'4`>@``````=`!T``````!P`&$``````&<`=0``````=`!A
+M``````!T`&4``````&L`;@``````;0!R``````!S`&$``````&T`;@``````
+M9P!L``````!K`&\`:P```',`>0!R````9`!I`'8```!A`'(`+0!3`$$```!B
+M`&<`+0!"`$<```!C`&$`+0!%`%,```!C`',`+0!#`%H```!D`&$`+0!$`$L`
+M``!D`&4`+0!$`$4```!E`&P`+0!'`%(```!F`&D`+0!&`$D```!F`'(`+0!&
+M`%(```!H`&4`+0!)`$P```!H`'4`+0!(`%4```!I`',`+0!)`%,```!I`'0`
+M+0!)`%0```!N`&P`+0!.`$P```!N`&(`+0!.`$\```!P`&P`+0!0`$P```!P
+M`'0`+0!"`%(```!R`&\`+0!2`$\```!R`'4`+0!2`%4```!H`'(`+0!(`%(`
+M``!S`&L`+0!3`$L```!S`'$`+0!!`$P```!S`'8`+0!3`$4```!T`&@`+0!4
+M`$@```!T`'(`+0!4`%(```!U`'(`+0!0`$L```!I`&0`+0!)`$0```!U`&L`
+M+0!5`$$```!B`&4`+0!"`%D```!S`&P`+0!3`$D```!E`'0`+0!%`$4```!L
+M`'8`+0!,`%8```!L`'0`+0!,`%0```!F`&$`+0!)`%(```!V`&D`+0!6`$X`
+M``!H`'D`+0!!`$T```!A`'H`+0!!`%H`+0!,`&$`=`!N``````!E`'4`+0!%
+M`%,```!M`&L`+0!-`$L```!T`&X`+0!:`$$```!X`&@`+0!:`$$```!Z`'4`
+M+0!:`$$```!A`&8`+0!:`$$```!K`&$`+0!'`$4```!F`&\`+0!&`$\```!H
+M`&D`+0!)`$X```!M`'0`+0!-`%0```!S`&4`+0!.`$\```!M`',`+0!-`%D`
+M``!K`&L`+0!+`%H```!K`'D`+0!+`$<```!S`'<`+0!+`$4```!U`'H`+0!5
+M`%H`+0!,`&$`=`!N``````!T`'0`+0!2`%4```!B`&X`+0!)`$X```!P`&$`
+M+0!)`$X```!G`'4`+0!)`$X```!T`&$`+0!)`$X```!T`&4`+0!)`$X```!K
+M`&X`+0!)`$X```!M`&P`+0!)`$X```!M`'(`+0!)`$X```!S`&$`+0!)`$X`
+M``!M`&X`+0!-`$X```!C`'D`+0!'`$(```!G`&P`+0!%`%,```!K`&\`:P`M
+M`$D`3@``````<P!Y`'(`+0!3`%D``````&0`:0!V`"T`30!6``````!Q`'4`
+M>@`M`$(`3P``````;@!S`"T`6@!!````;0!I`"T`3@!:````80!R`"T`20!1
+M````9`!E`"T`0P!(````90!N`"T`1P!"````90!S`"T`30!8````9@!R`"T`
+M0@!%````:0!T`"T`0P!(````;@!L`"T`0@!%````;@!N`"T`3@!/````<`!T
+M`"T`4`!4````<P!R`"T`4P!0`"T`3`!A`'0`;@``````<P!V`"T`1@!)````
+M80!Z`"T`00!:`"T`0P!Y`'(`;```````<P!E`"T`4P!%````;0!S`"T`0@!.
+M````=0!Z`"T`50!:`"T`0P!Y`'(`;```````<0!U`'H`+0!%`$,``````&$`
+M<@`M`$4`1P```'H`:``M`$@`2P```&0`90`M`$$`5````&4`;@`M`$$`50``
+M`&4`<P`M`$4`4P```&8`<@`M`$,`00```',`<@`M`%,`4``M`$,`>0!R`&P`
+M`````',`90`M`$8`20```'$`=0!Z`"T`4`!%``````!A`'(`+0!,`%D```!Z
+M`&@`+0!3`$<```!D`&4`+0!,`%4```!E`&X`+0!#`$$```!E`',`+0!'`%0`
+M``!F`'(`+0!#`$@```!H`'(`+0!"`$$```!S`&T`:@`M`$X`3P``````80!R
+M`"T`1`!:````>@!H`"T`30!/````9`!E`"T`3`!)````90!N`"T`3@!:````
+M90!S`"T`0P!2````9@!R`"T`3`!5````8@!S`"T`0@!!`"T`3`!A`'0`;@``
+M````<P!M`&H`+0!3`$4``````&$`<@`M`$T`00```&4`;@`M`$D`10```&4`
+M<P`M`%``00```&8`<@`M`$T`0P```',`<@`M`$(`00`M`$P`80!T`&X`````
+M`',`;0!A`"T`3@!/``````!A`'(`+0!4`$X```!E`&X`+0!:`$$```!E`',`
+M+0!$`$\```!S`'(`+0!"`$$`+0!#`'D`<@!L``````!S`&T`80`M`%,`10``
+M````80!R`"T`3P!-````90!N`"T`2@!-````90!S`"T`5@!%````<P!M`',`
+M+0!&`$D``````&$`<@`M`%D`10```&4`;@`M`$,`0@```&4`<P`M`$,`3P``
+M`',`;0!N`"T`1@!)``````!A`'(`+0!3`%D```!E`&X`+0!"`%H```!E`',`
+M+0!0`$4```!A`'(`+0!*`$\```!E`&X`+0!4`%0```!E`',`+0!!`%(```!A
+M`'(`+0!,`$(```!E`&X`+0!:`%<```!E`',`+0!%`$,```!A`'(`+0!+`%<`
+M``!E`&X`+0!0`$@```!E`',`+0!#`$P```!A`'(`+0!!`$4```!E`',`+0!5
+M`%D```!A`'(`+0!"`$@```!E`',`+0!0`%D```!A`'(`+0!1`$$```!E`',`
+M+0!"`$\```!E`',`+0!3`%8```!E`',`+0!(`$X```!E`',`+0!.`$D```!E
+M`',`+0!0`%(```!Z`&@`+0!#`$@`5```````<P!R````````````M#5#`$(`
+M``!8AD,`+````!B60P!Q````^(1#```````DED,`V````#"60P#:````/)9#
+M`+$```!(ED,`H````%260P"/````8)9#`,\```!LED,`U0```'B60P#2````
+MA)9#`*D```"0ED,`N0```)R60P#$````J)9#`-P```"TED,`0P```,"60P#,
+M````S)9#`+\```#8ED,`R````$"&0P`I````Y)9#`)L```#\ED,`:P````"&
+M0P`A````%)=#`&,`````A4,``0```""70P!$````+)=#`'T````XET,`MP``
+M``B%0P`"````4)=#`$4````@A4,`!````%R70P!'````:)=#`(<````HA4,`
+M!0```'270P!(````,(5#``8```"`ET,`H@```(R70P"1````F)=#`$D```"D
+MET,`LP```+"70P"K`````(=#`$$```"\ET,`BP```#B%0P`'````S)=#`$H`
+M``!`A4,`"````-B70P"C````Y)=#`,T```#PET,`K````/R70P#)````")A#
+M`)(````4F$,`N@```""80P#%````+)A#`+0````XF$,`U@```$280P#0````
+M4)A#`$L```!<F$,`P````&B80P#3````2(5#``D```!TF$,`T0```("80P#=
+M````C)A#`-<```"8F$,`R@```*280P"U````L)A#`,$```"\F$,`U````,B8
+M0P"D````U)A#`*T```#@F$,`WP```.R80P"3````^)A#`.`````$F4,`NP``
+M`!"90P#.````')E#`.$````HF4,`VP```#290P#>````0)E#`-D```!,F4,`
+MQ@```!"&0P`C````6)E#`&4```!(AD,`*@```&290P!L````*(9#`"8```!P
+MF4,`:````%"%0P`*````?)E#`$P```!HAD,`+@```(B90P!S````6(5#``L`
+M``"4F4,`E````*"90P"E````K)E#`*X```"XF4,`30```,290P"V````T)E#
+M`+P```#HAD,`/@```-R90P"(````L(9#`#<```#HF4,`?P```&"%0P`,````
+M])E#`$X```!PAD,`+P````":0P!T````P(5#`!@````,FD,`KP```!B:0P!:
+M````:(5#``T````DFD,`3P```#B&0P`H````,)I#`&H```#XA4,`'P```#R:
+M0P!A````<(5#``X```!(FD,`4````'B%0P`/````5)I#`)4```!@FD,`40``
+M`("%0P`0````;)I#`%(```!@AD,`+0```'B:0P!R````@(9#`#$```"$FD,`
+M>````,B&0P`Z````D)I#`((```"(A4,`$0```/"&0P`_````G)I#`(D```"L
+MFD,`4P```(B&0P`R````N)I#`'D````@AD,`)0```,2:0P!G````&(9#`"0`
+M``#0FD,`9@```-R:0P".````4(9#`"L```#HFD,`;0```/2:0P"#````X(9#
+M`#T`````FT,`A@```-"&0P`[````#)M#`(0```!XAD,`,````!B;0P"=````
+M))M#`'<````PFT,`=0```#R;0P!5````D(5#`!(```!(FT,`E@```%2;0P!4
+M````8)M#`)<```"8A4,`$P```&R;0P"-````J(9#`#8```!XFT,`?@```*"%
+M0P`4````A)M#`%8```"HA4,`%0```)";0P!7````G)M#`)@```"HFT,`C```
+M`+B;0P"?````R)M#`*@```"PA4,`%@```-B;0P!8````N(5#`!<```#DFT,`
+M60```-B&0P`\````\)M#`(4```#\FT,`IP````B<0P!V````%)Q#`)P```#(
+MA4,`&0```""<0P!;````"(9#`"(````LG$,`9````#B<0P"^````2)Q#`,,`
+M``!8G$,`L````&B<0P"X````>)Q#`,L```"(G$,`QP```-"%0P`:````F)Q#
+M`%P```#LCD,`XP```*2<0P#"````O)Q#`+T```#4G$,`I@```.R<0P"9````
+MV(5#`!L````$G4,`F@```!"=0P!=````D(9#`#,````<G4,`>@```/B&0P!`
+M````*)U#`(H```"XAD,`.````#B=0P"`````P(9#`#D```!$G4,`@0```."%
+M0P`<````4)U#`%X```!<G4,`;@```.B%0P`=````:)U#`%\```"@AD,`-0``
+M`'2=0P!\````Z'-#`"````"`G4,`8@```/"%0P`>````C)U#`&````"8AD,`
+M-````)B=0P">````L)U#`'L````PAD,`)P```,B=0P!I````U)U#`&\```#@
+MG4,``P```/"=0P#B`````)Y#`)`````,GD,`H0```!B>0P"R````))Y#`*H`
+M```PGD,`1@```#R>0P!P````80!F`"T`>@!A````80!R`"T`80!E````80!R
+M`"T`8@!H````80!R`"T`9`!Z````80!R`"T`90!G````80!R`"T`:0!Q````
+M80!R`"T`:@!O````80!R`"T`:P!W````80!R`"T`;`!B````80!R`"T`;`!Y
+M````80!R`"T`;0!A````80!R`"T`;P!M````80!R`"T`<0!A````80!R`"T`
+M<P!A````80!R`"T`<P!Y````80!R`"T`=`!N````80!R`"T`>0!E````80!Z
+M`"T`80!Z`"T`8P!Y`'(`;```````80!Z`"T`80!Z`"T`;`!A`'0`;@``````
+M8@!E`"T`8@!Y````8@!G`"T`8@!G````8@!N`"T`:0!N````8@!S`"T`8@!A
+M`"T`;`!A`'0`;@``````8P!A`"T`90!S````8P!S`"T`8P!Z````8P!Y`"T`
+M9P!B````9`!A`"T`9`!K````9`!E`"T`80!T````9`!E`"T`8P!H````9`!E
+M`"T`9`!E````9`!E`"T`;`!I````9`!E`"T`;`!U````9`!I`'8`+0!M`'8`
+M`````&4`;``M`&<`<@```&4`;@`M`&$`=0```&4`;@`M`&(`>@```&4`;@`M
+M`&,`80```&4`;@`M`&,`8@```&4`;@`M`&<`8@```&4`;@`M`&D`90```&4`
+M;@`M`&H`;0```&4`;@`M`&X`>@```&4`;@`M`'``:````&4`;@`M`'0`=```
+M`&4`;@`M`'4`<P```&4`;@`M`'H`80```&4`;@`M`'H`=P```&4`<P`M`&$`
+M<@```&4`<P`M`&(`;P```&4`<P`M`&,`;````&4`<P`M`&,`;P```&4`<P`M
+M`&,`<@```&4`<P`M`&0`;P```&4`<P`M`&4`8P```&4`<P`M`&4`<P```&4`
+M<P`M`&<`=````&4`<P`M`&@`;@```&4`<P`M`&T`>````&4`<P`M`&X`:0``
+M`&4`<P`M`'``80```&4`<P`M`'``90```&4`<P`M`'``<@```&4`<P`M`'``
+M>0```&4`<P`M`',`=@```&4`<P`M`'4`>0```&4`<P`M`'8`90```&4`=``M
+M`&4`90```&4`=0`M`&4`<P```&8`80`M`&D`<@```&8`:0`M`&8`:0```&8`
+M;P`M`&8`;P```&8`<@`M`&(`90```&8`<@`M`&,`80```&8`<@`M`&,`:```
+M`&8`<@`M`&8`<@```&8`<@`M`&P`=0```&8`<@`M`&T`8P```&<`;``M`&4`
+M<P```&<`=0`M`&D`;@```&@`90`M`&D`;````&@`:0`M`&D`;@```&@`<@`M
+M`&(`80```&@`<@`M`&@`<@```&@`=0`M`&@`=0```&@`>0`M`&$`;0```&D`
+M9``M`&D`9````&D`<P`M`&D`<P```&D`=``M`&,`:````&D`=``M`&D`=```
+M`&H`80`M`&H`<````&L`80`M`&<`90```&L`:P`M`&L`>@```&L`;@`M`&D`
+M;@```&L`;P!K`"T`:0!N``````!K`&\`+0!K`'(```!K`'D`+0!K`&<```!L
+M`'0`+0!L`'0```!L`'8`+0!L`'8```!M`&D`+0!N`'H```!M`&L`+0!M`&L`
+M``!M`&P`+0!I`&X```!M`&X`+0!M`&X```!M`'(`+0!I`&X```!M`',`+0!B
+M`&X```!M`',`+0!M`'D```!M`'0`+0!M`'0```!N`&(`+0!N`&\```!N`&P`
+M+0!B`&4```!N`&P`+0!N`&P```!N`&X`+0!N`&\```!N`',`+0!Z`&$```!P
+M`&$`+0!I`&X```!P`&P`+0!P`&P```!P`'0`+0!B`'(```!P`'0`+0!P`'0`
+M``!Q`'4`>@`M`&(`;P``````<0!U`'H`+0!E`&,``````'$`=0!Z`"T`<`!E
+M``````!R`&\`+0!R`&\```!R`'4`+0!R`'4```!S`&$`+0!I`&X```!S`&4`
+M+0!F`&D```!S`&4`+0!N`&\```!S`&4`+0!S`&4```!S`&L`+0!S`&L```!S
+M`&P`+0!S`&D```!S`&T`80`M`&X`;P``````<P!M`&$`+0!S`&4``````',`
+M;0!J`"T`;@!O``````!S`&T`:@`M`',`90``````<P!M`&X`+0!F`&D`````
+M`',`;0!S`"T`9@!I``````!S`'$`+0!A`&P```!S`'(`+0!B`&$`+0!C`'D`
+M<@!L``````!S`'(`+0!B`&$`+0!L`&$`=`!N``````!S`'(`+0!S`'``+0!C
+M`'D`<@!L``````!S`'(`+0!S`'``+0!L`&$`=`!N``````!S`'8`+0!F`&D`
+M``!S`'8`+0!S`&4```!S`'<`+0!K`&4```!S`'D`<@`M`',`>0``````=`!A
+M`"T`:0!N````=`!E`"T`:0!N````=`!H`"T`=`!H````=`!N`"T`>@!A````
+M=`!R`"T`=`!R````=`!T`"T`<@!U````=0!K`"T`=0!A````=0!R`"T`<`!K
+M````=0!Z`"T`=0!Z`"T`8P!Y`'(`;```````=0!Z`"T`=0!Z`"T`;`!A`'0`
+M;@``````=@!I`"T`=@!N````>`!H`"T`>@!A````>@!H`"T`8P!H`',`````
+M`'H`:``M`&,`:`!T``````!Z`&@`+0!C`&X```!Z`&@`+0!H`&L```!Z`&@`
+M+0!M`&\```!Z`&@`+0!S`&<```!Z`&@`+0!T`'<```!Z`'4`+0!Z`&$`````
+M````````@!!$```!````````@``P``!L;V<Q,```````````````````````
+M\#\```````#P/S,$````````,P0`````````````````````````````_P<`
+M``````````````````````````"```````````#_______\/`/_______P\`
+M``````#`VS\``````,#;/Q#X_____X]"$/C_____CT(```"`____?P```(#_
+M__]_`'B?4!-$TS]8LQ(?,>\?/0``````````_____________________P``
+M````````````````\#\```````#P/P`````````````````````````````P
+M0P```````#!#````````\/\```````#P?P$``````/!_`0``````\'_YSI?&
+M%(DU0#V!*60)DPC`580U:H#))<#2-9;<`FK\/_>9&'Z?JQ9`-;%WW/)Z\K\(
+M02Z_;'I:/P```````````````````(#_?P````````"`___<I]>YA69QL0U`
+M````````__\-0/<V0PR8&?:5_3\```````#@/P-E>'`````````````!%`#!
+M!4,`R@A#`,\(0P#Q!D,``````````````````,#__S7":"&BV@_)_S\UPF@A
+MHMH/R?X_````````\#\````````(0`@$"`@(!`@(``0,"``$#`@`````````
+M`/`_?P(UPF@AHMH/R3Y`________[W\````````0`````````)C`````````
+MF$````````#P?P``````````;&]G`&QO9S$P````97AP`'!O=P!A<VEN````
+M`&%C;W,`````<W%R=`````````````#P/P``````````````````````````
+M````````Y`JH`WP_&_=1+3@%/CT``-ZVG5>+/P4P^_X):S@]`("6WJYPE#\=
+MX9$,>/PY/0``/HXNVIH_&G!NGM$;-3T`P%GWV*V@/Z$```E1*AL]``!CQO?Z
+MHS\_]8'Q8C8(/0#`[UD>%Z<_VU3//QJ]%CT``,<"D#ZJ/X;3T,A7TB$]`$##
+M+3,RK3\?1-GXVWH;/0"@UG`1*+`_=E"O*(OS&ST`8/'L'YRQ/]154QX_X#X]
+M`,!E_1L5LS^59XP$@.(W/0!@Q8`GD[0_\Z5BS:S$+ST`@.E><P6V/Y]]H2//
+MPQ<]`*!*C7=KMS]Z;J`2Z`,</0#`Y$X+UK@_@DQ.S.4`.3T`0"0BM#.Z/S57
+M9S1P\38]`("G5+:5NS_'3G8D7@XI/0#@Z0(FZKP_R\LN@BG1ZSP`H&S!M$*^
+M/^E-C?,/Y24]`&!JL06-OS^G=[>BI8XJ/0`@/,6;;<`_1?KA[HV!,CT``-ZL
+M/@W!/Z[P@\M%BAX]`-!T%3^XP3_4_Y/Q&0L!/0#03P7^4<(_P'<H0`FL_CP`
+MX/0<,/?"/T%C&@W']3`]`%!Y#W"4PS]D<AIY/^D?/0"@M%-T*<0_-$N\Q0G.
+M/CT`P/[Z),K$/U%HYD)#("X]`#`)$G5BQ3\M%ZJS[-\P/0``]AH:\L4_$V$^
+M+1OO/ST``)`6HHW&/]"9EOPLE.T\```H;%@@QS_-5$!BJ"`]/0!0'/^5M,<_
+MQ3.1:"P!)3T`H,YFHC_(/Y\CAX;!QB`]`/!6#`[,R#_?H,^AM.,V/0#0Y^_?
+M6<D_Y>#_>@(@)#T`P-)''^G)/R`D\FP.,S4]`$`#BZ1NRC]_6RNYK.LS/0#P
+M4L6W`,L_<ZID3&GT/3T`</E\YHC+/W*@>"(C_S(]`$`NNN,&S#]\O57-%<LR
+M/0``;-2=D<P_<JSFE$:V#CT`D!-A^Q'-/PN6KI';-!H]`!#]JUF?S3]S;->\
+M(WL@/0!@?E(]%LX_Y),N\FF=,3T`H`+<+)K./X?Q@9#UZR`]`)"4=E@?SS\`
+MD!?JZZ\'/0!PVQ^`F<\_:);R]WUS(CT`T`E%6PK0/W\E4R-;:Q\]`.C[-X!(
+MT#_&$KFYDVH;/0"H(58QA]`_KO._?=IA,CT`N&H=<<;0/S+!,(U*Z34]`*C2
+MS=G_T#^`G?'V#C46/0!XPKXO0-$_B[HB0B`\,3T`D&D9EWK1/YE<+2%Y\B$]
+M`%BL,'JUT3]^A/]B/L\]/0"X.A7;\-$_WPX,(RY8)ST`2$)/#B;2/_D?I"@0
+M?A4]`'@1IF)BTC\2&0PN&K`2/0#80\!QF-(_>3>>K&DY*ST`@`MVP=72/[\(
+M#[[>ZCH]`#"[I[,,TS\RV+89F9(X/0!XGU`31-,_6+,2'S'O'ST``````,#;
+M/P``````P-L_``````!1VS\``````%';/P````#PZ-H_`````/#HVC\`````
+MX(#:/P````#@@-H_`````,`?VC\`````P!_:/P````"@OMD_`````*"^V3\`
+M````@%W9/P````"`7=D_`````%`#V3\`````4`/9/P`````@J=@_`````""I
+MV#\`````X%78/P````#@5=@_`````"C_US\`````*/_7/P````!@K]<_````
+M`&"OUS\`````F%_7/P````"87]<_`````-`/US\`````T`_7/P````"`P]8_
+M`````(##UC\`````J'K6/P````"H>M8_`````-`QUC\`````T#'6/P````!P
+M[-4_`````'#LU3\`````$*?5/P`````0I]4_`````"AEU3\`````*&75/P``
+M``!`(]4_`````$`CU3\`````T.34/P````#0Y-0_`````&"FU#\`````8*;4
+M/P````!H:]0_`````&AKU#\`````^"S4/P````#X+-0_`````'CUTS\`````
+M>/73/P````"`NM,_`````("ZTS\``````(/3/P``````@],_`````/A.TS\`
+M````^$[3/P````!X%],_`````'@7TS\`````<./2/P````!PX](_`````."R
+MTC\`````X++2/P````#8?M(_`````-A^TC\`````2$[2/P````!(3M(_````
+M`+@=TC\`````N!W2/P````"@\-$_`````*#PT3\`````B,/1/P````"(P]$_
+M`````'"6T3\`````<);1/P````!8:=$_`````%AIT3\`````N#_1/P````"X
+M/]$_`````*`2T3\`````H!+1/P``````Z=`_``````#IT#\`````V,+0/P``
+M``#8PM`_`````#B9T#\`````.)G0/P`````0<]`_`````!!ST#\`````<$G0
+M/P````!P2=`_`````,`FT#\`````P";0/P````"8`-`_`````)@`T#\`````
+MX+3//P````#@M,\_`````(!OSS\`````@&_//P`````@*L\_`````"`JSS\`
+M````P.3./P````#`Y,X_`````&"?SC\`````8)_./P``````6LX_``````!:
+MSC\`````D!O./P````"0&\X_`````##6S3\`````,-;-/P````#`E\T_````
+M`,"7S3\`````4%G-/P````!06<T_`````.`:S3\`````X!K-/P````!@X\P_
+M`````&#CS#\`````\*3,/P````#PI,P_`````'!MS#\`````<&W,/P``````
+M+\P_```````OS#\`````@/?+/P````"`]\L_``````#`RS\``````,#+/P``
+M`````.`_=&%N:`````!A=&%N`````&%T86XR````<VEN`&-O<P!T86X`8V5I
+M;`````!F;&]O<@```&9A8G,`````;6]D9@````!L9&5X<````%]C86)S````
+M7VAY<&]T``!F;6]D`````&9R97AP````7WDP`%]Y,0!?>6X`7VQO9V(```!?
+M;F5X=&%F=&5R````````%````+"@0P`=````M*!#`!H```"DH$,`&P```*B@
+M0P`?````@*I#`!,```"(JD,`(0````BI0P`.````N*!#``T```#`H$,`#P``
+M`!"I0P`0````&*E#``4```#(H$,`'@```""I0P`2````)*E#`"`````HJ4,`
+M#````"RI0P`+````-*E#`!4````\J4,`'````$2I0P`9````3*E#`!$```!4
+MJ4,`&````%RI0P`6````9*E#`!<```!LJ4,`(@```'2I0P`C````>*E#`"0`
+M``!\J4,`)0```("I0P`F````B*E#`'-I;F@`````8V]S:`````````````#P
+M?________^]_`````````(!#`$\`3@!/`%4`5``D````````````````````
+M_RG#8``````"````40```"2M`P`DE0,``````/\IPV``````#````!0```!X
+MK0,`>)4#``````#_*<-@``````T```"<`P``C*T#`(R5`P``````````````
+M```@[D,`**M#`````````````0```#BK0P!`JT,``````"#N0P``````````
+M`/____\`````0````"BK0P````````````````#H[4,`<*M#````````````
+M`0```("K0P"(JT,``````.CM0P```````````/____\`````0````'"K0P``
+M```````````````$[D,`N*M#`````````````@```,BK0P#4JT,`B*M#````
+M```$[D,``0````````#_____`````$````"XJT,`````````````````..Y#
+M``2L0P````````````,````4K$,`)*Q#`-2K0P"(JT,``````#CN0P`"````
+M`````/____\`````0`````2L0P````````````````!@[D,`5*Q#````````
+M`````@```&2L0P!PK$,`B*M#``````!@[D,``0````````#_____`````$``
+M``!4K$,```````#_`0#%_P$`4"$"`/`R`@!0-P(`=Q\#`($?`P"3'P,`I1\#
+M`+<?`P#)'P,`VQ\#`/`?`P!((`,`@B`#`)\@`P#*(`,`[R`#``0A`P`D(0,`
+M02$#`%,A`P!H(0,`CB$#`.(A`P#W(0,`5R(#`&DB`P">(@,`L"(#`,(B`P#<
+M(@,`^2(#``XC`P`C(P,`.",#`$(C`P!24T135G1."$!&@$&S-:[+8A2E&@$`
+M``!$.EQ0<F]J96-T<UQ7:6Y205)<<V9X7&)U:6QD7'-F>')A<C,R7%)E;&5A
+M<V5<<V9X<F%R+G!D8@`````*````%0$``.0`````````%0$`````````$```
+M\````"YT97AT)&1I`````/`0```W#@,`+G1E>'0D;6X`````)Q\#`#8$```N
+M=&5X="1X`%TC`P!=````+G1E>'0D>60``````#`#`&`"```N:61A=&$D-0``
+M``!@,@,`!````"XP,&-F9P``9#(#``0````N0U)4)%A#00````!H,@,`!```
+M`"Y#4E0D6$-!00```&PR`P`H````+D-25"180U4`````E#(#``0````N0U)4
+M)%A#6@````"8,@,`!````"Y#4E0D6$E!`````)PR`P`$````+D-25"1824%!
+M````H#(#``0````N0U)4)%A)04,```"D,@,`$````"Y#4E0D6$E#`````+0R
+M`P`$````+D-25"1825H`````N#(#``0````N0U)4)%A000````"\,@,`"```
+M`"Y#4E0D6%!8`````,0R`P`$````+D-25"184%A!````R#(#``0````N0U)4
+M)%A06@````#,,@,`!````"Y#4E0D6%1!`````-`R`P`$````+D-25"185%H`
+M````U#(#`-P"```N8V9G=6%R9`````"P-0,`9'4``"YR9&%T80``%*L#`'P!
+M```N<F1A=&$D<@````"0K`,`E````"YR9&%T821S>&1A=&$````DK0,`!`0`
+M`"YR9&%T821Z>GID8F<````HL0,`!````"YR=&,D24%!`````"RQ`P`$````
+M+G)T8R1)6EH`````,+$#``0````N<G1C)%1!00`````TL0,`!````"YR=&,D
+M5%I:`````#BQ`P",#```+GAD871A)'@`````Q+T#```!```N9&ED870D,@``
+M``#$O@,`(````"YD:61A="0S`````.2^`P",`0``+F1I9&%T)#0`````<,`#
+M`#`&```N9&ED870D-@````"@Q@,`D`$``"YD:61A="0W`````##(`P`T````
+M+F5D871A``!DR`,`*````"YI9&%T820R`````(S(`P`4````+FED871A)#,`
+M````H,@#`&`"```N:61A=&$D-```````RP,`(@L``"YI9&%T820V``````#@
+M`P#0#0``+F1A=&$```#0[0,`L````"YD871A)'(`@.X#`*@H`@`N8G-S````
+M```@!@",`0``+F1I9&%T)#4``````#`&`%`&```N<G-R8R0P,0````!0-@8`
+M@-D``"YR<W)C)#`R```````````````````````````B!9,9````````````
+M``````````````````````````4```#_____G1]#`"(%DQD!````7+%#````
+M`````````````````````````0```"(%DQD&````K+%#````````````````
+M`````````````0```/____\G'T,``````"\?0P`!````/1]#``(```!+'T,`
+M`P```%D?0P`$````9Q]#`/____^+'T,`(@63&0$```#<L4,`````````````
+M```````````````!````_____Z\?0P`B!9,9`0````BR0P``````````````
+M``````````````$```#_____P1]#`"(%DQD!````-+)#````````````````
+M`````````````0```/_____3'T,`(@63&0$```!@LD,`````````````````
+M```````````!````_____^4?0P`B!9,9`0```(RR0P``````````````````
+M``````````$````B!9,9!@```-RR0P````````````````````````````$`
+M``#_____^A]#```````"($,``0```!`@0P`"````'B!#``,````L($,`!```
+M`#H@0P#_____4B!#``````!G($,`(@63&0(````,LT,`````````````````
+M```````````!````````````````````4+-#``$```!8LT,``0```-#M0P``
+M````_____P`````$`````````/____^I($,`_____[0@0P`!````OR!#`"(%
+MDQD#````=+-#`````````````````````````````0```/____^,($,`````
+M`)0@0P`B!9,9`@```+"S0P````````````````````````````$```#_____
+M^2!#`"(%DQD!````Y+-#`````````````````````````````0```/____\N
+M(4,``````#DA0P`B!9,9`@```!"T0P````````````````````````````$`
+M``#_____U"!#``````#?($,`(@63&0(```!$M$,`````````````````````
+M```````!````_____PXA0P#_____&2%#`"(%DQD"````>+1#````````````
+M`````````````````0```/____]+(4,`(@63&0$```"LM$,`````````````
+M```````````````!````_____UTA0P`B!9,9`0```-BT0P``````````````
+M``````````````$```#_____<B%#``````"`(4,`(@63&0(````$M4,`````
+M```````````````````````!````(@63&04```!<M4,`````````````````
+M```````````!````_____Y@A0P``````IB%#``$```"T(4,``@```,(A0P`"
+M````TB%#`/_____L(4,`(@63&0$```"$M4,`````````````````````````
+M```!````_____W,B0P`B!9,9`0```+"U0P``````````````````````````
+M``$```#_____J")#`"(%DQD!````W+5#````````````````````````````
+M`0```/____^Z(D,`(@63&0$````(MD,````````````````````````````!
+M````_____V$B0P`B!9,9`0```#2V0P````````````````````````````$`
+M```B!9,9!P```(2V0P````````````````````````````$```#_____`2)#
+M```````,(D,``0```!<B0P`"````(B)#``,````M(D,`!````#LB0P`%````
+M22)#`/_____,(D,`(@63&0$```"\MD,````````````````````````````!
+M`````````.CM0P``````_____P`````,````(!U!``````!0[T$``````!2W
+M0P`"````(+=#`.BV0P`0````!.Y#``````#_____``````P```#P'$$`````
+M``$````"`````@```&BW0P#_____```````````M(T,`_____P``````````
+M!.Y#``````!\U$$`0```````````````H=1!`"(%DQD#````4+=#``$````\
+MMT,``````````````````0`````````"`````P````(```#`MT,```````3N
+M0P``````+:M!`$```````````````%*K00#_____``````````#F(D,``0``
+M`/$B0P#_____`````"(%DQD$````X+=#``$```"LMT,`````````````````
+M`0```/____\#(T,`(@63&0$````DN$,````````````````````````````!
+M````_____Q@C0P`B!9,9`0```%"X0P````````````````````````````$`
+M````````_O___P````#0____`````/[___\`````K.9!``````#^____````
+M`-3___\`````_O___P`````DYT$``````/[___\`````R/___P````#^____
+M<N=!`)OG00``````_O___P````#8____`````/[___^OZ4$`PNE!``````#^
+M____`````,S___\`````_O___Z?N00"[[D$``````%#O00``````++E#``,`
+M```\N4,`(+=#`.BV0P``````..Y#``````#_____``````P````0[T$`_O__
+M_P````#0____`````/[___\`````I3!"``````!J,$(`=#!"`/[___\`````
+MJ/___P````#^____`````.(F0@``````-R9"`$$F0@#^____`````-C___\`
+M````_O___W0N0@!X+D(``````/[___\`````V/___P````#^____`"5"``DE
+M0@!```````````````"))T(`_____P````#_____`````````````````0``
+M``$```#DN4,`(@63&0(```#TN4,``0````2Z0P`````````````````!````
+M`````/[___\`````T/___P````#^____FR]"`)\O0@``````4.]!``````!L
+MND,``@```'BZ0P#HMD,``````&#N0P``````_____P`````,````0"5"````
+M``#^____`````-3___\`````_O___P`````G=4(``````.3___\`````U/__
+M_P````#^____6W5"`%]U0@``````Y/___P````#4____`````/[___\`````
+M_'="``````#D=T(`]'="`/[___\`````U/___P````#^____`````-E^0@``
+M````_O___P````#4____`````/[___\`````*G]"``````#^____`````-C_
+M__\`````_O___P````!)AD(``````/[___\`````V/___P````#^____````
+M`&^00@``````_O___P````#8____`````/[___\`````>X]"``````#^____
+M`````-C___\`````_O___P````#<CT(``````/[___\`````V/___P````#^
+M____`````">00@``````_O___P````#4____`````/[___\`````NJ%"````
+M``#^____`````-3___\`````_O___P````!,MD(``````/[___\`````V/__
+M_P````#^____`````/6P0@``````Y/___P````"T____`````/[___\`````
+MDKY"``````#^____`````-3___\`````_O___P````#ENT(``````/[___\`
+M````S/___P````#^____`````"3`0@``````_O___P````#4____`````/[_
+M__\`````0LA"``````#^____`````-#___\`````_O___P````"1YT(`````
+M`/[___\`````Q/___P````#^____`````!SI0@```````````._H0@#^____
+M`````-C___\`````_O___^'L0@#][$(``````/[___\`````S/___P````#^
+M____`````$GW0@``````_O___P````#0____`````/[___\`````!OM"````
+M``#^____`````-3___\`````_O___P````"<^T(``````/[___\`````U/__
+M_P````#^____`````"3]0@``````_O___P````#8____`````/[___]9&T,`
+M;!M#``$````@4P,`N`P&`*`@!@"$OP,`H,8#`````````````0```#!3`P"\
+M#`8`3"`&`#"_`P!TQP,````````````!````0%,#`,`,!@`\(`8`(+\#`)S'
+M`P````````````$```!04P,`Q`P&```@!@#DO@,`K,<#`````````````0``
+M`&!3`P#(#`8`="`&`%B_`P#@QP,````````````!````@%,#`,P,!@!T(08`
+M6,`#``3(`P````````````$```#@5`,`[`P&`)@@!@!\OP,`',@#````````
+M`````0```/!4`P#P#`8`-"`&`!B_`P`DR`,`````````````````````````
+M`````````````````````````````+K$`P`DQ0,`CL0#`*+$`P`RQ0,`SL0#
+M`.;$`P`"Q0,`:,4#`%3%`P!$Q0,`#,4#``````"(Q@,``````&+$`P!VQ`,`
+M3L0#``````#NPP,`_L,#``[$`P#BPP,`+,0#`$#$`P#,PP,`LL,#`![$`P``
+M````ML4#``3&`P#NQ0,`W,4#`,K%`P!ZQ0,`H,4#`(C%`P``````=L8#````
+M``"FP@,`NL(#`,K"`P#:P@,`[L(#``##`P`2PP,`DL(#`###`P!&PP,`4L,#
+M`&C#`P!VPP,`A,,#`)##`P">PP,`A,(#`';"`P!JP@,`6L(#`$K"`P`\P@,`
+M,,(#`"C"`P`8P@,`"L(#`/[!`P#LP0,`W,$#`,S!`P#`P0,`KL$#`)K!`P"(
+MP0,`>L$#`&C!`P!:P0,`3L$#`#3!`P`BP0,`$,$#``#!`P#PP`,`W,`#`,K`
+M`P"ZP`,`KL`#`)S``P",P`,`?L`#`![#`P!PP`,``````&3&`P`NQ@,`%L8#
+M`%3&`P!"Q@,`````````4VAO=U=I;F1O=P````!'971$;&=)=&5M`````$5N
+M86)L95=I;F1O=P````!39717:6YD;W=497AT5P````!'971087)E;G0```!3
+M9717:6YD;W=0;W,`````4V5T1&QG271E;51E>'17````1V5T4WES=&5M365T
+M<FEC<P````!'971#;&EE;G1296-T````1V5T5VEN9&]W4F5C=````$=E=%=I
+M;F1O=TQO;F=7`````%-E=%=I;F1O=TQO;F=7`````%-E=%!R;V-E<W-$969A
+M=6QT3&%Y;W5T````1V5T5VEN9&]W````3&]A9%-T<FEN9U<```!/96U4;T-H
+M87)"=69F00````!#:&%R57!P97)7`````$1E9E=I;F1O=U!R;V-7`````%)E
+M9VES=&5R0VQA<W-%>%<`````0W)E871E5VEN9&]W17A7````27-7:6YD;W<`
+M````1&5S=')O>5=I;F1O=P```%5P9&%T95=I;F1O=P````!-87!7:6YD;W=0
+M;VEN=',```!#;W!Y4F5C=`````!,;V%D0W5R<V]R5P```%-E;F1-97-S86=E
+M5P````!'971$0P```%)E;&5A<V5$0P```$UE<W-A9V5";WA7````1FEN9%=I
+M;F1O=T5X5P```$=E=$-L87-S3F%M95<```!#;W!Y26UA9V4```!W=G-P<FEN
+M=&97`````$=E=$UE<W-A9V57````5')A;G-L871E365S<V%G90````!$:7-P
+M871C:$UE<W-A9V57`````%!E96M-97-S86=E5P````!0;W-T365S<V%G95<`
+M````5V%I=$9O<DEN<'5T261L90````!)<U=I;F1O=U9I<VEB;&4```!$:6%L
+M;V=";WA087)A;5<```!%;F1$:6%L;V<```!'971$;&=)=&5M5&5X=%<```!3
+M96YD1&QG271E;4UE<W-A9V57````4V5T1F]C=7,`````4V5T1F]R96=R;W5N
+M9%=I;F1O=P```$=E=%-Y<T-O;&]R````3&]A9$)I=&UA<%<```!,;V%D26-O
+M;E<```!$97-T<F]Y26-O;@```$ES1&EA;&]G365S<V%G95<`````0W)E871E
+M0V]M<&%T:6)L94)I=&UA<`````!#<F5A=&5#;VUP871I8FQE1$,`````1&5L
+M971E1$,`````1&5L971E3V)J96-T`````$=E=$1E=FEC94-A<',```!396QE
+M8W1/8FIE8W0`````4W1R971C:$)L=`````!#<F5A=&5$24)396-T:6]N````
+M`$=E=$]B:F5C=%<`````1V5T3W!E;D9I;&5.86UE5P````!'9713879E1FEL
+M94YA;657`````$-O;6U$;&=%>'1E;F1E9$5R<F]R`````$]P96Y0<F]C97-S
+M5&]K96X`````061J=7-T5&]K96Y0<FEV:6QE9V5S````4V5T1FEL95-E8W5R
+M:71Y5P````!,;V]K=7!0<FEV:6QE9V5686QU95<```!!;&QO8V%T94%N9$EN
+M:71I86QI>F53:60`````1G)E95-I9````$-H96-K5&]K96Y-96UB97)S:&EP
+M`````%)E9T-L;W-E2V5Y````4F5G0W)E871E2V5Y17A7````4F5G3W!E;DME
+M>45X5P```%)E9U%U97)Y5F%L=65%>%<`````4F5G4V5T5F%L=65%>%<`````
+M4TA'971-86QL;V,```!32$=E=%!A=&A&<F]M241,:7-T5P````!32$)R;W=S
+M949O<D9O;&1E<E<`````4TA&:6QE3W!E<F%T:6]N5P````!3:&5L;$5X96-U
+M=&5%>%<```!32$=E=$9I;&5);F9O5P````!32$=E=$9O;&1E<DQO8V%T:6]N
+M````4TA#:&%N9V5.;W1I9GD`````0W)E871E4W1R96%M3VY(1VQO8F%L````
+M0V]#<F5A=&5);G-T86YC90````!#3%-)1$9R;VU3=')I;F<```!/;&5);FET
+M:6%L:7IE````3VQE56YI;FET:6%L:7IE````4TA!=71O0V]M<&QE=&4`````
+M26YI=$-O;6UO;D-O;G1R;VQS17@`````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````_RG#8`````!8R`,``0``````````````
+M````````````````<V9X<F%R+F5X90``H,@#````````````YM$#```P`P#8
+MR@,```````````"RT@,`.#(#`````````````````````````````,L#`!#+
+M`P`@RP,`,LL#`$;+`P!8RP,`9LL#`'3+`P"(RP,`G,L#`*K+`P"XRP,`RLL#
+M`-[+`P#RRP,`_LL#``S,`P`<S`,`*,P#`#3,`P!(S`,`6,P#`&K,`P"`S`,`
+MELP#`*+,`P"TS`,`Q,P#`-3,`P#LS`,``,T#``[-`P`DS0,`.,T#`$C-`P!6
+MS0,`:,T#`'[-`P",S0,`ILT#`*[-`P"^S0,`U,T#`.;-`P#VS0,`!,X#`!3.
+M`P`DS@,`/LX#`$[.`P!BS@,`?LX#`);.`P"NS@,`QLX#`-+.`P#@S@,`],X#
+M``K/`P`:SP,`+L\#`#[/`P!@SP,`@L\#`)K/`P"TSP,`SL\#`.;/`P#RSP,`
+M!-`#`!K0`P`PT`,`/M`#`$[0`P!<T`,`;-`#`'K0`P"*T`,`G-`#`+30`P#*
+MT`,`VM`#`.K0`P#ZT`,`#-$#`"+1`P`VT0,`2-$#`&+1`P!^T0,`CM$#`)S1
+M`P"NT0,`P-$#`-+1`P#^U0,`[-4#`-S5`P#0U0,`P-4#`*[5`P"^T@,`T-(#
+M`.#2`P#RT@,``M,#`!33`P`PTP,`1-,#`&#3`P!^TP,`D-,#`*K3`P#`TP,`
+MVM,#`/#3`P`$U`,`$-0#`"#4`P!(U`,`5-0#`&+4`P!PU`,`>M0#`(S4`P"H
+MU`,`OM0#`-34`P#>U`,`ZM0#`/;4`P`$U0,`%M4#`";5`P`ZU0,`2M4#`%S5
+M`P!HU0,`>M4#`)35`P`2U@,``````*#2`P".T@,`<-(#`%#2`P`RT@,`'M(#
+M``S2`P``T@,`]-$#```````"`D=E=$QA<W1%<G)O<@``<P13971,87-T17)R
+M;W(``%X!1F]R;6%T365S<V%G95<``,`!1V5T0W5R<F5N=%!R;V-E<W,`W0!$
+M979I8V5);T-O;G1R;VP`:@13971&:6QE5&EM90!2`$-L;W-E2&%N9&QE`($`
+M0W)E871E1&ER96-T;W)Y5P```P1296UO=F5$:7)E8W1O<GE7``"/`$-R96%T
+M949I;&57`-8`1&5L971E1FEL95<`DP!#<F5A=&5(87)D3&EN:U<`80)'9713
+M:&]R=%!A=&A.86UE5P`/`D=E=$QO;F=0871H3F%M95<``&,#36]V949I;&57
+M`/,!1V5T1FEL951Y<&4`9`)'9713=&1(86YD;&4``"4%5W)I=&5&:6QE`,`#
+M4F5A9$9I;&4``%<!1FQU<VA&:6QE0G5F9F5R<P``4P13971%;F1/9D9I;&4`
+M`&8$4V5T1FEL95!O:6YT97(``&$$4V5T1FEL94%T=')I8G5T97-7``#J`4=E
+M=$9I;&5!='1R:6)U=&5S5P``+@%&:6YD0VQO<V4`.0%&:6YD1FER<W1&:6QE
+M5P``10%&:6YD3F5X=$9I;&57`*0"1V5T5F5R<VEO;D5X5P"_`4=E=$-U<G)E
+M;G1$:7)E8W1O<GE7``#[`4=E=$9U;&Q0871H3F%M95<``%P!1F]L9%-T<FEN
+M9U<`%`)'971-;V1U;&5&:6QE3F%M95<``!@"1V5T36]D=6QE2&%N9&QE5P``
+M3@%&:6YD4F5S;W5R8V57`&(!1G)E94QI8G)A<GD`10)'9710<F]C061D<F5S
+M<P``P0%'971#=7)R96YT4')O8V5S<TED`!D!17AI=%!R;V-E<W,`DP139714
+M:')E861%>&5C=71I;VY3=&%T90"R!%-L965P`#\#3&]A9$QI8G)A<GE7``!P
+M`D=E=%-Y<W1E;41I<F5C=&]R>5<`9`!#;VUP87)E4W1R:6YG5P``$`!!;&QO
+M8T-O;G-O;&4``%\!1G)E94-O;G-O;&4`%P!!='1A8VA#;VYS;VQE`"0%5W)I
+M=&5#;VYS;VQE5P!&`D=E=%!R;V-E<W-!9F9I;FET>4UA<VL``+4`0W)E871E
+M5&AR96%D``"9!%-E=%1H<F5A9%!R:6]R:71Y`.("26YI=&EA;&EZ94-R:71I
+M8V%L4V5C=&EO;@#N`$5N=&5R0W)I=&EC86Q396-T:6]N```Y`TQE879E0W)I
+M=&EC86Q396-T:6]N``#1`$1E;&5T94-R:71I8V%L4V5C=&EO;@!9!%-E=$5V
+M96YT```/!%)E<V5T179E;G0``/X#4F5L96%S95-E;6%P:&]R90``^01786ET
+M1F]R4VEN9VQE3V)J96-T`(4`0W)E871E179E;G17``"N`$-R96%T95-E;6%P
+M:&]R95<``'<"1V5T4WES=&5M5&EM90"^!%-Y<W1E;51I;654;U1Z4W!E8VEF
+M:6-,;V-A;%1I;64`T`14>E-P96-I9FEC3&]C86Q4:6UE5&]3>7-T96U4:6UE
+M`+T$4WES=&5M5&EM951O1FEL951I;64``"0!1FEL951I;654;TQO8V%L1FEL
+M951I;64`1@-,;V-A;$9I;&54:6UE5&]&:6QE5&EM90`E`49I;&54:6UE5&]3
+M>7-T96U4:6UE``!R`4=E=$-026YF;P#^`DES1$)#4TQE861">71E``!G`TUU
+M;'1I0GET951O5VED94-H87(`$057:61E0VAA<E1O375L=&E">71E`+,"1VQO
+M8F%L06QL;V,`5`-,;V-K4F5S;W5R8V4``+X"1VQO8F%L3&]C:P``Q0)';&]B
+M86Q5;FQO8VL``+H"1VQO8F%L1G)E90``00-,;V%D4F5S;W5R8V4``+$$4VEZ
+M96]F4F5S;W5R8V4``$T$4V5T0W5R<F5N=$1I<F5C=&]R>5<``-\!1V5T17AI
+M=$-O9&50<F]C97-S```#`D=E=$QO8V%L5&EM90``DP)'9714:6-K0V]U;G0`
+M`%<#36%P5FEE=T]F1FEL90#6!%5N;6%P5FEE=T]F1FEL90",`$-R96%T949I
+M;&5-87!P:6YG5P``>0-/<&5N1FEL94UA<'!I;F=7``"'`4=E=$-O;6UA;F1,
+M:6YE5P!7!%-E=$5N=FER;VYM96YT5F%R:6%B;&57`!T!17AP86YD16YV:7)O
+M;FUE;G13=')I;F=S5P"%`D=E=%1E;7!0871H5P``8`--;W9E1FEL945X5P`&
+M`D=E=$QO8V%L94EN9F]7``"7`D=E=%1I;65&;W)M8717``#(`4=E=$1A=&5&
+M;W)M8717```S`D=E=$YU;6)E<D9O<FUA=%<``$M%4DY%3#,R+F1L;```(0!'
+M9&EP06QL;V,`[0!'9&EP1G)E90``-@!'9&EP0VQO;F5);6%G90``F`!'9&EP
+M1&ES<&]S94EM86=E``!1`$=D:7!#<F5A=&5":71M87!&<F]M4W1R96%M``!2
+M`$=D:7!#<F5A=&5":71M87!&<F]M4W1R96%M24--`%\`1V1I<$-R96%T94A"
+M251-05!&<F]M0FET;6%P`'4"1V1I<&QU<U-T87)T=7```'0"1V1I<&QU<U-H
+M=71D;W=N`&=D:7!L=7,N9&QL`+$#4F%I<V5%>&-E<'1I;VX``',"1V5T4WES
+M=&5M26YF;P#O!%9I<G1U86Q0<F]T96-T``#Q!%9I<G1U86Q1=65R>0``/0-,
+M;V%D3&EB<F%R>45X00``!`-)<U!R;V-E<W-O<D9E871U<F50<F5S96YT```#
+M27-$96)U9V=E<E!R97-E;G0`TP15;FAA;F1L961%>&-E<'1I;VY&:6QT97(`
+M`*4$4V5T56YH86YD;&5D17AC97!T:6]N1FEL=&5R`&,"1V5T4W1A<G1U<$EN
+M9F]7`*<#475E<GE097)F;W)M86YC94-O=6YT97(`Q0%'971#=7)R96YT5&AR
+M96%D260``'D"1V5T4WES=&5M5&EM94%S1FEL951I;64`YP));FET:6%L:7IE
+M4TQI<W1(96%D`,`$5&5R;6EN871E4')O8V5S<P``&`12=&Q5;G=I;F0`Z@!%
+M;F-O9&50;VEN=&5R`.,"26YI=&EA;&EZ94-R:71I8V%L4V5C=&EO;D%N9%-P
+M:6Y#;W5N=`#%!%1L<T%L;&]C``#'!%1L<T=E=%9A;'5E`,@$5&QS4V5T5F%L
+M=64`Q@14;'-&<F5E`#X#3&]A9$QI8G)A<GE%>%<``*@#475E<GE097)F;W)M
+M86YC949R97%U96YC>0`7`D=E=$UO9'5L94AA;F1L945X5P``$P)'971-;V1U
+M;&5&:6QE3F%M94$``&@!1V5T04-0``#/`DAE87!&<F5E``#+`DAE87!!;&QO
+M8P#2`DAE87!294%L;&]C`&D"1V5T4W1R:6YG5'EP95<``"T#3$--87!3=')I
+M;F=7```S`49I;F1&:7)S=$9I;&5%>$$``$,!1FEN9$YE>'1&:6QE00`*`TES
+M5F%L:61#;V1E4&%G90`W`D=E=$]%34-0``"&`4=E=$-O;6UA;F1,:6YE00#:
+M`4=E=$5N=FER;VYM96YT4W1R:6YG<U<``&$!1G)E945N=FER;VYM96YT4W1R
+M:6YG<U<`2@)'9710<F]C97-S2&5A<```AP139713=&1(86YD;&4``-0"2&5A
+M<%-I>F4``)H!1V5T0V]N<V]L94-0``"L`4=E=$-O;G-O;&5-;V1E``!G!%-E
+M=$9I;&50;VEN=&5R17@``,H`1&5C;V1E4&]I;G1E<@``````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````W0Z)%W:3/T/'T#*PBI%^)70?BJFA+!+ARLB`%0#R
+MRD______`````#4```"':%>M`0```#D```!^Y=<\`@```'@````_B6DW`P``
+M`!T```!]!P8.!@```)4```#(72P<!````-@````!YX6\!0````0$!@8```<'
+M!`0```0$``!4.T,`'P```!P````?````'@```!\````>````'P```!\````>
+M````'P```!X````?``````$"`P0%!@<("@P.$!08'"`H,#A`4&!P@*#`X```
+M`````````0$!`0("`@(#`P,#!`0$!`4%!04`````!`````(````"`````@``
+M``(````"`````@````(````"`````@````(````"`````@````(````"````
+M`@````X`````````#``````$"!`@0(#``@(#!`4&!@8`````X$ZV*&0```"X
+M1D,`/6;WPF4```#,1D,`"$D8YF8```#@1D,`I+G"7F<```#P1D,`D@:5CF@`
+M````1T,`,61B6&D````81T,`,7X*&6H````L1T,`"98Z?FX```!$1T,`6,VT
+M3F\```!<1T,`OS>5`'````!L1T,`0GT137$```"$1T,`V#`>?'(```"81T,`
+M6`8D8G@```"L1T,`+WM/9'D```#`1T,`Z2]#97H```#41T,`R(GOK'L```#H
+M1T,`C*;B7'P```#\1T,`>["%#8,````82$,`2D2H:(0````L2$,`L.22_(4`
+M```\2$,`@ZZ"PH8```!02$,`@JSNC8P```!D2$,`[C:ZO8T```!X2$,`\,-U
+M/XX```",2$,`+$`GL8\```"D2$,`$8>6*)````"\2$,`I+I*9I8```#(2$,`
+M2[@9^)<```#42$,`'VK/2Y@```#D2$,`8KBO#YD```#P2$,`C6I:H)H````$
+M24,`DHDBRJ`````424,`#39P>Z$````H24,`OF#T.Z(````X24,`@&J\3JH`
+M``!(24,`#NP:4*L```!824,`X+E!OZP```!H24,`IJ?26:T```!X24,`(:)!
+MY:X```"(24,`[LV#$*\```"824,`_KG@M;````"H24,`8G`61+0```"X24,`
+MS*+":;D```#(24,`)O-)Z+H```#<24,`)IYV*[X```#T24,`K"1@@+\````(
+M2D,`ZS6Q[,,````@2D,`>IU=O<@````T2D,`7:^1R\D```!(2D,`&B^NILH`
+M``!<2D,`2)#K5](```!T2D,`F8#4WMP```"$2D,`P[TON=T```"<2D,`0'CZ
+MN-X```"T2D,`AXS7&N$```#(2D,`.)0-[.8```#82D,`7GR0H.<```#D2D,`
+MA4"07?````#T2D,``S&LEO$````(2T,`,=)X-``````82T,`!"[:CP`````H
+M2T,`.!&.A64````\2T,`BJ[`W6<```!82T,`_2+C9&L```!P2T,`WU-^!P$`
+M``"02T,`2OU`X`(```"@2T,`Y<P\60````"T2T,`]655$`````#,2T,`?Z6=
+M27(```#D2T,``:&_/7,````(3$,`/28!.'0````L3$,`),NF#FP```!,3$,`
+MH$)F@&\```!H3$,`TV&4NVX```"$3$,`U0M_EVT```"D3$,`&,4B0'````#`
+M3$,`[_`?-'$```#@3$,`F7R;AP``````34,`G7!!5@`````034,`\E(&+@$`
+M```D34,`H>'*V0(````T34,`#6\H=64```!(34,`&UFW+F<```!D34,`(HM=
+MPP````!\34,`K,_@-P````"034,`]02GQ&4```"H34,`^`;N"@$```#(34,`
+MG!IF=P(```#<34,`-0>8/P````#T34,`[O.U-@`````(3D,`ZLG8!0$````<
+M3D,`X4BS]0(````P3D,`6`>%=`````!(3D,`B^(<O@````!<3D,`+O$^"64`
+M``!P3D,`+('73F<```"03D,`[,!;&6@```"L3D,`5^\P.P$```#,3D,`2Q`X
+MB@(```#@3D,`8P```/A.0P#H`P`````````````#````2#A#````````````
+M(%%#`#!10P`\44,`2%%#`%110P!D44,`>%%#`(110P"844,`J%%#`+Q10P#0
+M44,`Y%%#`/110P#_____````````````````=9@``+$9OT1.YD"[``````$`
+M```!``````````````#_____````````````````(`63&0``````````````
+M``(````,````"````/____\````````````````!(```````````````````
+M``````````````````````````````````````````````````````(@```!
+M````````````````````````````````````````````````````````````
+M`````````B````(`````````````````````````````````````````````
+M``````"0:4,``0`````````!```````````````!````````````````````
+M```````````8Z$,`````````````````&.A#`````````````````!CH0P``
+M```````````````8Z$,`````````````````&.A#````````````````````
+M````````4.U#````````````$&Q#`)!M0P`@94,`````````````````````
+M````````````6.=#`"#K0P!#````BF9#``$"!`@`````I`,``&"">8(A````
+M`````*;?````````H:4```````"!G^#\`````$!^@/P`````J`,``,&CVJ,@
+M``````````````````````````````"!_@```````$#^````````M0,``,&C
+MVJ,@``````````````````````````````"!_@```````$'^````````M@,`
+M`,^BY*(:`.6BZ*);``````````````````````"!_@```````$!^H?X`````
+M404``%':7MH@`%_::MHR``````````````````````"!T]C>X/D``#%^@?X`
+M````````````````````````````````````````````````````````````
+M````````````````````````````````$!`0$!`0$!`0$!`0$!`0$!`0$!`0
+M$!`0$!`````````@("`@("`@("`@("`@("`@("`@("`@("`@(```````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````!A8F-D969G:&EJ:VQM;F]P<7)S='5V=WAY>@``
+M`````$%"0T1%1D=(24I+3$U.3U!14E-455976%E:````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````!`0$!`0$!`0$!`0$!`0$!`0
+M$!`0$!`0$!`0````````("`@("`@("`@("`@("`@("`@("`@("`@("``````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````!A8F-D969G:&EJ:VQM;F]P<7)S='5V=WAY>@``````
+M`$%"0T1%1D=(24I+3$U.3U!14E-455976%E:````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````````````````````````````@ZT,`+@```"X`````
+M````1.U#``071@`$%T8`!!=&``071@`$%T8`!!=&``071@`$%T8`!!=&`']_
+M?W]_?W]_2.U#``@71@`(%T8`"!=&``@71@`(%T8`"!=&``@71@#^____````
+M`````````````0```````````````````/[___\````````````````$54,`
+M`````"X_05<T4D%27T58251`0``$54,``````"X_059E>&-E<'1I;VY`<W1D
+M0$``!%5#```````N/T%68F%D7V%L;&]C0'-T9$!```150P``````+C]!5G1Y
+M<&5?:6YF;T!```150P``````+C]!5F)A9%]A<G)A>5]N97=?;&5N9W1H0'-T
+M9$!````$54,``````"X_059B861?97AC97!T:6]N0'-T9$!`````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````";>00!8WD$`$MY!`!S>00!BWD$`,-Y!`#K>00!$
+MWD$`@-Y!`';>00!LWD$`3MY!``````#!Y$$``````.W=00#WW4$`TMU!````
+M``"6W4$`H-U!`*K=00",W4$`OMU!`,C=00""W4$`9]U!`+3=00``````N=Y!
+M`.'>00#7WD$`S=Y!`,/>00"*WD$`K]Y!`*7>00``````IN1!``````#'W$$`
+MT=Q!`-O<00#EW$$`[]Q!`/G<00`#W4$`O=Q!`!?=00`AW4$`*]U!`#7=00`_
+MW4$`2=U!`%/=00!=W4$`L]Q!`*G<00"?W$$`E=Q!`(O<00"!W$$`=]Q!`&W<
+M00!CW$$`6=Q!`$_<00!%W$$`.]Q!`#'<00`GW$$`'=Q!`!/<00`)W$$`_]M!
+M`/7;00#KVT$`X=M!`-?;00#-VT$`P]M!`+G;00"OVT$`I=M!`)O;00"1VT$`
+MA]M!`'W;00!SVT$`:=M!``W=00!.VT$``````"3?00`&WT$`Z]Y!`!K?00`0
+MWT$`````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`0`%`+`%`(!```"``P```&```(`%````J```@`8```#H``"`#@```$@!`(`8
+M````8`$`@````````````````````@!E````>`$`@&8```"0`0"`````````
+M```````````'``$```"H`0"``@```,`!`(`#````V`$`@`0```#P`0"`!0``
+M``@"`(`&````(`(`@`<````X`@"`````````````````!@```"P&`(!0`@"`
+M_`4`@&@"`(`6!@"`@`(`@.@%`("8`@"`R@4`@+`"`("X!0"`R`(`@```````
+M````````````"@`'````X`(`@`@```#X`@"`"0```!`#`(`*````*`,`@`L`
+M``!``P"`#````%@#`(`-````<`,`@`X```"(`P"`#P```*`#`(`0````N`,`
+M@````````````````````0!D````T`,`@````````````````````0`!````
+MZ`,`@````````````````````0`)!`````0``````````````````````0`)
+M!```$`0``````````````````````0`)!```(`0`````````````````````
+M`0`)!```,`0``````````````````````0`)!```0`0`````````````````
+M`````0`)!```4`0``````````````````````0`)!```8`0`````````````
+M`````````0`)!```<`0``````````````````````0`)!```@`0`````````
+M`````````````0`)!```D`0``````````````````````0`)!```H`0`````
+M`````````````````0`)!```L`0``````````````````````0`)!```P`0`
+M`````````````````````0`)!```T`0``````````````````````0`)!```
+MX`0``````````````````````0`)!```\`0``````````````````````0`)
+M!`````4``````````````````````0`)!```$`4`````````````````````
+M`0`)!```(`4``````````````````````0`)!```,`4`````````````````
+M`````0`)!```0`4``````````````````````0`)!```4`4`````````````
+M`````````0`)!```8`4``````````````````````0`)!```<`4`````````
+M`````````````0`)!```@`4``````````````````````0`)!```D`4`````
+M`````````````````0`)!```H`4``%`V!@!%"P````````````"8008`J14`
+M````````````2%<&`&@%`````````````+!<!@"H"`````````````!8908`
+MJ`X``````````````'0&`&@$`````````````&AX!@"H$``````````````0
+MB08`J"4`````````````N*X&`'$]`````````````(CU!@"&`@``````````
+M``!8\P8`.@$`````````````F/0&`.P``````````````"CR!@`N`0``````
+M``````#P[@8`.`,`````````````F.P&`%("`````````````&C_!@#B`0``
+M``````````!0`0<`S`$`````````````(`,'`+@!`````````````-@$!P!&
+M`0`````````````@!@<`1@0`````````````:`H'`&8!`````````````-`+
+M!P!2`0`````````````H#0<`"@$`````````````.`X'`+P`````````````
+M`/@.!P#6```````````````P[`8`:```````````````$/@&`%,'````````
+M``````,`4`!.`$<`"`!3`%0`00!2`%0`1`!,`$<`#@!2`$4`4`!,`$$`0P!%
+M`$8`20!,`$4`1`!,`$<`"0!2`$4`3@!!`$T`10!$`$P`1P`,`$<`10!4`%``
+M00!3`%,`5P!/`%(`1``Q``H`3`!)`$,`10!.`%,`10!$`$P`1P`*`$$`4P!+
+M`$X`10!8`%0`5@!/`$P```````````````````")4$Y'#0H:"@````U)2$12
+M````70```2X(`@```&/2B4\````$9T%-00``L8\+_&$%````(&-(4DT``'HF
+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
+M?DWHK/^?$DEM\J_E;'U)8HSHRQT<VE(,`T1?ZZGA(EPH0(='BFFXD'I',OXK
+M,G`AQ8Z.EG9UP864\UZ1Z8(+*2<O/#1TPX64.Y4M-?7`A923P\B]<AC)0)!B
+M9W(.7"A`<"&X$%P(+@07@@L17`@N%!:7G$.D&%PH&)<2D6)P(;@07`@N!!>"
+M"Q%<""X$%X(+P87@0@07@@O!A>!"<"&X$,&%X$)P(;@07`@N1'`AN!!<""X$
+M%X(+$5P(+@07@@O!A6++)5LB4@PN!!>""\&%X$)P(8(+P87@0G`AN!!<B.!"
+M<"&X$%P(+@07(K@07`@N!!>""\&%""X4H/\#9IGG&MFY;-<`````245.1*Y"
+M8((`````````*````!`````@`````0`(`````````0``$@L``!(+`````0``
+M``$````````D-)L`)S6:`"DZF@`W)\H`.BG2`#LIU@`\*MH`/BO>`"U!FP`S
+M2K<`,TNX`#)-N@`S3KL`,U&_`#-3OP`Z5;D`,UC%`#9ESP`\;LT`-F;0`#9F
+MT0`U:M0`-FO4`#5OV``U;]H`,W3>`#1RW``T=]\`-7C?`#]UV0`S=^$`,WCA
+M`#=XX``W>N``-WSD`#E^Y0!)-;H`5#S@`%8]Y0!90.L`0';;`%ERS`!I3,<`
+M>5?F`'M9Z0!!D"H`2K$P`$NT,0!;ICL`4[,J`%:Y*P!7O"P`4KTV`&F]1`!9
+MP"T`7<4P`%;2-P!:W#H`6]\[`%SB.P!=Y3L`:\%%`&C%1``VG=8`(X;S`#J`
+MYP`Z@.@`.H'J`#N!Z@`[@NH`/(/K`#Z%[0`_ANX`(;+-`#[C]0`Z\ND`2(';
+M`$**\@!$CO4`4H7A`%>1Z`!^I-@`:Z/N`&ND[@!BI/X`8Z;_`%[NZ@#$738`
+MX5XJ`.MB+`#O8RT`ZW0^`/1E+@#X92X`\'<_`/EX/P#-?DT`@U_P`.2'-P#K
+MBSD`[XXZ`/20.P#XDSP`ZY!8`/"36@#YD58`JXGC`+./[0"VD?``N)/S`+F4
+M]0"DQ^0`L]_\`+3Q_P"[\?\`O?/_`,GU_P``````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````!/3DE(1D0!441&1TE.3P``244C
+M(!H;`DT;&A\C0TD``$(=&1<5$@,3$A06&!PD```B$0\-"PH)$`H+#`X1(0!P
+M*5565E965E965E9651YP4E!S='1T='1T='1T='-04BI4<G)R<G)R<G)R<G)R
+M4RH`<75U=75U=75U=75U=7$````Y,#XR65]I8P0G+6L`````.B\V,UI<:&0%
+M)BQL`````#LN,31;6&%E!B4K;0`````\2DPW74!79@=!2VX`````/34_.%Y@
+M:F<(*&)O````````````````````````__\``/__``"``0``@`$``(`!``"`
+M`0``````````````````@`$``,`#``#``P``P`,``,`#``#``P``__\``"@`
+M```@````0`````$`"`````````0``!(+```2"P````$````!````````/Q$/
+M``H&0P`-"%,`#@A;`!D-7``0"60`$`EH`!L.;``=#G4`'0]\`!95!@`:9@<`
+M'7((`!]Y"``K:PL`*W,,`"Y^#``S?`T`3Q@3`%@:%0!9)R$`81P8`&4J)0!M
+M+"8`<RXG`'HS*P`>#X$`'Q"%`!$\NP`B$(P`)Q66`"L6J``N&+4`,!JN`"XA
+MA0`['\<`/B'0`"%=E0`K1J,`.5*J`!)<W``N:]@`-&[9`$0EV0!5+=X`0R3@
+M`%@M\0!?,?<`8C[$`$1<KP!%9K<`16>[`$AGOP!M6*H`2VO!`$MKQP!.>]<`
+M6WC*`%%\U@!N1MX`<DGF`'A,]0`O@PP`-(,-`#.+#0`XCPX`,(8;`#:;#@`Y
+ME0X`.ID1`#FC#P`\J1``/[01`$FL%0!)N!,`4;X5`%R>3@!HGE$`;;-2`$O%
+M%@!3RQ8`7\8H`%OA&@!MS%(`<L94`'GE5``:I_8`(X#,`"NZ]P`CP=0`(=7_
+M`"3W_P`PX/\`.?[_`&.`O0!/@MP`4(7?`%F#U@!9AML`7(K>`%2*XP!=C^(`
+M59#I`%R0Y`!<ENP`7IGN`%>>_@!9E_$`7IST`%N>^P!<H/L`:(?#`&F(S0!C
+MB]4`<9/,`&V:X@!@G?4`?J38`&.F_P!YJ?$`>K'U`%CN_P!0\O\`A#8M`(HW
+M+P"7/#0`G$,Y`*=%/`"+7%D`E6->`*U21P"V2T(`NU%&`+I:3`"D:64`N7%K
+M`,%/10##6DT`Q5Y1`,YH60#49%<`UFQ<`,A[<P#B:UL`B&#U`)1WY@">?_4`
+MTX%X`(Z)O0"-A<H`FHWI`(JMU@"-MML`I(3]`*V7_`"XJ/T`JLGF`*?@_@"]
+MZ?X`M/'_`+WS_P#,P/\`P_3_`,GU_P``````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````*BHK*RLK*RLK
+M*RLK)V8K*RLK*RLK*RLJ*RH```````!K:VMO;F]N;G=N;VXG>6YO;V]N;V]N
+M;FYK:P```````&MK;V]O;V]W=7=N=RAY=V]O;W=O;VYN;FYK````````;FYN
+M;6UM;75U=75U*'AU=6UU=75U=6YN;FX```````!N;75J=75J:FEI:6DR>&EJ
+M:6IJ:FIJ:FUN;@```````&UJ:6EH:&AH:69F9C)T9F9F:&AF:&9G:6QM````
+M````;&=H9&-C8G)R8F)B,G)B8F)D<F)B8F5E9VD```````!G93@X-S4U-34U
+M-34S.C4U-#4U-30W.#AE9P```)UV<V5@-#0T,S0T-#0T-#,U-#0T-#0T-#0U
+M-SEA<W:=`)A?86)W=W=W;W=W=W=W=W=W=W=W=W=W=W=W8F%PF```F5]@9J2D
+MI*2DI*2DI*2DI*2DI*2DI*2DI*-D8%^9``!V<&!YHZ.CHZ.CHZ.CHZ.CHZ.C
+MHZ.CHZ.CHWDY7W8```!P.9ZAH:&AH:&AH:&AH:&AH:&AH:&AH:&AGCMQ````
+M`#IHH*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@9CH``````'F@H*"@H*"@H*"@
+MH*"@H*"@H*"@H*"@H*!Y````````GZ2DI*2DI*2DI*2DI*2DI*2DI*2DI*2D
+MI)\`````````$A(//T1)00L!$QE]@(J#&@(%"A\D+3$V``````````!*01`1
+M1$M$"Q,5&7R`BH9_`P@*("0M/)(``````````$I!$$!$4$<,$Q<9?8"-AG\$
+M"!L@)"T]D@``````````2D(20$A01PP4%QE^@(N*@P0('"`E+SV2````````
+M``!+1A)!2%%)#!07&GZ)C8R$!`D>("XP/I,``````````$Q$/T5)44D-%!E\
+M?H60C84&"A\A+C`^F@``````````3$`/$$%*10X6%1<:@(N+B0<%"!\D,#Z:
+M``````````!,6E=<7%Y<#A0F6%E=>WJ%!QTI5UM>>IH``````````%)*1DI0
+M4U!#&!I\?X6.C(8C(Q\B+#Z1FP``````````54].3U165$V!@8*'B)2/B)65
+MEI:7FYRB````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````/_______________^````?@```'X```!^````?@
+M```'X```!^````?@```'`````(````&````!@````<````/````#X```!^``
+M``?P```/\```#_````_P```/\```#_````_P```/\```#_````_P```/____
+M____________*````#````!@`````0`(````````"0``$@L``!(+`````0``
+M``$````````0/@4`#0=8`!4+9P`9#7D`(!!T`!)%!@`65`8`&5X'`!IC!P`E
+M7@H`)V<*`"QT#``M?0P`,GD.`#A[*`!0%A(`8QP7`&P?&0!G+"4`="TF`'<R
+M*@!\-"P`%0N*`!D-AP`9#)<`'`ZH`!T.M``?$+\`(!&!`",1EP`D$J<`+1:K
+M`"43NP`I%;0`,QFU`#\OO@`I%,<`*A71`#H<R0`Y'-D`-1OB`#8EPP`>9)H`
+M,TZH`#=JBP`:2]\`#T[W`!17_P`68_\`*W#0`#1OV0!-+J\`0!_X`$LER@!'
+M(]<`1"'K`$HE^0!7*_``5RWZ`&TVY@!C-/\`>CW\`$UCJ@!*:K8`4VRT`%=U
+MN0!A?KP`3G/"`$Y^V0!3;,@`47;$`%5YQ@!6>\@`6G[+`%1]TP!M9M``=&O<
+M`'5H[``N@@P`,XP.`#B'#@`TE`X`.Y,/`#F=#P`[EA$`.:4/`#NH$``_M1``
+M0)X1`$2E$0!'JA8`2+@3`%*]%@!@ET\`:[!1`$C#$P!4R!<`4=(9`&#'*P!Q
+MT%(`.X>T`!JPVP`:I_\`+I#9`"*YV@`LKOP`',WZ`![D_P`KR<P`+,;_`"/1
+MZ0`^R_\`-];_`";H_@`I]?\`-NGX`%Z"S0!3A=T`7(/4`%F)W0!7C>,`7)/G
+M`%:?_P!<HO\`9H;'`&R-R`!AAM(`:8S4`&V5W@!RE,T`=YO+`&.1X@!HF><`
+M:YWJ`&2>\0!QF^(`;Z+N`&>B]`!CIO\`:Z3T`&FF^P!KJ?T`=:3K`'BF[0!Y
+MJ>\`<Z?R`'6I]`!TK?H`>:ST`'BN^0!^NOH`1MS_`%G;_P!,Y/\`:<SX`((U
+M+`"*-BT`ACPU`)@X+P"3/30`FCPS`*0],P"-1CT`F4,Y`*A".`"V1SP`DUE7
+M`)EA70"F34$`JU)%`+9+0`"]3D(`N%9)`+M>50"C96$`MVUH`,9.1`#&6$L`
+MRUY0`-5?40#*958`U&56`-AG5P#*>7$`AD+_`(QO_P"9?O\`B:W7`)*]W@")
+ML>T`B+KX`)K`WP"KRN8`I^7_`*[P_P"QY_\`L_'_`+OR_P#![?\`P_3_`,CU
+M_P``````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````#(S,S,S,S,S,S,S,S,S,S,S,RQY,S,S,S,S,S,S
+M,S,S,S,S,S,S`````````````'M\?'Q\?'Q\?'Q\?'Q\BWQ\>RR_?'R+?'Q\
+M?'Q\?'Q\?'Q\?'M[`````````````'Q\?(N+BXN+BXN+BXN+BXN+BRR_BXN+
+MBXN+BXN+BXN+BXM\?'Q\`````````````'R+BXN.CHZ.CHZ.CHZ.CHZ.C2R_
+MCHZ.BXZ.C8Z.CHZ.BXZ+BWQ\`````````````(N+CHZ.E)24E(Z4CI24E)24
+ME$"_EI24E)24E)24E)24E)2.CHN+`````````````(N.CI26E)26E):6E):6
+ME):4ED&_E9:4EI:4EI24E)26E)24E(Z+`````````````(V4E)26EI:6OY65
+MEI65E9:5E4&_E965E965E965EI65EI:4E(Z.`````````````(V.DY.5E965
+MD9&1D9&1D9&1D4*^D9&1D9&1D9&1D;Z5E963DXR-`````````````(V,DY*1
+MD)"0D)"0CX^/CXB/CT*^CX^/CX^/CX^/D)"1D(^2DHR*`````````````(J,
+MCX:&B(B(@8&!@8&!@8&!B$*(@8&!A(&!@8&!@8B(B(B&B8J*````````````
+M`(J'A7>`=75U=75U=75U=75U=4*`=75U=75U=75U?7]_?W=_A8>*``````#!
+MO(*"@GJ%@75U=75U1W5U1W5U1TAU=4!]275(24E)24E)2DI*2G5*>H1Z@H*"
+MO,$`O7Y^?GIZ>$EU=4AU=4=`1T='0D1`1T!(1T=`0D1$1T1$1T=(2$E)=WEZ
+M?GY^O```O7Y]?7IX=WQ\BWQ\?'Q\BWR+BWQ\BWR+?(N+BWQ\BXN+BXN+BXN+
+M=WAY?7U^P```O8-#0GEV@<G)R<G)R<G)R<G)R<G)R<G)R<G)R<G)R<G)R<G)
+MR<G)@'9V0T.#O0```+Q"0G9+O\G(R,G(R<C)R<C)R,G(R<C)R,G(R<C(R<G(
+MR,G)R,G(OTMV0D*\`````+Q#079+Q,C&R,;(R,C&R,C(R,C(R<;(R,C&R,;(
+MR,;(R,C(R,;(Q$M%04.\``````!]/T6$QL;&R,;(QL;&QL;&QL;&QL;&QL;&
+MR,;(QL;&R,;&QL;&QH%%/WT```````"`/T67QL;%QL;&QL;&QL;&QL;&QL;&
+MQL;&QL;&QL7&QL;&QL;&QKY%/X``````````07;"P\;%QL7%Q<7%Q<7%Q<;#
+MQ<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<)V0```````````1H7#P\/%Q</%Q<7%Q<7%
+MP\/%Q</%P\7%Q</#Q<7%Q<7%P\7%Q<6%1@``````````1I?#P\/#P\/#P\/#
+MP\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/%Q,.;1@```````````,?)R<G)R<C)
+MR<G)R<G)QLG)R<G)R<G)R<G)R<G)R<G)R<G)Q\G'```````````````.#`L*
+M"PU05%(-"080$!,4G*&EJ:FCGA8"`P0$&!D?(B,@-#0```````````````!1
+M40T+"0U05E13#`$0$Q45G9^EJZJJHYP"!!@7%QD?(R,V-C0`````````````
+M``!:40T+"T]25UI3#`80$Q:<G:*FK*VJJ:0#!!D8%Q\B(2<G-SP`````````
+M``````!;64\,#$]66%=6#0<1$YR=GZ6FLK.MJJ0$'1X9&1HA)R@W-SP`````
+M``````````!=65$,#5)66%Q:4`<1%9Z?HJ:QM+6SK:4$%Q\9&1LE*#<X.CX`
+M``````````````!=65`-3U)76%Q<4`@2%J2?HJ:QMK:ULJL7'A\:&APE*#@Y
+M.SX```````````````!=65,-#5)68%Q<4@@2G*2@HJ:QM+:ULZL8'B(:&B$F
+M*3@Y.SX```````````````!=6E,-#5)78%U<4P@2%J2?HJ:QM+>WLZ88'QL;
+M&B$F*#@Y/3X```````````````!=6E-/#5)78&!<4P@2%J2?HJ:QM[>VL[$7
+M'R(;&B4F*3D[/3X```````````````!A60L*"@L,4U13#`D2$Q45G*&FL;*M
+MI;$8`P0#`P4>(R<W.KD```````````````!=:69F;G)S;')R;`D2*S)H:FYQ
+M='&8<*P7+S`O+S%G9V=N=+D```````````````!A;6UI;W-S<W1T;0D2+65H
+M:IB:FIF;FZT9+C$Q,6=K:FYQFKD```````````````!A75104%1<8F%@50D3
+MG:2EI:RRM[>WM:87(!P<'"8I-3D[/KD```````````````!C8UM24U9@86%A
+M6P^>HZ.@I::RM[>XM:XD-BHA(28U.3L]N;D```````````````!?7U]>7U]D
+M9&1D7UZGJ*^OK["XN+BXN*]-34U,3$U.3KJZOKL`````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``#_______\``/_______P``________``#_______\``/_______P``____
+M____``#X`````!\``/@`````'P``^``````?``#X`````!\``/@`````'P``
+M^``````?``#X`````!\``/@`````'P``^``````?``#X`````!\``/@`````
+M'P````````````"```````$``(```````0``@``````!``#```````,``,``
+M`````P``X``````'``#@``````<``/``````#P``\``````/``#P``````\`
+M`/@`````'P``_``````_``#\`````#\``/P`````/P``_``````_``#\````
+M`#\``/P`````/P``_``````_``#\`````#\``/P`````/P``_``````_``#\
+M`````#\``/P`````/P``_``````_``#\`````#\``/P`````/P``________
+M``#_______\``/_______P``________```H````$````"`````!`"``````
+M```$```2"P``$@L`````````````````````````````````````````````
+M```````````````````````````````````````````````````````````$
+M!1P"`0`$*@```$````!`````0````$````!`````0````$````!`````0```
+M`$`!``0J`P4<`@``````````1([U_T**\O\_AN[_/H7M_SN"ZO\Z@>K_)#2;
+M_U>1Z/\Z@>K_.X+J_SR#Z_\_AN[_0HKR_T2.]?\``````````#^&[O\[@>K_
+M-WSD_S-XX?\S=-[_-'+<_R<UFO](@=O_-'+<_S-TWO\S=^'_-WSD_SJ`Z/\_
+MAN[_```````````Z@.?_-7C?_S5OVO\V:]3_-F;1_S9ES_\I.IK_/&[-_S9E
+MS_\V9M#_-6K4_S5OV/\T=]__.7[E_P``````````-WK@_S-8Q?\S4[__,TZ[
+M_S-+N/\S2K?_+4&;_SI5N?\S2K?_,TNX_S)-NO\S4;__,UC%_S=XX/\`````
+MI,?D_T!VV_]BI/[_8Z;__V.F__]CIO__8Z;__V.F__]CIO__8Z;__V.F__]C
+MIO__8Z;__V*D_O\_==G_I,?D_WZDV/]2A>'_N_'__[WS__^]\___O?/__[WS
+M__^]\___O?/__[WS__^]\___O?/__[WS__^[\?__4H7A_WZDV/]9<LR5:Z3N
+M_[3Q__^T\?__M/'__[3Q__^T\?__M/'__[3Q__^T\?__M/'__[3Q__^T\?__
+MM/'__VNC[O]9<LR6*S=Z!;/?_/_)]?__R?7__\GU___)]?__R?7__\GU___)
+M]?__R?7__\GU___)]?__R?7__\GU__^SW_S_*S=Z!0````,````&5M(W_TNT
+M,?]KP47_4[,J_^%>*O_P=S__\)-:_^2'-_\W)\K_5CWE_WM9Z?^KB>/_````
+M!@````,````$````"%K<.O]*L3#_:;U$_U:Y*__K8BS_ZW0^_^N06/_KBSG_
+M.BG2_U0\X/]Y5^;_LX_M_P````@````$`````P````9;WSO_09`J_UNF._]7
+MO"S_[V,M_\1=-O_-?DW_[XXZ_SLIUO])-;K_:4S'_[:1\/\````&`````P``
+M``(````$7.([_R&RS?\Z\NG_6<`M__1E+O\VG=;_7N[J__20._\\*MK_(X;S
+M_S[C]?^XD_/_````!`````(````!`````EWE.]U2O3;W:,5$\EW%,-;X92[>
+M^7@_]_F15O+XDSS6/BO>WEE`Z_>#7_#RN93UU0````(````!````````````
+M````````````````````````````````````````````````````````````
+M`````````````/__``"``0``@`$``(`!``"``0``@`$`````````````````
+M`````````````````````````````````/__```H````(````$`````!`"``
+M```````0```2"P``$@L`````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````(//P<"##0M`@PT,P(--RD"#3<H`@TW
+M*`(--R@"#3<H`@TW*`(--R@"#3<H`@TW*`(--R@"#3<H`@TW*`(--R@"#3<H
+M`@TW*`(--R@"#3<H`@TW*`(--R@"#38L`@PR-P(-.1L`````````````````
+M````````````````````+FO8_S!LV?\Q;=G_,F[9_S-NV?\T;]G_-&_9_S5O
+MV?\U;]G_-6_9_S5OV?\U;]G_*$.B_UV-XO\U;]G_-6_9_S5OV?\U;]G_-6_9
+M_S1OV?\T;]G_,V[9_S)NV?\Q;=G_,&S9_RYKV/\`````````````````````
+M``````````!5GO__5Y___U>>_?]8G_W_69_]_UN@_?];H/W_6Z']_UNA_?];
+MH?W_6Z']_UNA_?\N2:7_?+3]_UNA_?];H?W_6Z']_UNA_?];H?W_6Z#]_UN@
+M_?]9G_W_6)_]_U>>_?]7G___59[__P``````````````````````````````
+M`%>>_?]9GOW_6Z#\_UR?_/]=H/K_7:#Z_UV@^O]>H/K_7J#Z_UZ@^O]>H/K_
+M7J#Z_S5/J/]\L?K_7J#Z_UZ@^O]>H/K_7J#Z_UZ@^O]=H/K_7:#Z_UV@^O]<
+MG_S_6Y[\_UF>_?]7GOW_````````````````````````````````6Y[\_UN?
+M^O]=GOG_7I[X_UZ>]O]?G?7_7Y[U_V"=]?]@G?7_8)WU_V"=]?]@G?7_/%6K
+M_WNM]?]@G?7_8)WU_V"=]?]@G?7_8)WU_U^>]?]?G?7_7I[V_UV>^/]=GOG_
+M6Y_Z_UF>_/\```````````````````````````````!<GOG_7IWV_UZ;]/]?
+MF_'_7YKP_U^9[O]?F.[_7YGL_UZ7[/]>E^S_7I?L_UZ7[/]"6J[_=J7L_UZ7
+M[/]>E^S_7I?L_UZ7[/]?F>S_7YCN_U^9[O]>F.__7IGQ_UZ;]/]<G?;_6IWY
+M_P```````````````````````````````%R;]?]=F?'_6Y;M_UN4Z?];DN;_
+M7)#D_UV0X_]=D.+_78_B_UV/XO]=C^+_78_B_T5>K_]MFN+_78_B_UV/XO]=
+MC^+_78_B_UV0XO]=D.+_6Y#D_UJ1Y?]:D^G_6I7L_UJ8[_];FO7_````````
+M````````````````````````69?Q_UF3Z_]7C./_6(K>_UF'VO]9A-?_6H37
+M_UJ#UO]9@M;_68+5_UF"U?]9@M7_1&&P_V.+U?]9@M7_68+5_UF"U?]9@M;_
+M6H/6_UF#UO]8@]?_6879_UB'W?]6BN+_5Y#I_UB5[_\`````````````````
+M``````````````!5D>K_58OC_TUNRO],;,;_3&O#_TMKPO]+;,'_2VS`_TML
+MP/]+;,#_2VS`_TMLP/]"8;#_5'+#_TMLP/]+;,#_2VS`_TMLP/]+;,#_2VS!
+M_TMKP?]+:L/_2VO%_TMMR?]4B.'_5)#I_P```````````````*K)YLI]GM'_
+M<9/,_U&+Y?]0?]?_26C$_TAGO_]'9[W_1F>\_T5HN_]%:+K_16>Z_T5GNO]$
+M9[K_1&>Z_SY@L/]*;+S_1&>Z_T1GNO]$9[K_16>Z_T5GNO]%9[O_16>\_T9F
+MO/](9K[_26?#_T]\UO]0B.+_<9/,_WV>T?^JR>;)GL3A7XJMUO]IB,/_4(7?
+M_U)ZT_]CIO__8Z;__V.F__]CIO__8Z;__V.F__]CIO__8Z;__V.F__]CIO__
+M8Z;__V.F__]CIO__8Z;__V.F__]CIO__8Z;__V.F__]CIO__8Z;__V.F__]C
+MIO__47?1_T^#W?]IB,/_BJW6_Y[$X5^3O-X)C;;;ZV.`O?]/@-O_7XO>_\CU
+M___(]?__R/7__\CU___(]?__R/7__\CU___(]?__R/7__\CU___(]?__R/7_
+M_\CU___(]?__R/7__\CU___(]?__R/7__\CU___(]?__R/7__\CU__]>BM[_
+M37[8_V.`O?^-MMOKE<#>"0````!^I-B+9X;"_TQ[U_]\L/#_P_3__\/T___#
+M]/__P_3__\/T___#]/__P_3__\/T___#]/__P_3__\/T___#]/__P_3__\/T
+M___#]/__P_3__\/T___#]/__P_3__\/T___#]/__P_3__WRP\/],>=;_9X;"
+M_WZDV(H``````````&Z/TR)IB,W]3WS7_Z?@_O^]\___O?/__[WS__^]\___
+MO?/__[WS__^]\___O?/__[WS__^]\___O?/__[WS__^]\___O?/__[WS__^]
+M\___O?/__[WS__^]\___O?/__[WS__^]\___I^#^_U!\U_]IB,W];H_3(@``
+M`````````````%][SK5=CN/_MO'__[?R__^W\O__M_+__[?R__^W\O__M_+_
+M_[?R__^W\O__M_+__[?R__^W\O__M_+__[?R__^W\O__M_+__[?R__^W\O__
+MM_+__[?R__^W\O__M_+__[?R__^V\?__78WC_U][SK0`````````````````
+M```!4FK(2W6P\O^R\?__LO'__[+Q__^R\?__LO'__[+Q__^R\?__LO'__[+Q
+M__^R\?__LO'__[+Q__^R\?__LO'__[+Q__^R\?__LO'__[+Q__^R\?__LO'_
+M_[+Q__^R\?__LO'__[+Q__]UL/+_4FK(2P````$```````````````$9(4,&
+MO.C^_\KU___*]?__RO7__\KU___*]?__RO7__\KU___*]?__RO7__\KU___*
+M]?__RO7__\KU___*]?__RO7__\KU___*]?__RO7__\KU___*]?__RO7__\KU
+M___*]?__RO7__[WI_O\9(4,&`````0```````````````@````<````--7T.
+M_S![#/\J;`S_+H$,_S:=#O]%M1+_,8L-_Q1+!?\_$0__52(<_V\M)O^(-B__
+MJ44[_[]:3O^E44/_?C<P_PH&0_\7#%W_'0Y\_RD4G_\Z'\7_5"S<_V(^Q/]M
+M6*K_````#0````<````"```````````````#````"`````]'IA/_-XL-_RIP
+M"_\M?PO_-9H._T6W$O\VF@__&5X'_T\8$_]=)B#_;RTF_X<U+O^F0SO_P5M/
+M_[992O^=1#O_#0A3_QH-:O\=#WW_*!2=_SH?PO]6+=__;D;>_Y!TX/\````/
+M````"`````,```````````````,````'````#DBJ$_\XCP[_*W,,_R^$#/\X
+MH`[_1[T3_S>>$/\980?_4A@4_V$F(?]S+B?_C#@O_ZQ&/?_'75'_NEM-_Z%&
+M//\."%C_&@UL_QX/@?\I%:'_/"#(_U@NYO]P2.+_E'?F_P````X````'````
+M`P```````````````@````4````)2Z\4_SJ4#O\M=PS_,8D,_SJF#_]*Q13_
+M.J81_QIF!_]6&17_9"@B_W<P*/^1.C'_LTE`_]!B5?_#7U'_JTI`_PX(6_\;
+M#F__'Q"%_RL6J/\^(=#_6S#N_W1*ZO^9>^W_````"0````4````"````````
+M```````!`````P````5-M13_/9D/_RY\#?\SC@W_/*T0_T_-%/\]K1'_'&L(
+M_UL;%O]I*B/_?#(J_Y<\-/^[3$+_V&99_\UD5/^T34/_#PE?_QT.=?\B$(S_
+M+1>N_T`BV?]?,??_>$WS_YY_]?\````%`````P````$`````````````````
+M```!`````4ZZ%?\^GA#_,($-_S63#?\^LA#_4]05_S^V$O\=<`C_7AL7_VXK
+M)_^"-2S_G#XV_\%/1?_B:UO_U6A9_[M11/\0"63_'@]Z_R(1D?\N&+7_0R3@
+M_V,S_O]]3OK_HH+[_P````$````!````````````````````````````````
+M4;X5_S>"#?\I9@S_+6X*_S:%#/]'K!3_.)00_QUT"/]A'!C_52<A_V$L)_][
+M-B__GT8[_\A>3__$7D__P5)(_Q`):/\;#5O_'@]K_R@5D?\\'\W_6"S[_W-)
+M\?^EA?__``````````````````````````````````````````!3P1;_(\'4
+M_QS#[/\@\O__(?___S7___\J\___'WD(_V$<&/\A797_(X#,_RNZ]_\PX/__
+M4/+__U+=__^\4D?_$`EH_Q$\N_\27-S_&J?V_R'5__\\_/__6.[__Z:&_?\`
+M`````````````````````````````````````````%_&*/]-KQO_.I(3_SRE
+M$/]&P!3_6^$:_TS#&_\PAAO_;BTJ_W8U,/^#-R[_F$`V_[E01O_6;U__SFQ=
+M_[9:4?\Q*G[_+B&%_R<9DO\P&J[_2"?8_VP^]?^(8/7_KI;Z_P``````````
+M````````````````````````````````=<%4MF^T4]9HGE'N:[)0_7#+5/UY
+MY53N;<Q2UER>3K>)65>VC5];UI5C7NZD:67]O7%L_=.!>.[(>W/6M'!JMXZ+
+MO;:-A[W6BH3![H^&TOV:C>G]JY?][KBH_=;,P/^W````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````/__________X```#^````?@```'
+MX```!^````?@```'X```!^````?@```'````````````````@````8````'`
+M```#@````8````&````!@````8````&````!@````<````/P```/\```#_``
+M``_P```/________________*````#````!@`````0`@````````)```$@L`
+M`!(+````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````````````````````````````!&%P!`A=<"@(770D"
+M%UX#`A=>`P(77@,"%UX#`A=>`P(77@,"%UX#`A=>`P(77@,"%UX#`A=>`P(7
+M7@,"%UX#`A=>`P(77@,"%UX#`A=>`P(77@,"%UX#`A=>`P(77@,"%UX#`A=>
+M`P(77@,"%UX#`A=>`P(77@,"%UX#`A=>`P(77@,"%UX#`A=>`P(77@,"%UT)
+M`A=<"@$87`$`````````````````````````````````````````````````
+M`````P<C'`($%T,"!!5-`@4810(%&4("!1E"`@490@(%&4("!1E"`@490@(%
+M&4("!1E"`@490@(%&4("!1E"`@490@(%&4("!1E"`@490@(%&4("!1E"`@49
+M0@(%&4("!1E"`@490@(%&4("!1E"`@490@(%&4("!1E"`@490@(%&4("!1E"
+M`@4810($%4T"!!=$`P<C'0,*+P$`````````````````````````````````
+M````````````````````+FO8_S!LV?\Q;=G_,F[9_S-NV?\T;]G_-&_9_S5O
+MV?\U;]G_-6_9_S5OV?\U;]G_-6_9_S5OV?\U;]G_-6_9_S5OV?\U;]G_*$.B
+M_UV-XO\U;]G_-6_9_S5OV?\U;]G_-6_9_S5OV?\U;]G_-6_9_S5OV?\U;]G_
+M-6_9_S1OV?\T;]G_,V[9_S)NV?\Q;=G_,&S9_RYKV/\`````````````````
+M````````````````````````````````````59[__U>?__]9H/__6J#__UNA
+M__]<HO__7:+__UVB__]=HO__7:+__UVB__]=HO__7:+__UVB__]=HO__7:+_
+M_UVB__]=HO__+DJE_WZU__]=HO__7:+__UVB__]=HO__7:+__UVB__]=HO__
+M7:+__UVB__]=HO__7:+__UVB__]<HO__6Z'__UJ@__]9H/__5Y___U6>__\`
+M````````````````````````````````````````````````````6:#__URB
+M__]>H___8*3__V*E__]CIO__8Z;__V2F__]DIO__9*;__V2F__]DIO__9*;_
+M_V2F__]DIO__9*;__V2F__]DIO__-E*I_X2X__]DIO__9*;__V2F__]DIO__
+M9*;__V2F__]DIO__9*;__V2F__]DIO__9*;__V.F__]CIO__8J7__V"D__]>
+MH___7*+__UF@__\`````````````````````````````````````````````
+M````````7J/__V&E__]EI___9J?^_VBH_O]IJ?[_:ZG^_VNJ_O]KJO[_:JC^
+M_VJH_O]JJ/[_:JC^_VJH_O]JJ/[_:JC^_VJH_O]JJ/[_/EJN_XBY_O]JJ/[_
+M:JC^_VJH_O]JJ/[_:JC^_VJH_O]JJ/[_:JC^_VJH_O]JJ/[_:ZK^_VNI_O]I
+MJ?[_:*C^_V:G_O]EI___8:7__UZC__\`````````````````````````````
+M````````````````````````8J3]_V:G_O]KJ?[_;:K^_V^L_/]RK/S_<JS\
+M_W*M_/]RK?O_<JW[_W*M^_]RK?O_<JW[_W*M^_]RK?O_<JW[_W*M^_]RK?O_
+M1V.R_XV[^_]RK?O_<JW[_W*M^_]RK?O_<JW[_W*M^_]RK?O_<JW[_W*M^_]R
+MK?O_<JW\_W*L_/]RK/S_;ZS\_VVJ_/]IJ/[_9J?^_V*D_?\`````````````
+M````````````````````````````````````````9:;^_VNI_/]NJOS_<ZW[
+M_W6M^_]VKOK_>*[Z_W>N^O]WKOG_=Z[Y_W>M^?]WK?G_=ZWY_W>M^?]WK?G_
+M=ZWY_W>M^?]WK?G_3FRU_X^Z^?]WK?G_=ZWY_W>M^?]WK?G_=ZWY_W>M^?]W
+MK?G_=ZWY_W>N^?]WKOG_=Z[Z_WBN^O]VKOK_=:S[_W*L^_]NJOS_:Z?\_V6F
+M_O\`````````````````````````````````````````````````````:*;\
+M_VVI^_]RJ_K_=:WY_WBM^/]YKOC_>J[W_WJN]O]ZK?;_>JWV_WFM]/]YK?3_
+M>:WT_WFK]/]YJ_3_>:OT_WFK]/]YJ_3_5'&X_XZX]/]YJ_3_>:OT_WFK]/]Y
+MJ_3_>:OT_WFM]/]YK?3_>:WT_WFM]/]ZK?;_>JWV_WJM]_]YK??_>*WX_W6L
+M^?]RJOK_;:G[_VBF_/\`````````````````````````````````````````
+M````````````:J;[_V^I^/]SJO?_=JOU_WFK]/]ZJ_3_>ZSS_WNK\O]ZJO#_
+M>:GP_WFI\/]YJ>__>:GO_WFI[_]YJ>__>:GO_WFI[_]YJ>__5G2[_XRT[_]Y
+MJ>__>:GO_WFI[_]YJ>__>:GO_WFI[_]YJ>__>:GO_WFI\/]ZJO#_>JKR_WJK
+M\?]YJ_+_>*KS_W:J]?]SJ?;_;ZCX_VFF^?\`````````````````````````
+M````````````````````````````:*7X_VZG]O]RJ/3_=:CR_W>H\/]YJ.[_
+M>:?M_WBF[/]WI>O_=Z3K_W:DZO]VH^K_=J/J_W6CZO]UH^K_=:/J_W6CZO]U
+MH^K_5G:\_X:MZO]UH^K_=:/J_W6CZO]UH^K_=:/J_W:CZO]VH^K_=J/J_W:D
+MZO]WI>O_>*7L_WBF[?]WI^W_=J?O_W2G\?]RI_/_;:;U_VBC]_\`````````
+M````````````````````````````````````````````9Z+T_VRB\O]PI.__
+M;IWH_V^<YO]QG.3_<9KC_W&:X?]OF>#_;I??_VZ6W_]MEM[_;9;>_VV5WO]M
+ME=[_;97>_VV5WO]ME=[_57:\_WN?W_]ME=[_;97>_VV5WO]ME=[_;97>_VV5
+MWO]MEM[_;9;>_VZ7W_]OE^#_<)K@_W":XO]PF^/_;IOE_VV;Z/]OHN[_:J+Q
+M_V>A]/\`````````````````````````````````````````````````````
+M9)[R_VF?[_]KG>K_8(74_V*&T_]BA]+_8X;1_V&&T/]@A<__7X3._UZ#SO]>
+M@\W_7H/-_UZ#S?]>@\W_7H/-_UZ#S?]>@\W_472Z_VR-T/]>@\W_7H/-_UZ#
+MS?]>@\W_7H/-_UZ#S?]>@\W_7H/-_U^$SO]@A<[_88;/_V*&T?]AAM+_8(73
+M_U^$T_]IG.C_:)WL_V.>\/\``````````````````````````*O*YLM^G]+_
+M<I3-_W*4S?]RE,W_89KN_V.9ZO]CD.#_78#0_UV!S_]=@<W_7(',_UI_R_]9
+M?LK_5WW)_U=\R/]7?,C_5GO(_U9[R/]6>\C_5GO(_U9[R/]6>\C_3&^Y_V&#
+MRO]6>\C_5GO(_U9[R/]6>\C_5GO(_U9[R/]6>\C_5WS(_U=\R?]8?<G_6G_*
+M_UN`R_]<@,S_7(#._UM^S_]BCM__8I;I_UZ7[/]RE,W_<I3-_W*4S?]^G]+_
+MJ\KFRJ3'Y&"/L=G_;8[(_VV.R/]MCLC_6Y7J_U^3Y?]<A=?_5WK,_U=ZR?]6
+M>LC_57K&_U-XQ?]0=L3_3W7#_T]TPO].<\+_3G/"_TYSPO].<\+_3G/"_TYS
+MPO].<\+_1FJV_U=YQ/].<\+_3G/"_TYSPO].<\+_3G/"_TYSPO].<\+_3G3"
+M_T]TP_]0=<3_4G?%_U1YQO]5><?_5GG(_U9XRO];@M7_79#B_UF2Z/]MCLC_
+M;8[(_VV.R/^/L=G_I,?D7Z#%X@F:P-_L;(O$_VB&PO]HAL+_5H_F_UJ,X/]<
+M@];_8Z;__V.F__]CIO__8Z;__V.F__]CIO__8Z;__V.F__]CIO__8Z;__V.F
+M__]CIO__8Z;__V.F__]CIO__8Z;__V.F__]CIO__8Z;__V.F__]CIO__8Z;_
+M_V.F__]CIO__8Z;__V.F__]CIO__8Z;__V.F__]CIO__8Z;__V.F__];@M3_
+M68G=_U2-Y/]HAL+_:(;"_VR+Q/^:P-_KHL7B"0````"2O=Z+=YO+_V%^O/]A
+M?KS_4XKB_U>&V_]EDN+_R?7__\GU___)]?__R?7__\GU___)]?__R?7__\GU
+M___)]?__R?7__\GU___)]?__R?7__\GU___)]?__R?7__\GU___)]?__R?7_
+M_\GU___)]?__R?7__\GU___)]?__R?7__\GU___)]?__R?7__\GU___)]?__
+MR?7__\GU__]DD>'_5H3:_U*'W_]A?KS_87Z\_W>;R_^2O=Z+``````````")
+ML=LC@JG5_5MVMO];=K;_487?_U-\T_^'N_7_Q?3__\7T___%]/__Q?3__\7T
+M___%]/__Q?3__\7T___%]/__Q?3__\7T___%]/__Q?3__\7T___%]/__Q?3_
+M_\7T___%]/__Q?3__\7T___%]/__Q?3__\7T___%]/__Q?3__\7T___%]/__
+MQ?3__\7T___%]/__Q?3__\7T__^'N_3_47K2_U"#W/];=K;_6W:V_X.IUOV)
+ML=LB````````````````?J38M6!]N_]4;;#_4(+<_U9_U?^QY___P?3__\'T
+M___!]/__P?3__\'T___!]/__P?3__\'T___!]/__P?3__\'T___!]/__P?3_
+M_\'T___!]/__P?3__\'T___!]/__P?3__\'T___!]/__P?3__\'T___!]/__
+MP?3__\'T___!]/__P?3__\'T___!]/__P?3__\'T__^QY___5GW4_TY_VO]4
+M;;#_8'V[_WZDV+4`````````````````````=);52FB(R/]-9*K_3G_:_V*2
+MX_^]\___O?/__[WS__^]\___O?/__[WS__^]\___O?/__[WS__^]\___O?/_
+M_[WS__^]\___O?/__[WS__^]\___O?/__[WS__^]\___O?/__[WS__^]\___
+MO?/__[WS__^]\___O?/__[WS__^]\___O?/__[WS__^]\___O?/__[WS__^]
+M\___89'C_TY]V/]-9*K_:(C(_W26U4H`````````````````````<I+5`FJ*
+MT=U,8JK_3G[:_X*[]?^Y\O__N?+__[GR__^Y\O__N?+__[GR__^Y\O__N?+_
+M_[GR__^Y\O__N?+__[GR__^Y\O__N?+__[GR__^Y\O__N?+__[GR__^Y\O__
+MN?+__[GR__^Y\O__N?+__[GR__^Y\O__N?+__[GR__^Y\O__N?+__[GR__^Y
+M\O__N?+__[GR__^Y\O__@KOU_TU]V/],8JK_:HK1W'*3U0(`````````````
+M`````````````&!^SW12:[G_587>_Z?E__^U\O__M?+__[7R__^U\O__M?+_
+M_[7R__^U\O__M?+__[7R__^U\O__M?+__[7R__^U\O__M?+__[7R__^U\O__
+MM?+__[7R__^U\O__M?+__[7R__^U\O__M?+__[7R__^U\O__M?+__[7R__^U
+M\O__M?+__[7R__^U\O__M?+__[7R__^U\O__I^7__U2$W?]2:[G_8'[/=```
+M`````````````````````````````%MTS116;\CV8I?I_['Q__^Q\?__L?'_
+M_['Q__^Q\?__L?'__['Q__^Q\?__L?'__['Q__^Q\?__L?'__['Q__^Q\?__
+ML?'__['Q__^Q\?__L?'__['Q__^Q\?__L?'__['Q__^Q\?__L?'__['Q__^Q
+M\?__L?'__['Q__^Q\?__L?'__['Q__^Q\?__L?'__['Q__^Q\?__L?'__V*7
+MZ?]6;\CV6G3-%`````````````````````````````````````%0:,>@?KWW
+M_Z[P__^N\/__KO#__Z[P__^N\/__KO#__Z[P__^N\/__KO#__Z[P__^N\/__
+MKO#__Z[P__^N\/__KO#__Z[P__^N\/__KO#__Z[P__^N\/__KO#__Z[P__^N
+M\/__KO#__Z[P__^N\/__KO#__Z[P__^N\/__KO#__Z[P__^N\/__KO#__Z[P
+M__^N\/__KO#__WZ]]_]0:,>@`````0``````````````````````````````
+M``````)$5[8ZP>W__\CU___(]?__R/7__\CU___(]?__R/7__\CU___(]?__
+MR/7__\CU___(]?__R/7__\CU___(]?__R/7__\CU___(]?__R/7__\CU___(
+M]?__R/7__\CU___(]?__R/7__\CU___(]?__R/7__\CU___(]?__R/7__\CU
+M___(]?__R/7__\CU___(]?__R/7__\'M__]$5[8Z`````@``````````````
+M``````````````````````,````*````%#5[#O\L;0O_)F4*_R1>"O\D9PG_
+M*WP+_S&-#?\WG0__-Y`._S-]#O\D8`K_$#X%_T84$/]3(QW_9BLE_W0M)O^&
+M,2G_F3LR_ZA`./^N3D/_HDY!_X]'//^#/37_>S,J_PT'5O\7#&;_&0UW_Q0*
+M??\5"X;_'0V:_R,2J/\L%K+_,1BP_S0:JO\]'Z;_3R>F_P```!0````*````
+M`P````````````````````````````````````0````,````%CJ%#_\VA`W_
+M+7<,_R9E"_\E:@G_*WP+_S"-#?\XH0__/)L/_SJ0$/\J<`S_$4`%_TD5$?]@
+M*"+_=S(K_WTQ*?^),BK_FCHR_ZA!.?^T4$7_KU1%_Z921?^91SW_@C8L_PT'
+M6?\;#G;_'0Z+_Q8+B/\6#(K_'0V;_R,2J/\N%K?_-AJ__SX>R/]+)<K_5BNT
+M_P```!8````,````!`````````````````````````````````````0````+
+M````%4>C$_\YC0[_+WH-_RAJ"_\G;@G_+8(+_S.4#?\[J!#_/J$0_SR5$/\L
+M=@S_%$D&_U48%/]F*R3_>C0L_X(S*_^/-2S_H3TT_[!$._^[5$C_ME=)_ZM5
+M2/^A2T#_E3TR_Q`):/\=#GW_'@^/_Q<+C?\7#)#_'PZB_R42L/\O%[__.!O&
+M_S\?S?].*-?_:33=_P```!4````+````!```````````````````````````
+M``````````,````(````$$JJ%/\]E0__,H$-_RIQ#/\I=0K_+XD,_S6<#O\^
+MLA#_0JL1_T"?$O\O?PW_%5`&_UL9%?]M+B;_@C<O_XHW+O^8."__JD$W_[E+
+M/__&64S_P5Q-_[=:3/^L4$3_GT(V_Q$);_\?#X;_(!"8_Q@,E?\9#9G_(`^J
+M_R<3N?\R&<K_.QW2_T,AVO]2*N+_;3;F_P```!`````)`````P``````````
+M``````````````````````````(````%````"4ZR%?]`G1#_-8H._RUW#/\K
+M>PO_,9`-_SBD#_]"NA'_1K42_T2J$_\SB`[_%U<&_V,<%_]V,BG_C#LS_Y,Y
+M,?^@.S'_LD0Z_\-,0O_17E#_S6)2_\-A4O^Y5TK_K4<\_Q(*>?\A$9'_)!&C
+M_QH,G_\:#J'_(@^S_RD4P_\T&M7_/Q[?_T@CZ/]8+/#_<SGR_P````D````%
+M`````@````````````````````````````````````$````"````!%"X%?]"
+MHQ'_-X\/_RY\#?\M?PO_,Y0-_SJH#_]#OQ+_2+P3_T>Q%/\UCP__&%P'_V@>
+M&/]\-"S_D3XU_Y@[,?^E/3/_MT8\_\A.1/_78%+_U&95_\ME5?_#6TW_MDM`
+M_Q,+@/\C$9G_)!*K_QP-IO\;#J?_(Q"Y_RH5R/\V&]S_02#H_TLD\_]<+OG_
+M=SOY_P````0````"`````0``````````````````````````````````````
+M```!`````5*[%O]$I1'_.)$/_R]]#?\M?@O_,Y4-_SJI#_]$P1+_2;X3_TFT
+M%/\WDP__&5X'_VL?&?]_-BS_E#\V_YH\,_^F/3+_N$8\_\E.1/_97U'_UV=6
+M_\]G5__'74__O$U!_Q0+A?\D$I__)1.O_QP-K?\;#JK_(Q"[_RH5S?\W&^#_
+M0B#L_TTE^/]?,/[_>SW^_P````$````!````````````````````````````
+M`````````````````````````%*]%O]$IA'_.),/_R]_#?\M@`O_,Y4-_SJJ
+M$/]%PA+_2;\3_TFV%/\WE0__&5\'_VP?&?^!-BS_ED`V_YH],_^G/3/_N48\
+M_\I/1/_:8%'_V&A6_]%G5__*7E#_O4Y"_Q0+BO\D$J'_)A.R_QP-L/\<#JO_
+M)!&^_RL5T/\W'.+_0R'O_TXF^_]@,/__?#W__P``````````````````````
+M`````````````````````````````````````````%.^%O]$IQ'_.9,/_R^`
+M#?\M@0O_,Y8._SJK$/]%PA+_2L`3_TJV%/\WE@__&5\'_VP?&?^!-BS_ED`V
+M_YL]-/^G/C/_N4<\_\M/1?_:8E+_V6A6_])G5__+7E#_ODY"_Q4+B/\E$J/_
+M)A.T_QP.L?\<#ZW_)!'`_RL6TO\X'.3_1"'Q_T\F__]A,?__?3[__P``````
+M`````````````````````````````````````````````````````````%._
+M%O\[C0[_,'0-_REA"O\F7@G_*VD+_S%W#?\\D`__/9</_SZ7$/\O=0O_&E\'
+M_VT?&O]H+B;_>C<N_W@T+/]_-"W_F3TT_[)%//_(5$7_PU=+_[E82O^K447_
+MOT]#_Q4+BO\@$'3_(!&!_QD-9_\7#&#_'P]Y_R82E/\Q&;'_.QW&_T,AU?]4
+M*.__?S___P``````````````````````````````````````````````````
+M`````````````%2^%O\BN=K_'+#8_QFPW?\9QO+_'N3__R'Q__\A[O__)>3_
+M_RC@_/\>V/[_&F`'_VT>&O\>9)K_)7O!_R2&W?\FI?__+\G__S/;__\SV___
+M.M'__S_,__\]R?__P$]#_Q4+C?\02^C_$E'__PY)__\/5___%(#__Q6C__\9
+MH/__'ZK__R?%__\RYO__@D#__P``````````````````````````````````
+M`````````````````````````````%7!%O\SRL#_*,'*_R+#U_\CT>G_*.W_
+M_ROZ__\O]/__-NW[_SKG[_\MU\[_&F('_V\?&O\W:HO_.X>T_S>9U?\YL?7_
+M0=G__T?H__]0X?__6=O__V?3_O]JQ/'_P$]$_Q8,D_\:2]__&&'__Q5=__\3
+M9?__&Z[__Q[*__\FM?__+L/__SO0__]+WO__B$+__P``````````````````
+M`````````````````````````````````````````````%C%%_])LA/_/9X/
+M_S.)#O\PC`W_-Z$/_S^X$?]+SQ/_4,H5_T_!%O\[GQ#_&V8'_V\@&O^%."__
+MF$,X_YT^-/^I/S;_NTD]_\Q51__=9U?_VFM:_])K6__,8%+_O$Y!_Q8,E?\H
+M%;#_*A;"_Q\/O/\?$+__*1/2_S$8Y/]`'_C_3";__U4K__]J-?__B$/__P``
+M````````````````````````````````````````````````````````````
+M`&G+-/]9NBC_2JD>_SJ3%?\VEA'_/*D0_T2^%/]1TAG_5<\;_U;#(O]*IB3_
+M.'LH_X([./^+13[_ED@__YI`-_^C03;_M$D]_\552?_395?_TFU;_\UN7O_%
+M9UO_NUY5_T$WM/\_+[[_-B7#_R86N/\D%;W_*1/._S,:X?]$)??_4RW__V$[
+M__]\3?__FF+__P``````````````````````````````````````````````
+M`````````````````'&^5(APMU*P:ZM1RV:>3^9EHT_N:;5/_6S)4?USVE+N
+M=-52YF_&4\MEJE&P68].B)-95XB985VPH&5ARZ!E8.:J9F+NMFQF_<-S;/W0
+M>G+NS7USYL9Y<<N]<FRPLFIFB'1LW(AV;-^P<FG:RVUET.9M9M#N<F?D_7AI
+M]/V`;O_NB7/_YHYW_\N6?/^PFW__B```````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````/_______P``________``#_______\``/_______P``\``````?``#X
+M`````!\``/@`````'P``^``````?``#X`````!\``/@`````'P``^``````?
+M``#X`````!\``/@`````'P``^``````?``#X`````!\``/@`````'P``^```
+M```?``````````````````````````````````"```````$``(```````0``
+MP``````#``#```````,``,```````P``X``````'``#@``````<``.``````
+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
+M`&0`90!R``````!"`"%0`````$L`G`#$`!@`9@#__X4````````````!4```
+M```6`9L`/``.`&<`__^``$(`<@!O`"8`=P!S`&4`+@`N`"X`````````1`BA
+M4`````!+``D`"`&#`&@`4@!I`&,`:`!%`&0`:0!T`#(`,`!7````````````
+M$```0`````!+`*4`"@$!`&D`__^"`````````````E``````2P"L`,0`"`!K
+M`/__@@!)`&X`<P!T`&$`;`!L`&$`=`!I`&\`;@`@`'``<@!O`&<`<@!E`',`
+M<P```````0"`4`````!+`+8`"`$*`&H`;0!S`&,`=`!L`',`7P!P`'(`;P!G
+M`'(`90!S`',`,P`R````````````$```4````````,D`70$!`/____^"````
+M``````$``5``````OP#/`$8`#@`!`/__@`!)`&X`<P!T`&$`;`!L````````
+M``%0``````P!SP!&``X``@#__X``0P!A`&X`8P!E`&P``````````````,``
+MR)``````$0!N`#4`W@"M``````!#`&\`;@!F`&D`<@!M`"``9@!I`&P`90`@
+M`'(`90!P`&P`80!C`&4````(`$T`4P`@`%,`:`!E`&P`;``@`$0`;`!G`"``
+M,@````<``%``````!``"`-8`A0#_____@`````````````)0``````L`#`#'
+M``@`<@#__X(`5`!H`&4`(`!F`&\`;`!L`&\`=P!I`&X`9P`@`&8`:0!L`&4`
+M(`!A`&P`<@!E`&$`9`!Y`"``90!X`&D`<P!T`',```````0(@5``````"P`6
+M`,<`'@!E`/__@0````````````)0``````L`.0#'``@`<P#__X(`5P!O`'4`
+M;`!D`"``>0!O`'4`(`!L`&D`:P!E`"``=`!O`"``<@!E`'``;`!A`&,`90`@
+M`'0`:`!E`"``90!X`&D`<P!T`&D`;@!G`"``9@!I`&P`90```````P``4```
+M```;`$8`$@`4`&8`__^"`````````````E``````-@!'`)P`"`!H`/__@@``
+M``````````)0`````#8`40"<``@`:@#__X(````````````"4``````+`%\`
+MQP`(`'0`__^"`'<`:0!T`&@`(`!T`&@`:0!S`"``;P!N`&4`/P`````````#
+M``!0`````!L`;``2`!0`9P#__X(````````````"4``````V`&T`G``(`&D`
+M__^"`````````````E``````-@!W`)P`"`!K`/__@@`````````!``%0````
+M``\`C0!```T`;`#__X``)@!9`&4`<P````````````%0`````$\`C0!```T`
+M;P#__X``60!E`',`(`!T`&\`(``F`$$`;`!L``````````%0`````(\`C0!`
+M``T`;@#__X``)@!2`&4`;@!A`&T`90`````````!4``````/`)H`0``-`&T`
+M__^``"8`3@!O``````````%0`````$\`F@!```T`<`#__X``3@!O`"``=`!O
+M`"``00`F`&P`;`````````````%0`````(\`F@!```T`<0#__X``)@!#`&$`
+M;@!C`&4`;```````P`#(D``````'`&``4@">`%T``````%(`90!N`&$`;0!E
+M````"`!-`%,`(`!3`&@`90!L`&P`(`!$`&P`9P`@`#(```"``(%0``````8`
+M,0"1``P`:`#__X$``````````0`!4``````6`$H`,@`.``$`__^``$\`2P``
+M``````````%0`````%,`2@`R``X``@#__X``0P!A`&X`8P!E`&P`````````
+M```"4``````&``L`D0`(`&4`__^"`%(`90!N`&$`;0!E`"``9@!I`&P`90``
+M````@`B!4``````&`!8`D0`,`&8`__^!`````````````E``````!@`F`)$`
+M"`!G`/__@@!T`&\`````````!P``4``````#``(`F0!#`/____^`````````
+M`,`(R)``````!0`F`"X`MP!#``````!%`&X`=`!E`'(`(`!P`&$`<P!S`'<`
+M;P!R`&0````(`$T`4P`@`%,`:`!E`&P`;``@`$0`;`!G`"``,@```````E``
+M````!@`(`*H`"`!E`/__@@`F`$4`;@!T`&4`<@`@`'``80!S`',`=P!O`'(`
+M9``@`&8`;P!R`"``=`!H`&4`(`!E`&X`8P!R`'D`<`!T`&4`9``@`&8`:0!L
+M`&4`.@``````H`"!4``````&`!H`J@`,`&8`__^!``````````$``5``````
+M)``P`#(`#@`!`/__@`!/`$L````````````!4`````!@`#``,@`.``(`__^`
+M`$,`80!N`&,`90!L``````````"``E``````!@`0`*H`"`!G`/__@@``````
+M````````P`C*D``````%`!L`+P!;`>```````$P`:0!C`&4`;@!S`&4````(
+M`$T`4P`@`%,`:`!E`&P`;``@`$0`;`!G`"``,@``````#@@`4``````&``D`
+M/0"Z`&8`__^"`````````$0(`5``````2P`)``@!N@!E`/__@0`````````0
+M``!0````````R0!=`0$`_____X(``````````0`!4`````#3`,\`/``.``$`
+M__^``$$`8P!C`&4`<`!T`````````````5``````%@'/`#P`#@`"`/__@`!$
+M`&4`8P!L`&D`;@!E````````````P`#(D``````'`#L`2P#"`(L``````$X`
+M90!X`'0`(`!V`&\`;`!U`&T`90`@`&D`<P`@`'(`90!Q`'4`:0!R`&4`9```
+M``@`30!3`"``4P!H`&4`;`!L`"``1`!L`&<`(``R```````'``!0``````8`
+M!`"V`&L`_____X`````````````"4``````-`!``J``0`&4`__^"`%D`;P!U
+M`"``;@!E`&4`9``@`'0`;P`@`&@`80!V`&4`(`!T`&@`90`@`&8`;P!L`&P`
+M;P!W`&D`;@!G`"``=@!O`&P`=0!M`&4`(`!T`&\`(`!C`&\`;@!T`&D`;@!U
+M`&4`(`!E`'@`=`!R`&$`8P!T`&D`;P!N`#H``````(``@5``````#0`U`*@`
+M#`!F`/__@0````````````%0`````(,`)``R``X`9P#__X``)@!"`'(`;P!W
+M`',`90`N`"X`+@````````````)0``````T`4@"H`!@`:`#__X(`20!N`',`
+M90!R`'0`(`!A`"``9`!I`',`:P`@`'<`:0!T`&@`(`!T`&@`:0!S`"``=@!O
+M`&P`=0!M`&4`(`!A`&X`9``@`'``<@!E`',`<P`@`"(`3P!+`"(`(`!T`&\`
+M(`!T`'(`>0`@`&$`9P!A`&D`;@`@`&\`<@`@`'``<@!E`',`<P`@`"(`0P!A
+M`&X`8P!E`&P`(@`@`'0`;P`@`&(`<@!E`&$`:P`@`&4`>`!T`'(`80!C`'0`
+M:0!O`&X``````````0`!4``````J`'<`,@`.``$`__^``$\`2P``````````
+M``%0`````&8`=P`R``X``@#__X``0P!A`&X`8P!E`&P`````````/#]X;6P@
+M=F5R<VEO;CTB,2XP(B!E;F-O9&EN9STB551&+3@B('-T86YD86QO;F4](GEE
+M<R(_/@T*/&%S<V5M8FQY('AM;&YS/2)U<FXZ<V-H96UA<RUM:6-R;W-O9G0M
+M8V]M.F%S;2YV,2(@;6%N:69E<W1697)S:6]N/2(Q+C`B/@T*/&%S<V5M8FQY
+M261E;G1I='D-"B`@=F5R<VEO;CTB,2XP+C`N,"(-"B`@<')O8V5S<V]R07)C
+M:&ET96-T=7)E/2(J(@T*("!N86UE/2)7:6Y205(@4T98(@T*("!T>7!E/2)W
+M:6XS,B(O/@T*/&1E<V-R:7!T:6]N/E=I;E)!4B!31E@@;6]D=6QE/"]D97-C
+M<FEP=&EO;CX-"CQT<G5S=$EN9F\@>&UL;G,](G5R;CIS8VAE;6%S+6UI8W)O
+M<V]F="UC;VTZ87-M+G8R(CX-"B`@/'-E8W5R:71Y/@T*("`@(#QR97%U97-T
+M9610<FEV:6QE9V5S/@T*("`@("`@/')E<75E<W1E9$5X96-U=&EO;DQE=F5L
+M(&QE=F5L/2)A<TEN=F]K97(B("`@("`@("`@("`@#0H@("`@("!U:4%C8V5S
+M<STB9F%L<V4B+SX-"B`@("`\+W)E<75E<W1E9%!R:79I;&5G97,^#0H@(#PO
+M<V5C=7)I='D^#0H\+W1R=7-T26YF;SX-"CQD97!E;F1E;F-Y/@T*("`\9&5P
+M96YD96YT07-S96UB;'D^#0H@("`@/&%S<V5M8FQY261E;G1I='D-"B`@("`@
+M('1Y<&4](G=I;C,R(@T*("`@("`@;F%M93TB36EC<F]S;V9T+E=I;F1O=W,N
+M0V]M;6]N+4-O;G1R;VQS(@T*("`@("`@=F5R<VEO;CTB-BXP+C`N,"(-"B`@
+M("`@('!R;V-E<W-O<D%R8VAI=&5C='5R93TB*B(-"B`@("`@('!U8FQI8TME
+M>51O:V5N/2(V-3DU8C8T,30T8V-F,61F(@T*("`@("`@;&%N9W5A9V4](BHB
+M+SX-"B`@/"]D97!E;F1E;G1!<W-E;6)L>3X-"CPO9&5P96YD96YC>3X-"CQC
+M;VUP871I8FEL:71Y('AM;&YS/2)U<FXZ<V-H96UA<RUM:6-R;W-O9G0M8V]M
+M.F-O;7!A=&EB:6QI='DN=C$B/@T*("`\87!P;&EC871I;VX^#0H@("`@/"$M
+M+51H92!)1"!B96QO=R!I;F1I8V%T97,@87!P;&EC871I;VX@<W5P<&]R="!F
+M;W(@5VEN9&]W<R!6:7-T82`M+3X-"B`@("`@(#QS=7!P;W)T961/4R!)9#TB
+M>V4R,#$Q-#4W+3$U-#8M-#-C-2UA-69E+3`P.&1E964S9#-F,'TB+SX-"B`@
+M("`\(2TM5&AE($E$(&)E;&]W(&EN9&EC871E<R!A<'!L:6-A=&EO;B!S=7!P
+M;W)T(&9O<B!7:6YD;W=S(#<@+2T^#0H@("`@("`\<W5P<&]R=&5D3U,@260]
+M(GLS-3$S.&(Y82TU9#DV+31F8F0M.&4R9"UA,C0T,#(R-68Y,V%](B\^#0H@
+M("`@/"$M+51H92!)1"!B96QO=R!I;F1I8V%T97,@87!P;&EC871I;VX@<W5P
+M<&]R="!F;W(@5VEN9&]W<R`X("TM/@T*("`@("`@/'-U<'!O<G1E9$]3($ED
+M/2)[-&$R9C(X93,M-3-B.2TT-#0Q+6)A.6,M9#8Y9#1A-&$V93,X?2(O/@T*
+M("`@(#PA+2U4:&4@240@8F5L;W<@:6YD:6-A=&5S(&%P<&QI8V%T:6]N('-U
+M<'!O<G0@9F]R(%=I;F1O=W,@."XQ("TM/@T*("`@("`@/'-U<'!O<G1E9$]3
+M($ED/2)[,68V-S9C-S8M.#!E,2TT,C,Y+3DU8F(M.#-D,&8V9#!D83<X?2(O
+M/@T*("`@(#PA+2U4:&4@240@8F5L;W<@:6YD:6-A=&5S(&%P<&QI8V%T:6]N
+M('-U<'!O<G0@9F]R(%=I;F1O=W,@,3`@+2T^#0H@("`@("`\<W5P<&]R=&5D
+M3U,@260](GLX93!F-V$Q,BUB9F(S+31F93@M8CEA-2TT.&9D-3!A,35A.6%]
+M(B\^#0H@(#PO87!P;&EC871I;VX^#0H\+V-O;7!A=&EB:6QI='D^#0H\87-M
+M=C,Z87!P;&EC871I;VX@>&UL;G,Z87-M=C,](G5R;CIS8VAE;6%S+6UI8W)O
+M<V]F="UC;VTZ87-M+G8S(CX-"B`@/&%S;78S.G=I;F1O=W-3971T:6YG<R!X
+M;6QN<STB:'1T<#HO+W-C:&5M87,N;6EC<F]S;V9T+F-O;2]334DO,C`P-2]7
+M:6YD;W=S4V5T=&EN9W,B/@T*("`@(#QD<&E!=V%R93YT<G5E/"]D<&E!=V%R
+M93X-"B`@/"]A<VUV,SIW:6YD;W=S4V5T=&EN9W,^#0H\+V%S;78S.F%P<&QI
+M8V%T:6]N/@T*/"]A<W-E;6)L>3X-"@T*`````````````````!D`4P!E`&P`
+M90!C`'0`(`!D`&4`<P!T`&D`;@!A`'0`:0!O`&X`(`!F`&\`;`!D`&4`<@`-
+M`$4`>`!T`'(`80!C`'0`:0!N`&<`(``E`',`"P!3`&L`:0!P`'``:0!N`&<`
+M(``E`',`&0!5`&X`90!X`'``90!C`'0`90!D`"``90!N`&0`(`!O`&8`(`!A
+M`'(`8P!H`&D`=@!E`!\`5`!H`&4`(`!F`&D`;`!E`"``(@`E`',`(@`@`&@`
+M90!A`&0`90!R`"``:0!S`"``8P!O`'(`<@!U`'``=``7`$,`;P!R`'(`=0!P
+M`'0`(`!H`&4`80!D`&4`<@`@`&D`<P`@`&8`;P!U`&X`9``>`$T`80!I`&X`
+M(`!A`'(`8P!H`&D`=@!E`"``:`!E`&$`9`!E`'(`(`!I`',`(`!C`&\`<@!R
+M`'4`<`!T`````````"4`5`!H`&4`(`!A`'(`8P!H`&D`=@!E`"``8P!O`&T`
+M;0!E`&X`=``@`&@`90!A`&0`90!R`"``:0!S`"``8P!O`'(`<@!U`'``=``>
+M`%0`:`!E`"``80!R`&,`:`!I`'8`90`@`&,`;P!M`&T`90!N`'0`(`!I`',`
+M(`!C`&\`<@!R`'4`<`!T`````````!$`3@!O`'0`(`!E`&X`;P!U`&<`:``@
+M`&T`90!M`&\`<@!Y`!0`50!N`&L`;@!O`'<`;@`@`&T`90!T`&@`;P!D`"``
+M:0!N`"``)0!S``X`0P!A`&X`;@!O`'0`(`!O`'``90!N`"``)0!S````````
+M```````0`$,`80!N`&X`;P!T`"``8P!R`&4`80!T`&4`(``E`',`%P!#`&$`
+M;@!N`&\`=``@`&,`<@!E`&$`=`!E`"``9@!O`&P`9`!E`'(`(``E`',`2`!#
+M`&@`90!C`&L`<P!U`&T`(`!E`'(`<@!O`'(`(`!I`&X`(`!T`&@`90`@`&4`
+M;@!C`'(`>0!P`'0`90!D`"``9@!I`&P`90`@`"4`<P`N`"``0P!O`'(`<@!U
+M`'``=``@`&8`:0!L`&4`(`!O`'(`(`!W`'(`;P!N`&<`(`!P`&$`<P!S`'<`
+M;P!R`&0`+@`4`$,`:`!E`&,`:P!S`'4`;0`@`&4`<@!R`&\`<@`@`&D`;@`@
+M`"4`<P`@`%``80!C`&L`90!D`"``9`!A`'0`80`@`&,`:`!E`&,`:P!S`'4`
+M;0`@`&4`<@!R`&\`<@`@`&D`;@`@`"4`<P``````````````````````&@!7
+M`'(`:0!T`&4`(`!E`'(`<@!O`'(`(`!I`&X`(`!T`&@`90`@`&8`:0!L`&4`
+M(``E`',`&0!2`&4`80!D`"``90!R`'(`;P!R`"``:0!N`"``=`!H`&4`(`!F
+M`&D`;`!E`"``)0!S`!``1@!I`&P`90`@`&,`;`!O`',`90`@`&4`<@!R`&\`
+M<@`=`%0`:`!E`"``<@!E`'$`=0!I`'(`90!D`"``=@!O`&P`=0!M`&4`(`!I
+M`',`(`!A`&(`<P!E`&X`=```````````````,@!4`&@`90`@`&$`<@!C`&@`
+M:0!V`&4`(`!I`',`(`!E`&D`=`!H`&4`<@`@`&D`;@`@`'4`;@!K`&X`;P!W
+M`&X`(`!F`&\`<@!M`&$`=``@`&\`<@`@`&0`80!M`&$`9P!E`&0`$@!%`'@`
+M=`!R`&$`8P!T`&D`;@!G`"``9@!R`&\`;0`@`"4`<P`+`$X`90!X`'0`(`!V
+M`&\`;`!U`&T`90`=`%0`:`!E`"``80!R`&,`:`!I`'8`90`@`&@`90!A`&0`
+M90!R`"``:0!S`"``8P!O`'(`<@!U`'``=``%`$,`;`!O`',`90``````````
+M````!0!%`'(`<@!O`'(`80!%`'(`<@!O`'(`<P`@`&4`;@!C`&\`=0!N`'0`
+M90!R`&4`9``@`'<`:`!I`&P`90`@`'``90!R`&8`;P!R`&T`:0!N`&<`(`!T
+M`&@`90`@`&\`<`!E`'(`80!T`&D`;P!N``H`3`!O`&\`:P`@`&$`=``@`'0`
+M:`!E`"``:0!N`&8`;P!R`&T`80!T`&D`;P!N`"``=P!I`&X`9`!O`'<`(`!F
+M`&\`<@`@`&T`;P!R`&4`(`!D`&4`=`!A`&D`;`!S``4`8@!Y`'0`90!S``L`
+M;0!O`&0`:0!F`&D`90!D`"``;P!N`!@`9@!O`&P`9`!E`'(`(`!I`',`(`!N
+M`&\`=``@`&$`8P!C`&4`<P!S`&D`8@!L`&4`````````````````;`!3`&\`
+M;0!E`"``9@!I`&P`90!S`"``8P!O`'4`;`!D`"``;@!O`'0`(`!B`&4`(`!C
+M`'(`90!A`'0`90!D`"X`"@!0`&P`90!A`',`90`@`&,`;`!O`',`90`@`&$`
+M;`!L`"``80!P`'``;`!I`&,`80!T`&D`;P!N`',`+``@`'(`90!B`&\`;P!T
+M`"``5P!I`&X`9`!O`'<`<P`@`&$`;@!D`"``<@!E`',`=`!A`'(`=``@`'0`
+M:`!I`',`(`!I`&X`<P!T`&$`;`!L`&$`=`!I`&\`;@!<`%,`;P!M`&4`(`!I
+M`&X`<P!T`&$`;`!L`&$`=`!I`&\`;@`@`&8`:0!L`&4`<P`@`&$`<@!E`"``
+M8P!O`'(`<@!U`'``=``N``H`4`!L`&4`80!S`&4`(`!D`&\`=P!N`&P`;P!A
+M`&0`(`!A`"``9@!R`&4`<P!H`"``8P!O`'``>0`@`&$`;@!D`"``<@!E`'0`
+M<@!Y`"``=`!H`&4`(`!I`&X`<P!T`&$`;`!L`&$`=`!I`&\`;@`)`$$`;`!L
+M`"``9@!I`&P`90!S````````````````````10`\`'4`;``^`#P`;`!I`#X`
+M4`!R`&4`<P!S`"``/`!B`#X`20!N`',`=`!A`&P`;``\`"\`8@`^`"``8@!U
+M`'0`=`!O`&X`(`!T`&\`(`!S`'0`80!R`'0`(`!E`'@`=`!R`&$`8P!T`&D`
+M;P!N`"X`/``O`&P`:0`^`#P`8@!R`#X`/`!B`'(`/@!%`#P`=0!L`#X`/`!L
+M`&D`/@!0`'(`90!S`',`(``\`&(`/@!%`'@`=`!R`&$`8P!T`#P`+P!B`#X`
+M(`!B`'4`=`!T`&\`;@`@`'0`;P`@`',`=`!A`'(`=``@`&4`>`!T`'(`80!C
+M`'0`:0!O`&X`+@`\`"\`;`!I`#X`/`!B`'(`/@`\`&(`<@`^`#8`/`!L`&D`
+M/@!5`',`90`@`#P`8@`^`$(`<@!O`'<`<P!E`#P`+P!B`#X`(`!B`'4`=`!T
+M`&\`;@`@`'0`;P`@`',`90!L`&4`8P!T`"``=`!H`&4`(`!D`&4`<P!T`&D`
+M;@!A`'0`:0!O`&X`-`!F`&\`;`!D`&4`<@`@`&8`<@!O`&T`(`!T`&@`90`@
+M`&8`;P!L`&0`90!R`',`(`!T`'(`90!E`"X`(`!)`'0`(`!C`&$`;@`@`&(`
+M90`@`&$`;`!S`&\`(`!E`&X`=`!E`'(`90!D`!8`;0!A`&X`=0!A`&P`;`!Y
+M`"X`/``O`&P`:0`^`#P`8@!R`#X`/`!B`'(`/@`X`#P`;`!I`#X`20!F`"``
+M=`!H`&4`(`!D`&4`<P!T`&D`;@!A`'0`:0!O`&X`(`!F`&\`;`!D`&4`<@`@
+M`&0`;P!E`',`(`!N`&\`=``@`&4`>`!I`',`=``L`"``:0!T`"``=P!I`&P`
+M;``@`&(`90```#(`8P!R`&4`80!T`&4`9``@`&$`=0!T`&\`;0!A`'0`:0!C
+M`&$`;`!L`'D`(`!B`&4`9@!O`'(`90`@`&4`>`!T`'(`80!C`'0`:0!O`&X`
+M+@`\`"\`;`!I`#X`/``O`'4`;``^`````````!8`5`!H`&4`(`!A`'(`8P!H
+M`&D`=@!E`"``:0!S`"``8P!O`'(`<@!U`'``=````````````!T`10!X`'0`
+M<@!A`&,`=`!I`&X`9P`@`&8`:0!L`&4`<P`@`'0`;P`@`"4`<P`@`&8`;P!L
+M`&0`90!R`"0`10!X`'0`<@!A`&,`=`!I`&X`9P`@`&8`:0!L`&4`<P`@`'0`
+M;P`@`'0`90!M`'``;P!R`&$`<@!Y`"``9@!O`&P`9`!E`'(`````````!P!%
+M`'@`=`!R`&$`8P!T`!,`10!X`'0`<@!A`&,`=`!I`&\`;@`@`'``<@!O`&<`
+M<@!E`',`<P```````````#T`5`!O`'0`80!L`"``<`!A`'0`:``@`&$`;@!D
+M`"``9@!I`&P`90`@`&X`80!M`&4`(`!L`&4`;@!G`'0`:``@`&T`=0!S`'0`
+M(`!N`&\`=``@`&4`>`!C`&4`90!D`"``)0!D`"``8P!H`&$`<@!A`&,`=`!E
+M`'(`<P```````````!\`50!N`&L`;@!O`'<`;@`@`&4`;@!C`'(`>0!P`'0`
+M:0!O`&X`(`!M`&4`=`!H`&\`9``@`&D`;@`@`"4`<P`D`%0`:`!E`"``<P!P
+M`&4`8P!I`&8`:0!E`&0`(`!P`&$`<P!S`'<`;P!R`&0`(`!I`',`(`!I`&X`
+M8P!O`'(`<@!E`&,`=``N`!D`20!N`&,`;P!R`'(`90!C`'0`(`!P`&$`<P!S
+M`'<`;P!R`&0`(`!F`&\`<@`@`"4`<P```````````````````````````!4`
+M0P!A`&X`;@!O`'0`(`!C`&\`<`!Y`"``)0!S`"``=`!O`"``)0!S`"X`````
+M````````````````````'@!#`&$`;@!N`&\`=``@`&,`<@!E`&$`=`!E`"``
+M<P!Y`&T`8@!O`&P`:0!C`"``;`!I`&X`:P`@`"4`<P`:`$,`80!N`&X`;P!T
+M`"``8P!R`&4`80!T`&4`(`!H`&$`<@!D`"``;`!I`&X`:P`@`"4`<P`H`%D`
+M;P!U`"``;@!E`&4`9``@`'0`;P`@`'4`;@!P`&$`8P!K`"``=`!H`&4`(`!L
+M`&D`;@!K`"``=`!A`'(`9P!E`'0`(`!F`&D`<@!S`'0``````````````$$`
+M60!O`'4`(`!M`&$`>0`@`&X`90!E`&0`(`!T`&\`(`!R`'4`;@`@`'0`:`!I
+M`',`(`!S`&4`;`!F`"T`90!X`'0`<@!A`&,`=`!I`&X`9P`@`&$`<@!C`&@`
+M:0!V`&4`(`!A`',`(`!A`&0`;0!I`&X`:0!S`'0`<@!A`'0`;P!R````````
+M````!0!0`&$`=0!S`&4`"`!#`&\`;@!T`&D`;@!U`&4`````````````````
+M```````````0`%,`90!C`'4`<@!I`'0`>0`@`'<`80!R`&X`:0!N`&<`2P!0
+M`&P`90!A`',`90`@`'(`90!M`&\`=@!E`"``)0!S`"``9@!R`&\`;0`@`&8`
+M;P!L`&0`90!R`"``)0!S`"X`(`!)`'0`(`!I`',`(`!U`&X`<P!E`&,`=0!R
+M`&4`(`!T`&\`(`!R`'4`;@`@`"4`<P`@`'4`;@!T`&D`;``@`&D`=``@`&D`
+M<P`@`&0`;P!N`&4`+@``````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````$```D`````$P$3`A,"LP03!6,&$P<3![,)$PFS"Q,+LPT3#;,(XQPS'W
+M,?\Q"S(E,BTR4#**,I\RLS+8,M\R_3($,R$S03-1,V`S9S-Q,Z,SOC.2-<XU
+M%39?-@XW'3?%-]0WJ3C8.!$Y&SF..;4YQSGX.3DZ3CIU.I$Z&CL^.Y<[D3QV
+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
+M.?`Y%#H@.B@Z5#I8.F`Z:#IP.G0Z?#J0.K`ZS#K0.O`Z^#K\.A@[.#M8.W@[
+MF#NX.]@[^#L8/#@\6#QX/)@\N#S8//@\!#T</2`]0#U@/8`]H#V\/<`]`.`#
+M`#P!``"`,%@Q9#%P,7PQB#&4,:`QK#&X,<0QT#'<,>@Q]#$`,@PR&#(D,C`R
+M/#)(,E0R8#)L,G@RA#*0,IPRJ#*T,L`RS#+8,N0R\#+\,@@S%#,@,RPS.#-$
+M,U`S7#-H,W0S@#.,,Y@SI#.P,[PSR#/4,^`S[#/X,P0T$#0<-"@T-#1`-$PT
+M6#1D-'`T?#2(-)0TH#2L-+@TQ#30--PTZ#3T-``U##48-20U,#4\-4@U5#5@
+M-6PU>#6$-9`UG#6H-;0UP#7,-=@UY#7P-?@U##88-APV(#8D-B@V+#8P-C0V
+M.#8\-D`V1#9(-DPV6#>(-Y@WJ#>X-\@WX#?L-_`W]#<0.!0X'#A`/5`]5#U8
+M/5P]8#UD/6@];#UP/70]@#V$/8@]C#V0/90]F#V</=`]Z#T$/B`^.#Y@/@`@
+M!@#``````#`$,`@P##`0,!0P&#`<,"`P)#`H,"PP-#`\,$`P1#!,,%`P5#!8
+M,%PP8#!D,&@P;#!T,'@P?#"`,(0PB#",,)`PF#"@,*0PJ#"L,+`PM#"X,+PP
+MP##$,,@PS##0,-0PV##<,.`PY##H,.PP\##T,/@P_#``,00Q"#$,,1`Q%#$8
+M,1PQ(#$D,2@Q+#$P,30Q.#$\,4`Q1#%(,4PQ4#%4,5@Q7#%@,60Q:#%L,70Q
+M>#%\,8`QA#$`````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````````````!287(A&@<!
+M`#.2M>4*`04&``4!`8"``/4["1PH`@,+@P`$@P`@TF-(B(````QT97-T+G1X
+;="YT>'0*`P),FW]/_;C7`3$R,QUW5E$#!00`
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_stored.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_stored.rar.uu
index 405b8795a162..afd565ff97d4 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar5_stored.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_stored.rar.uu
@@ -1,4 +1,4 @@
-begin 644 rar5_stored.rar
+begin 644 test_read_format_rar5_stored.rar
M4F%R(1H'`0`SDK7E"@$%!@`%`0&`@``X,`9C+`(#"YT`!)T`I(,"M$.@E8``
M`0YH96QL;W=O<FQD+G1X=`H#$WX.JUM6Z0X::&5L;&\@;&EB87)C:&EV92!T
397-T('-U:71E(0H==U91`P4$````
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_unicode.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_unicode.rar.uu
new file mode 100644
index 000000000000..e011ab64e689
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_unicode.rar.uu
@@ -0,0 +1,9 @@
+begin 0744 test_read_format_rar5_unicode.rar
+M4F%R(1H'`0#SX8+K"P$%!P`&`0&`@(``//TR$"@"`PN-``2-`"#FQN;K@```
+M#/"?D8OPGXR.+G1X=`H#`D:)>%;RZ]D!2&5L;&\L('=O<FQD(2/9BPA(`@,<
+M``0-(`````"````=XI*]XI.0XI.AXI.3(.*3@>*3F.*3G>*3FBYT>'0*`P)&
+MB7A6\NO9`1`%!``,\)^1B_"?C(XN='ATD-'.1V$"`QP`!`"@"`````"````U
+M\)V2KO"=DX[PG9."\)V2M_"=D9SPG9.!\)V2OO"=DK@@\)V0O_"=DK[PG9.#
+L\)V3@"YT>'0*`P(>7'J>!.S9`1`%`@`,\)^1B_"?C(XN='AT'7=640,%!```
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_window_buf_and_size_desync.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_window_buf_and_size_desync.rar.uu
new file mode 100644
index 000000000000..9e7d20ff62ef
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_window_buf_and_size_desync.rar.uu
@@ -0,0 +1,11 @@
+begin 644 test_read_format_rar5_window_buf_and_size_desync.rar
+M4F%R(1H'`0`]/-[E`@$`_P$`1#[Z5P("`PL``BXB"?\`!(@B@0`)6.-AF?_1
+M^0DI&0GG(F%R(0<:)`!3@"KT`P+G(@O_X[\``#&``(?!!0$$[:L``$.M*E)A
+M<B$`O<\>P0";/P1%``A*2DI*2DYQ<6TN9'%*2DI*2DI*``!D<F--``````"Z
+MNC*ZNKJZNFYO=&%I;+JZNKJZNKJZOKJZ.KJZNKJZNKKZU@4%````0$!`0$!`
+M0$!`0$!`0$!`0$#_________/T#`0$!`0$!`-UM`0$!`0$!`0$!`0$!`0$!`
+M0$!`0'!,J+:O!IZ-WN4'@`!3*F0`````````````````````````````````
+M``````````````#T`P)287(A&@<!`%.`*O0#`N<B`_,F@`'[__\``(`4`01S
+J'`/H/O\H@?\D`#O9GIZ>GN<B"_]%``(``&1RGIZ>GIZ>8_^>GE/_``!.
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_binary_data.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar_binary_data.rar.uu
index 4d1cbd36d633..712dd0e67879 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar_binary_data.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_binary_data.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_format_rar_binary_data.rar
M4F%R(1H'`,^0<P``#0````````!W#G2@D#D`E`H0````$``#OES$M0V6!S\=
M-0\`I($``')A;F1O;5]D871A+F)I;H#,#98'/Q*6!S\1#\T0T54`#0Z16Z5B
MZ6W>FQ_"3YH!RD,Z.<P&4ZSGQ+1(6^9/\HXB^LD*'EY-":6Y)MO'@@4>_X"C
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_compress_best.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar_compress_best.rar.uu
index 22fde0f8b673..d31adcc92b00 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar_compress_best.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_compress_best.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_format_rar_compress_best.rar
M4F%R(1H'`,^0<P``#0````````"/6W0@D$,`\A8``(].```#8Z8%7C:SVCX=
M-1D`I($``$QI8F%R8VAI=F5!9&1I;F=497-T+FAT;6R`S#:SVC[E:?8^IQ@[
MY,&O-%WTZIVL0'K=[L^M$"SZ*I?&B@$S2EO?UM\%P_[#*[0L[1)9)\]U]*;T
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_compress_normal.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar_compress_normal.rar.uu
index afc6cc08db11..2cce0e14c239 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar_compress_normal.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_compress_normal.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_format_rar_compress_normal.rar
M4F%R(1H'`,^0<P``#0````````!.!G0@D$,`LQL``(].```#8Z8%7C:SVCX=
M,QD`I($``$QI8F%R8VAI=F5!9&1I;F=497-T+FAT;6R`S#:SVCZ4:NT^#!U1
M#,S1%\6=F]T/PH[-`V-[U)/P29F;F3P#KD;FQC9X>MJ;G<[Z6"DBFSK*16$E
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_encryption_data.c b/contrib/libarchive/libarchive/test/test_read_format_rar_encryption_data.c
index d0c06fb21499..540546a8dd8a 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar_encryption_data.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_encryption_data.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_read_format_rar_encryption_data)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_encryption_header.c b/contrib/libarchive/libarchive/test/test_read_format_rar_encryption_header.c
index 81965eb6787f..e54db5152383 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar_encryption_header.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_encryption_header.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_read_format_rar_encryption_header)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_encryption_partially.c b/contrib/libarchive/libarchive/test/test_read_format_rar_encryption_partially.c
index 81256a96a019..e68e78831b37 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar_encryption_partially.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_encryption_partially.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_read_format_rar_encryption_partially)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_filter.c b/contrib/libarchive/libarchive/test/test_read_format_rar_filter.c
new file mode 100644
index 000000000000..43619253e4ac
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_filter.c
@@ -0,0 +1,56 @@
+/*-
+ * Copyright (c) 2003-2021 Wei-Cheng Pan
+ * 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_rar_filter)
+{
+ const char *refname = "test_read_format_rar_filter.rar";
+ struct archive *a;
+ struct archive_entry *ae;
+ char *buff[12];
+ const char signature[12] = {
+ 0x4d, 0x5a, 0x90, 0x00,
+ 0x03, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00,
+ };
+
+ extract_reference_file(refname);
+ 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_filename(a, refname, 10240));
+
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("bsdcat.exe", archive_entry_pathname(ae));
+ assertA((int)archive_entry_mtime(ae));
+ assertEqualInt(204288, archive_entry_size(ae));
+ assertA(12 == archive_read_data(a, buff, 12));
+ assertEqualMem(buff, signature, 12);
+
+ assertA(1 == archive_read_next_header(a, &ae));
+ assertEqualInt(1, archive_file_count(a));
+ 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_rar_filter.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar_filter.rar.uu
new file mode 100644
index 000000000000..fe08c6dd87e6
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_filter.rar.uu
@@ -0,0 +1,2099 @@
+begin 664 test_read_format_rar_filter.rar
+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
+:72R]434OO)=-+STN,1U\CTC_TL0]>P!`!P``
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_invalid1.c b/contrib/libarchive/libarchive/test/test_read_format_rar_invalid1.c
index 61dea1648f48..cac58688ce21 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar_invalid1.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_invalid1.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_read_format_rar_invalid1)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_multi_lzss_blocks.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar_multi_lzss_blocks.rar.uu
index dd6ab50f97cd..e717b00fd8ec 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar_multi_lzss_blocks.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_multi_lzss_blocks.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_format_rar_multi_lzss_blocks.rar
M4F%R(1H'`,^0<P``#0````````"5L73`D$0`(TT``"<M,P$#<!6B:RZ@[CX=
M,QH`I($``&UU;'1I7VQZ<W-?8FQO8VMS7W1E<W0N='ATP,PNH.X^+:#N/@W!
ME1$,S1$`%=F]SKX56/`,:6:25T-W=Y;Z1J;2>M#'TZD7E[>^E"B3)2K$2:-U
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0001.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0001.rar.uu
index 7378a9b558e8..bbe4be4c9070 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0001.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0001.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_format_rar_multivolume.part0001.rar
M4F%R(1H'`%IN<Q$!#0`````````SE'3"D$<`\>D``&I!9PX#@*>#,/AM$C\=
M-1T`I($``'!P;61?;'IS<U]C;VYV97)S:6]N7W1E<W0N='ATP,SX;1(_P&X2
M/Z<8.^3!KS1=].J=K$!ZW>[/K1`L^BJ7QHH!,TI;W];?!</^PRNT+.T262?/
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0002.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0002.rar.uu
index 696ff565bdfd..a61a2fbc7312 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0002.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0002.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_format_rar_multivolume.part0002.rar
M4F%R(1H'`!EZ<Q$`#0````````#NWW3#D$<`\>D``&I!9PX#%Y:4IOAM$C\=
M-1T`I($``'!P;61?;'IS<U]C;VYV97)S:6]N7W1E<W0N='ATP,SX;1(_P&X2
M/___________________________________________________________
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0003.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0003.rar.uu
index 91b7f28c5968..ef70b9eba606 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0003.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0003.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_format_rar_multivolume.part0003.rar
M4F%R(1H'`!EZ<Q$`#0````````#U+'3!D$<`^-T``&I!9PX#=T0K]_AM$C\=
M-1T`I($``'!P;61?;'IS<U]C;VYV97)S:6]N7W1E<W0N='ATP,SX;1(_P&X2
M/QOK1E#^H^/%2CSU*]SFZB-O0P7.9&(^"2;U+Z.1_C%^3WOV,>5:-FN$2BNW
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0004.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0004.rar.uu
index 0bfad779e1bd..20931f62c585 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0004.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_multivolume.part0004.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_format_rar_multivolume.part0004.rar
M4F%R(1H'`!EZ<Q$`#0````````!AIG3!D$,`/`L``(].```#8Z8%7L"!$C\=
M-1D`I($``$QI8F%R8VAI=F5!9&1I;F=497-T+FAT;6S`S,"!$C_!@1(_'H$B
MVRP\K;>5J2C]?9NI\:;KW2+#TR@_Y5=4S)O&)O_B>J0/A0T-,@"ER';1YX:$
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_noeof.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar_noeof.rar.uu
index 7cf88e7c6248..fd2d0d3a12bb 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar_noeof.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_noeof.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_format_rar_noeof.rar
M4F%R(1H'`,^0<P``#0````````"$4G0@D#(`%````!0````#0J+(OK=VVCX4
M,`@`I($``'1E<W0N='AT@`BW=MH^MW;:/G1E<W0@=&5X="!D;V-U;65N=`T*
`
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_ppmd_lzss_conversion.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar_ppmd_lzss_conversion.rar.uu
index a41b007a0d23..472654259bb2 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar_ppmd_lzss_conversion.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_ppmd_lzss_conversion.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_format_rar_ppmd_lzss_conversion.rar
M4F%R(1H'`,^0<P``#0````````!R,W3`D$<`VK$"`&I!9PX#=T0K]VL`!S\=
M-1T`I($``'!P;61?;'IS<U]C;VYV97)S:6]N7W1E<W0N='ATP,B$``<_&[\&
M/Z<8.^3!KS1=].J=K$!ZW>[/K1`L^BJ7QHH!,TI;W];?!</^PRNT+.T262?/
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_sfx.exe.uu b/contrib/libarchive/libarchive/test/test_read_format_rar_sfx.exe.uu
index ea084ecacb76..275d0749687a 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar_sfx.exe.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_sfx.exe.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_format_rar_sfx.exe
M35J0``,````$````__\``+@`````````0```````````````````````````
M````````````````````Z`````X?N@X`M`G-(;@!3,TA5&AI<R!P<F]G<F%M
M(&-A;FYO="!B92!R=6X@:6X@1$]3(&UO9&4N#0T*)`````````#3[14&EXQ[
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_subblock.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar_subblock.rar.uu
index 5c55ca11dd2a..8bd8e6038a8f 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar_subblock.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_subblock.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_format_rar_subblock.rar
M4F%R(1H'`,^0<P``#0`````````##'H`@",`(@```!T````#&WQ`G@`````=
M,P,``````$--5`@!"+Z0\5[-83@7PT#<+OM\M_$>H5JAD)Q_9XLAN3)VO("$
M4G0@D#(`%````!0````#0J+(OK=VVCX4,`@`I($``'1E<W0N='AT@`BW=MH^
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_windows.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar_windows.rar.uu
index 05fa8db85846..daaa32b25ef1 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar_windows.rar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_windows.rar.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_format_rar_windows.rar
M4F%R(1H'`,^0<P``#0````````"6GW0@D$,`$````!`````"\1+6EVQA$C\4
M,!``(````'1E<W1D:7)<=&5S="YT>'3POU/A"W5A$C_#FG]U81(_PYI_=&5S
M="!T97AT(&9I;&4-"D."=""0.P`0````$`````+Q$M:7;&$2/Q0P"``@````
diff --git a/contrib/libarchive/libarchive/test/test_read_format_raw.bufr.uu b/contrib/libarchive/libarchive/test/test_read_format_raw.bufr.uu
index 2f4cef74619f..896e09c8fd6b 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_raw.bufr.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_raw.bufr.uu
@@ -1,4 +1,4 @@
-begin 660 test_read_format_raw.bufr.uu
+begin 660 test_read_format_raw.bufr
M,#`P-S0T.3@P,`$-#0HP,#`-#0I)15%8,#$@155-4"`P-S`U,#`-#0I"5492
M`2+?!```%@``_@`````#_]T0``?@"P<$.P````D``'C`Z`@!(K0``,``_@!N
M@#T!^`"P!P"!`````"JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ@#=]]]]]
diff --git a/contrib/libarchive/libarchive/test/test_read_format_raw.c b/contrib/libarchive/libarchive/test/test_read_format_raw.c
index 58a341c02226..a0f68e5b880f 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_raw.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_raw.c
@@ -26,7 +26,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_read_format_raw)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_format_raw.data.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_raw.data.Z.uu
index 82add2ff1aca..3fe4deaba09d 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_raw.data.Z.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_raw.data.Z.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_read_format_raw.data.Z
('YV09MZ\40``
`
diff --git a/contrib/libarchive/libarchive/test/test_read_format_raw.data.uu b/contrib/libarchive/libarchive/test/test_read_format_raw.data.uu
index 1a3002a56d8a..7c68a2caa117 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_raw.data.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_raw.data.uu
@@ -1,4 +1,3 @@
-$FreeBSD$
begin 644 test_read_format_raw.data
$9F]O"@``
`
diff --git a/contrib/libarchive/libarchive/test/test_read_format_tar.c b/contrib/libarchive/libarchive/test/test_read_format_tar.c
index 55b33481aedc..2b7cd8dedcca 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_tar.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_tar.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Each of these archives is a short archive with a single entry. The
diff --git a/contrib/libarchive/libarchive/test/test_read_format_tar_concatenated.c b/contrib/libarchive/libarchive/test/test_read_format_tar_concatenated.c
index d1f67e20f7df..f6ed03a4404b 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_tar_concatenated.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_tar_concatenated.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
/*
* The sample tar file is the result of concatenating two tar files,
diff --git a/contrib/libarchive/libarchive/test/test_read_format_tar_empty_filename.c b/contrib/libarchive/libarchive/test/test_read_format_tar_empty_filename.c
index dfbae59070bb..310d260bb4d6 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_tar_empty_filename.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_tar_empty_filename.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Tar entries with empty filenames are unusual, but shouldn't crash us.
diff --git a/contrib/libarchive/libarchive/test/test_read_format_tar_empty_filename.tar.uu b/contrib/libarchive/libarchive/test/test_read_format_tar_empty_filename.tar.uu
index 08aaf2870719..6cd9629278ae 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_tar_empty_filename.tar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_tar_empty_filename.tar.uu
@@ -1,5 +1,4 @@
-$FreeBSD$
-begin 644 test_compat_tar_1.tar
+begin 644 test_read_format_tar_empty_filename.tar
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````#`P,#<W-2``,#`Q-S4P(``P,#`P,#`@`#`P,#`P,#`P,#`P
diff --git a/contrib/libarchive/libarchive/test/test_read_format_tar_empty_pax.c b/contrib/libarchive/libarchive/test/test_read_format_tar_empty_pax.c
index 5416021947e0..3de9c6719c63 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_tar_empty_pax.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_tar_empty_pax.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* A "usual" empty tar archive contains only zero bytes
diff --git a/contrib/libarchive/libarchive/test/test_read_format_tar_empty_pax.tar.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_tar_empty_pax.tar.Z.uu
index 2557b3f9f02a..0b2d53b69f77 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_tar_empty_pax.tar.Z.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_tar_empty_pax.tar.Z.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_tar_empty.tar.Z
+begin 644 test_read_format_tar_empty_pax.tar.Z
M'YV0<,+@^7*&S1LQ8=A\05,F#)DR<@!(G$BQHL6+&#-JW,BQ(HR/,&R(!`"R
M),F2'T^B_&B#!H`8,F+,B$%C1@V9,D[2K`&C!H`S'8,*'4JTZ,4Z<^B$B?A1
MSILW=(QF=`I5*L:5,%2:M,JUJ]>O8,'6D`%BS)LV;<JXH=.#3)BW-W#D,!-F
diff --git a/contrib/libarchive/libarchive/test/test_read_format_tar_empty_with_gnulabel.c b/contrib/libarchive/libarchive/test/test_read_format_tar_empty_with_gnulabel.c
index 83f20bb97115..3ff5b318d51a 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_tar_empty_with_gnulabel.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_tar_empty_with_gnulabel.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Tar archives with with just a GNU label (or ending with one) should
diff --git a/contrib/libarchive/libarchive/test/test_read_format_tar_filename.c b/contrib/libarchive/libarchive/test/test_read_format_tar_filename.c
index 9ee8e813f737..5da94967ddf8 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_tar_filename.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_tar_filename.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
#include <locale.h>
diff --git a/contrib/libarchive/libarchive/test/test_read_format_tar_invalid_pax_size.c b/contrib/libarchive/libarchive/test/test_read_format_tar_invalid_pax_size.c
new file mode 100644
index 000000000000..64b5a7cc4b8d
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_tar_invalid_pax_size.c
@@ -0,0 +1,52 @@
+/*-
+ * Copyright (c) 2020 Ben Wagner
+ * 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"
+
+/*
+ * The pax size attribute can be used to override the size.
+ * It should be validated the same way the normal size is validated.
+ * The test data is fuzzer output from
+ * https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=48467 .
+ */
+DEFINE_TEST(test_read_format_tar_invalid_pax_size)
+{
+ /*
+ * An archive that contains a PAX 'size' record with a large negative value.
+ */
+ struct archive_entry *ae;
+ struct archive *a;
+ const char *refname = "test_read_format_tar_invalid_pax_size.tar";
+
+ extract_reference_file(refname);
+ assert((a = archive_read_new()) != NULL);
+ assertEqualInt(ARCHIVE_OK, archive_read_support_filter_all(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_support_format_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 10240));
+ /* This assert will pass a normal debug build without the pax size check. */
+ /* Run this test with `-fsanitize=undefined` to verify. */
+ assertEqualIntA(a, ARCHIVE_FATAL, archive_read_next_header(a, &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_tar_invalid_pax_size.tar.uu b/contrib/libarchive/libarchive/test/test_read_format_tar_invalid_pax_size.tar.uu
new file mode 100644
index 000000000000..3fa9a2e0ef62
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_tar_invalid_pax_size.tar.uu
@@ -0,0 +1,38 @@
+begin 644 test_read_format_tar_invalid_pax_size.tar
+M+B]087A(96%D97)S+C$T-#8S+V%A80``````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````#`P,#`V-#0`,#`P,#`P,``P,#`P,#`P`#`P,#`P,#`P,S$R
+M`#$R-3,Q,30U,S<Q`"`Q,30R,"`@>```````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````!U='-A<@`P,```````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````````S,"`@("`@(#T@("`@("`@("`@("`@("`@("`@
+M(`HS,"`@("`@(#T@("`@("`@("`@("`@("`@("`@(`HS,"`@("`@("`]("`@
+M("`@("`@("`@("`@("`@(`HS,"!S:7IE/2TQ.3<V.30Q,3$Q,S8U.3<R-S0S
+M-@H@("`@("`@("`@_R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@____("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(&%A80``````````
+M````````````````````````````````````````````````````````````
+M```````````````````````````````````````````````````````````P
+M,#,P.#$V`#`S-S0U,S0`,#`Q,38Q,``P,#`P,#`P,#`P-P`Q,C4S,3$T-3,W
+M,``@,3(P-S$@(#$`````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````=7-T87(`,#!D=GEU:V]V````````````````````````````````96YG
+M`````````````````````````/\!````````````````,#`Q`#`P,#`P,#`P
+M,#`P````````````````````````````````````````````````````]P``
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+&````````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_tbz.c b/contrib/libarchive/libarchive/test/test_read_format_tbz.c
index 1b2f805557b0..7323e13c98d0 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_tbz.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_tbz.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
'B','Z','h','9','1','A','Y','&','S','Y',237,7,140,'W',0,0,27,251,144,208,
diff --git a/contrib/libarchive/libarchive/test/test_read_format_tgz.c b/contrib/libarchive/libarchive/test/test_read_format_tgz.c
index 6d8b05002064..5bb5e02be4f4 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_tgz.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_tgz.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
31,139,8,0,222,'C','p','C',0,3,211,'c',160,'=','0','0','0','0','7','5','U',
diff --git a/contrib/libarchive/libarchive/test/test_read_format_tlz.c b/contrib/libarchive/libarchive/test/test_read_format_tlz.c
index bfb2abdc1043..5633baa4c6e8 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_tlz.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_tlz.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
93, 0, 0,128, 0,255,255,255,255,255,255,255,255, 0, 23, 0,
diff --git a/contrib/libarchive/libarchive/test/test_read_format_txz.c b/contrib/libarchive/libarchive/test/test_read_format_txz.c
index 130c0811bd74..e17b054a6213 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_txz.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_txz.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
253, 55,122, 88, 90, 0, 0, 4,230,214,180, 70, 2, 0, 33, 1,
diff --git a/contrib/libarchive/libarchive/test/test_read_format_tz.c b/contrib/libarchive/libarchive/test/test_read_format_tz.c
index 81469b5ec011..4dfc916a3608 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_tz.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_tz.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char archive[] = {
31,157,144,'.',0,8,28,'H',176,160,193,131,8,19,'*','\\',200,176,'!','B',24,
diff --git a/contrib/libarchive/libarchive/test/test_read_format_ustar_filename.c b/contrib/libarchive/libarchive/test/test_read_format_ustar_filename.c
index 5c2717cdf2c0..0c7e8a3c8070 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_ustar_filename.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_ustar_filename.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
#include <locale.h>
diff --git a/contrib/libarchive/libarchive/test/test_read_format_warc.c b/contrib/libarchive/libarchive/test/test_read_format_warc.c
index 658ab8a6e72b..91e6dc67e133 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_warc.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_warc.c
@@ -25,8 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
-
DEFINE_TEST(test_read_format_warc)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_format_xar.c b/contrib/libarchive/libarchive/test/test_read_format_xar.c
index 1c8524520b39..daff2921690a 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_xar.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_xar.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define UID 1001
#define UNAME "cue"
diff --git a/contrib/libarchive/libarchive/test/test_read_format_xar_doublelink.c b/contrib/libarchive/libarchive/test/test_read_format_xar_doublelink.c
new file mode 100644
index 000000000000..78d6626a09bf
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_xar_doublelink.c
@@ -0,0 +1,55 @@
+/*-
+ * Copyright (c) 2024 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"
+
+#define __LIBARCHIVE_BUILD
+
+DEFINE_TEST(test_read_format_xar_doublelink)
+{
+ const char *refname = "test_read_format_xar_doublelink.xar";
+ struct archive *a;
+ struct archive_entry *ae;
+
+ extract_reference_file(refname);
+
+ /* Verify with seeking reader. */
+ assert((a = archive_read_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ if(ARCHIVE_OK != archive_read_support_format_xar(a)) {
+ skipping("XAR format unsupported");
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ return;
+ }
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname,
+ 10240));
+
+ assertA(ARCHIVE_FATAL == archive_read_next_header(a, &ae));
+ assertEqualString(archive_error_string(a),
+ "File with multiple link attributes");
+ assert(archive_errno(a) != 0);
+
+ 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_doublelink.xar.uu b/contrib/libarchive/libarchive/test/test_read_format_xar_doublelink.xar.uu
new file mode 100644
index 000000000000..7aa638a86e7c
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_xar_doublelink.xar.uu
@@ -0,0 +1,12 @@
+begin 664 test_read_format_xar_doublelink.xar
+M>&%R(0`<``$````````!0`````````/7`````7B<[9/!<L(@%$7W?@7#/H60
+MU'0R!'?]`KOICDF>D3&``]'1?GT!-1U;;:=[5[G<=WB0=P>^..@![<%Y94V#
+M\R>*$9C6=LKT#7Y;OF8O>"%F_""=F"$^VC9\$&\=R#'LR$:E03#*RHR6&2N6
+MM*KIO,YS3JZ1M&D-[<;O-/+C<8`&^[7,<:P@;E<K#Z.@G)Q5<KWZB,TY22*V
+M()<>:;52`R#5A6N?VQ@9CHIN.#_IY(['+:!!F4V#K5.],G+`8BU=%SU.8OF?
+MH#*V`U%5K"@9)Z=5*G2P5RT8*YY+3J9%*ND(T?D\%/3$[U0G<DK#+T9ULCPX
+MH75PHDA6/U']A>J=W6T3=E+);&^E4=0%?0^#N\00;G(;8U7`]!<F?\'D%"J)
+MX[Y.@WU/@]U)(_\SACO$8_X_YA_&$]\F)^FE?@)<4AJ<B%QTTZN3JTL:$,<5
+<`XH;(KD-Q0=XG.V3P7+"(!1%]WX%PSZ%D-1T,@``
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip.c b/contrib/libarchive/libarchive/test/test_read_format_zip.c
index 1ef173ca79eb..9e820f509c19 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define __LIBARCHIVE_BUILD
#include <archive_crc32.h>
@@ -157,7 +156,7 @@ verify_basic(struct archive *a, int seek_checks)
if (archive_zlib_version() != NULL) {
failure("file2 has a bad CRC, so read should fail and not change buff");
memset(buff, 'a', 19);
- assertEqualInt(ARCHIVE_WARN, archive_read_data(a, buff, 19));
+ assertEqualInt(ARCHIVE_FAILED, archive_read_data(a, buff, 19));
assertEqualMem(buff, "aaaaaaaaaaaaaaaaaaa", 19);
} else {
assertEqualInt(ARCHIVE_FAILED, archive_read_data(a, buff, 19));
@@ -736,6 +735,134 @@ DEFINE_TEST(test_read_format_zip_bzip2_multi_blockread)
assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
}
+DEFINE_TEST(test_read_format_zip_zstd_one_file)
+{
+ const char *refname = "test_read_format_zip_zstd.zipx";
+ struct archive *a;
+ struct archive_entry *ae;
+
+ assert((a = archive_read_new()) != NULL);
+ if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) {
+ skipping("zstd is not fully supported on this platform");
+ archive_read_close(a);
+ archive_read_free(a);
+ return;
+ }
+ extract_reference_file(refname);
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 37));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a));
+ assertEqualString("vimrc", archive_entry_pathname(ae));
+ assertEqualIntA(a, 0, extract_one(a, ae, 0xBA8E3BAA));
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_zip_zstd_one_file_blockread)
+{
+ const char *refname = "test_read_format_zip_zstd.zipx";
+ struct archive *a;
+ struct archive_entry *ae;
+
+ assert((a = archive_read_new()) != NULL);
+ if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) {
+ skipping("zstd is not fully supported on this platform");
+ archive_read_close(a);
+ archive_read_free(a);
+ return;
+ }
+ extract_reference_file(refname);
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 37));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a));
+ assertEqualString("vimrc", archive_entry_pathname(ae));
+ assertEqualIntA(a, 0, extract_one_using_blocks(a, 13, 0xBA8E3BAA));
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_zip_zstd_multi)
+{
+ const char *refname = "test_read_format_zip_zstd_multi.zipx";
+ struct archive *a;
+ struct archive_entry *ae;
+
+ assert((a = archive_read_new()) != NULL);
+ if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) {
+ skipping("zstd is not fully supported on this platform");
+ archive_read_close(a);
+ archive_read_free(a);
+ return;
+ }
+ extract_reference_file(refname);
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 37));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a));
+ assertEqualString("smartd.conf", archive_entry_pathname(ae));
+ assertEqualIntA(a, 0, extract_one(a, ae, 0x8DD7379E));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a));
+ assertEqualString("ts.conf", archive_entry_pathname(ae));
+ assertEqualIntA(a, 0, extract_one(a, ae, 0x7AE59B31));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a));
+ assertEqualString("vimrc", archive_entry_pathname(ae));
+ assertEqualIntA(a, 0, extract_one(a, ae, 0xBA8E3BAA));
+
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_zip_zstd_multi_blockread)
+{
+ const char *refname = "test_read_format_zip_zstd_multi.zipx";
+ struct archive *a;
+ struct archive_entry *ae;
+
+ assert((a = archive_read_new()) != NULL);
+ if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) {
+ skipping("zstd is not fully supported on this platform");
+ archive_read_close(a);
+ archive_read_free(a);
+ return;
+ }
+ extract_reference_file(refname);
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 37));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a));
+ assertEqualString("smartd.conf", archive_entry_pathname(ae));
+ assertEqualIntA(a, 0, extract_one_using_blocks(a, 12, 0x8DD7379E));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a));
+ assertEqualString("ts.conf", archive_entry_pathname(ae));
+ assertEqualIntA(a, 0, extract_one_using_blocks(a, 13, 0x7AE59B31));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a));
+ assertEqualString("vimrc", archive_entry_pathname(ae));
+ assertEqualIntA(a, 0, extract_one_using_blocks(a, 14, 0xBA8E3BAA));
+
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
+}
+
DEFINE_TEST(test_read_format_zip_xz_multi)
{
const char *refname = "test_read_format_zip_xz_multi.zipx";
@@ -893,6 +1020,7 @@ DEFINE_TEST(test_read_format_zip_lzma_alone_leak)
if(ARCHIVE_OK != archive_read_support_filter_lzma(a)) {
skipping("lzma reading is not fully supported on this platform");
archive_read_close(a);
+ archive_read_free(a);
return;
}
@@ -1004,6 +1132,7 @@ DEFINE_TEST(test_read_format_zip_7z_deflate)
const char *refname = "test_read_format_zip_7z_deflate.zip";
struct archive_entry *ae;
struct archive *a;
+ int r;
assert((a = archive_read_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
@@ -1013,15 +1142,33 @@ DEFINE_TEST(test_read_format_zip_7z_deflate)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_filename(a, refname, 10240));
//read first symlink
- assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ r = archive_read_next_header(a, &ae);
+ if (archive_zlib_version() == NULL) {
+ assertEqualInt(ARCHIVE_FAILED, r);
+ assertEqualString(archive_error_string(a),
+ "Unsupported ZIP compression method during decompression "
+ "of link entry (8: deflation)");
+ assert(archive_errno(a) != 0);
+ } else {
+ assertEqualIntA(a, ARCHIVE_OK, r);
+ assertEqualString("libxkbcommon-x11.so.0.0.0",
+ archive_entry_symlink(ae));
+ }
assertEqualInt(AE_IFLNK, archive_entry_filetype(ae));
- assertEqualString("libxkbcommon-x11.so.0.0.0",
- archive_entry_symlink(ae));
//read second symlink
- assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ r = archive_read_next_header(a, &ae);
+ if (archive_zlib_version() == NULL) {
+ assertEqualInt(ARCHIVE_FAILED, r);
+ assertEqualString(archive_error_string(a),
+ "Unsupported ZIP compression method during decompression "
+ "of link entry (8: deflation)");
+ assert(archive_errno(a) != 0);
+ } else {
+ assertEqualIntA(a, ARCHIVE_OK, r);
+ assertEqualString("libxkbcommon-x11.so.0.0.0",
+ archive_entry_symlink(ae));
+ }
assertEqualInt(AE_IFLNK, archive_entry_filetype(ae));
- assertEqualString("libxkbcommon-x11.so.0.0.0",
- archive_entry_symlink(ae));
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_7075_utf8_paths.c b/contrib/libarchive/libarchive/test/test_read_format_zip_7075_utf8_paths.c
index a0a510c8f29b..fefcc82881f8 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_7075_utf8_paths.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_7075_utf8_paths.c
@@ -25,7 +25,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#include <locale.h>
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_bzip2.zipx.uu b/contrib/libarchive/libarchive/test/test_read_format_zip_bzip2.zipx.uu
index 6d9884aeddf5..4c9aeb77a941 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_bzip2.zipx.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_bzip2.zipx.uu
@@ -1,4 +1,4 @@
-begin 644 bzip2.zipx
+begin 644 test_read_format_zip_bzip2.zipx
M4$L#!"X#```,`#TQD4VJ.XZZ-`(``)`#```%````=FEM<F-"6F@Y,4%9)E-9
MYPC!D@``3%^``!!TY^!2(B.7`+__W^%``C$[0!AJ>E,ID:&U-'E`T&C1IIIZ
M@8&J>$9":`IZ@``'J:/2&#```````!@`2FB$T:31D9"F@8FC0`\H^:+Y;81F
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_comment_stored.c b/contrib/libarchive/libarchive/test/test_read_format_zip_comment_stored.c
index 95df0107fecb..39f83a821006 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_comment_stored.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_comment_stored.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Read a zip file that has a zip comment in the end of the central
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_encryption_data.c b/contrib/libarchive/libarchive/test/test_read_format_zip_encryption_data.c
index b56d78e9074f..4a6502b9bf2d 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_encryption_data.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_encryption_data.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_read_format_zip_encryption_data)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_encryption_header.c b/contrib/libarchive/libarchive/test/test_read_format_zip_encryption_header.c
index f40e1f5cb8da..fb19c1421946 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_encryption_header.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_encryption_header.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_read_format_zip_encryption_header)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_encryption_partially.c b/contrib/libarchive/libarchive/test/test_read_format_zip_encryption_partially.c
index 77af235d58b7..cd5d2103ea6a 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_encryption_partially.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_encryption_partially.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_read_format_zip_encryption_partially)
{
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_filename.c b/contrib/libarchive/libarchive/test/test_read_format_zip_filename.c
index 4dd2e8ad6e8f..b673344738be 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_filename.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_filename.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
#include <locale.h>
@@ -1179,6 +1178,11 @@ next_test:
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
/*
+ * By default, Windows will create an sconv_default object, which will
+ * interpret filenames as OEMCP
+ */
+#if !defined(_WIN32) || defined(__CYGWIN__)
+ /*
* Read filename in en_US.UTF-8 without "hdrcharset=KOI8-R" option.
* The filename we can properly read is only second file.
*/
@@ -1221,4 +1225,5 @@ next_test:
/* Close the archive. */
assertEqualInt(ARCHIVE_OK, archive_read_close(a));
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+#endif
}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_filename_cp866.zip.uu b/contrib/libarchive/libarchive/test/test_read_format_zip_filename_cp866.zip.uu
index 52c6770609e1..7ef721490c4a 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_filename_cp866.zip.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_filename_cp866.zip.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_zip_cp866.zip
+begin 644 test_read_format_zip_filename_cp866.zip
M4$L#!`H``````%VEAS[,X8$4!@````8````&`!P`CY"(@H62550)``-!HYU-
M0:.=375X"P`!!.D#```$Z0,``/#RZ??E]%!+`P0*``````!=I8<^S.&!%`8`
M```&````!@`<`*_@J**EXE54"0`#0:.=34&CG4UU>`L``03I`P``!.D#``#P
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_filename_cp932.zip.uu b/contrib/libarchive/libarchive/test/test_read_format_zip_filename_cp932.zip.uu
index 90c22f2d5c45..ec0f9c091b06 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_filename_cp932.zip.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_filename_cp932.zip.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_zip_cp932.zip
+begin 644 test_read_format_zip_filename_cp932.zip
M4$L#!`H``````/94=#Z"B='W!0````4````1````E5R"OH+F+XCJEY>57"YT
M>'1(96QL;U!+`P0*``````"W5'0^W)UO0@4````%````#P```)5<@KZ"YB^*
MOXZ:+G1X=&MA;FII4$L!`A0+"@``````]E1T/H*)T?<%````!0```!$`````
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_filename_koi8r.zip.uu b/contrib/libarchive/libarchive/test/test_read_format_zip_filename_koi8r.zip.uu
index 05c669560270..242c902f0b64 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_filename_koi8r.zip.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_filename_koi8r.zip.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_zip_koi8r.zip
+begin 644 test_read_format_zip_filename_koi8r.zip
M4$L#!`H``````+&CAS[,X8$4!@````8````&`!P`T-+)U\74550)``,>H)U-
M'J"=375X"P`!!.D#```$Z0,``/#RZ??E]%!+`P0*``````"QHX<^S.&!%`8`
M```&````!@`<`/#RZ??E]%54"0`#'J"=31Z@G4UU>`L``03I`P``!.D#``#P
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_filename_utf8_jp.zip.uu b/contrib/libarchive/libarchive/test/test_read_format_zip_filename_utf8_jp.zip.uu
index 00c2af33723a..3c9f4b9ea934 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_filename_utf8_jp.zip.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_filename_utf8_jp.zip.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_zip_utf8.zip
+begin 644 test_read_format_zip_filename_utf8_jp.zip
M4$L#!`H```@``,E4=#X````````````````*`!P`Z*&HXX&@XX*(+U54"0`#
MBEJ%3;[UBDUU>`L``03M`P``!`$"``!02P,$"@``"```]51T/H*)T?<%````
M!0```!<`'`#HH:CC@:#C@H@OY+B`Z*:GZ*&H+G1X=%54"0`#WEJ%31KLBDUU
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_filename_utf8_ru.zip.uu b/contrib/libarchive/libarchive/test/test_read_format_zip_filename_utf8_ru.zip.uu
index 9241776d7fdf..bd71cc2a497b 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_filename_utf8_ru.zip.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_filename_utf8_ru.zip.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_zip_utf8_ru.zip
+begin 644 test_read_format_zip_filename_utf8_ru.zip
M4$L#!`H```@``,NC/S[,X8$4!@````8````,`!P`T)_0H-"8T)+0E="B550)
M``-.G49-'J"=375X"P`!!.D#```$Z0,``/#RZ??E]%!+`P0*```(``!KI3\^
MS.&!%`8````&````#``<`-"_T8#0N-"RT+71@E54"0`#6J!&31Z@G4UU>`L`
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_filename_utf8_ru2.zip.uu b/contrib/libarchive/libarchive/test/test_read_format_zip_filename_utf8_ru2.zip.uu
index 651f8b1f8b10..65a34ed59147 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_filename_utf8_ru2.zip.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_filename_utf8_ru2.zip.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_zip_utf8_ru2.zip
+begin 644 test_read_format_zip_filename_utf8_ru2.zip
M4$L#!`H``````.:PCC[,X8$4!@````8````&`!P`\/+I]^7T550)``.`\:9-
MI6>G375X"P`!!.D#```$Z0,``/#RZ??E]%!+`P0*```(``!KI3\^S.&!%`8`
M```&````#``<`-"_T8#0N-"RT+71@E54"0`#6J!&357SIDUU>`L``03I`P``
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_high_compression.c b/contrib/libarchive/libarchive/test/test_read_format_zip_high_compression.c
index 16cfbb182893..d28897027747 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_high_compression.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_high_compression.c
@@ -23,11 +23,9 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD");
#include <locale.h>
-
/*
* Github Issue 748 reported problems with end-of-entry handling
* with highly-compressible data. This resulted in the end of the
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_jar.c b/contrib/libarchive/libarchive/test/test_read_format_zip_jar.c
index 912e67137704..75ea3eb9b868 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_jar.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_jar.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Issue 822: jar files have an empty External File Attributes field which
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_lzma.zipx.uu b/contrib/libarchive/libarchive/test/test_read_format_zip_lzma.zipx.uu
index 24fdc8e7c288..d0aad44a17d1 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_lzma.zipx.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_lzma.zipx.uu
@@ -1,4 +1,4 @@
-begin 644 lzma.zipx
+begin 644 test_read_format_zip_lzma.zipx
M4$L#!#\#```.`#TQD4VJ.XZZ.0(``)`#```%````=FEM<F,0`@4`70`0````
M$0@$J,)\D;(#4L%<^$P5TO^CM0KI0HWG08B&_].4<,CJ")TW/L>)82Q1PWAL
M+U`,N0L_$]^&650C/X$D6#4QFD$\A/"_![4!O/5O/!KH`WCQ*4?T2*]4P#/D
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_mac_metadata.c b/contrib/libarchive/libarchive/test/test_read_format_zip_mac_metadata.c
index 3f2813cc9894..9f7c35e1df85 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_mac_metadata.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_mac_metadata.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Read a zip file that has a zip comment in the end of the central
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_malformed.c b/contrib/libarchive/libarchive/test/test_read_format_zip_malformed.c
index f1160648e759..7e46abd8a4c1 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_malformed.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_malformed.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
test_malformed1(void)
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 4418fc4f2502..95945638b074 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_nested.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_nested.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_read_format_zip_nested)
{
@@ -50,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, 1);
+ inner = calloc(innerLength, sizeof(char));
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_nofiletype.c b/contrib/libarchive/libarchive/test/test_read_format_zip_nofiletype.c
index b3260fa7563b..d2798b283185 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_nofiletype.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_nofiletype.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Issue 332: Some epub files (which are really Zip archives) have
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_padded.c b/contrib/libarchive/libarchive/test/test_read_format_zip_padded.c
index d8c694bae5e2..dcbf3406e867 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_padded.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_padded.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
verify_padded_archive(const char *refname)
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_ppmd8.zipx.uu b/contrib/libarchive/libarchive/test/test_read_format_zip_ppmd8.zipx.uu
index 4440e95b3158..cdbf0f44899d 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_ppmd8.zipx.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_ppmd8.zipx.uu
@@ -1,4 +1,4 @@
-begin 644 ppmd8.zipx
+begin 644 test_read_format_zip_ppmd8.zipx
M4$L#!#\#``!B`#TQD4VJ.XZZV`$``)`#```%````=FEM<F,'`"']JO"&\1[R
M;;G)@`(8>EJ>3<8@F_*<(\B>K]4_(WC8#)`_QSG+`7`B&_11VIJ)@#(<W.9L
M>K)_I8R^=`VUO2_S,1C=1CAU>-*`]CC+&6Q;EE'#CG-W=^[,F,+UR-TE(9,G
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_sfx.c b/contrib/libarchive/libarchive/test/test_read_format_zip_sfx.c
index a33c1b808c56..dad0a270d7bc 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_sfx.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_sfx.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Read a zip file that is a SFX.
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 20e55bbc6948..8f0cfe6dc896 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
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_read_format_zip_traditional_encryption_data)
{
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 cc1e3110d65b..7c5d5ea61f77 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
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
test_winzip_aes(const char *refname, int need_libz)
@@ -115,7 +114,7 @@ test_winzip_aes(const char *refname, int need_libz)
} else {
assertEqualInt(ARCHIVE_FAILED, archive_read_data(a, buff, 19));
assertEqualString(archive_error_string(a),
- "Unsupported ZIP compression method (deflation)");
+ "Unsupported ZIP compression method (8: deflation)");
assert(archive_errno(a) != 0);
}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes128.zip.uu b/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes128.zip.uu
index d0f03a3112e1..d3a69d8d41d4 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes128.zip.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes128.zip.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_zip_winzip_aes128_encryption_data.zip
+begin 644 test_read_format_zip_winzip_aes128.zip
M4$L#!#,#`0!C`(RP#D4`````@0H``*(:```&``L`4D5!1$U%`9D'``(`044!
M"``>H87EHY!N6J#=V\<,#M>^H2IQID3@A--GSL+F%'R^%OKB.K(74CJ!,(%"
ML\O.^D'TO'!T<+"]"28FXP@QKAY]R+02!E!XE_6A-W&<$&SJ5W]K'SJ4>'C<
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes256.zip.uu b/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes256.zip.uu
index a45c8fbe664f..ae51e66538d1 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes256.zip.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes256.zip.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_zip_winzip_aes256_encryption_data.zip
+begin 644 test_read_format_zip_winzip_aes256.zip
M4$L#!#,#`0!C`(RP#D4`````B0H``*(:```&``L`4D5!1$U%`9D'``(`044#
M"`#8+Z><':+DENQS9*!7Y*&!7BQK,UN]RF*'<':@;]N)O5>]A5>0<AYWX=%S
MGUTK5M-^&`+%Q<#PC+45O;+Q/4[_J7)A7*2<^!W;)^E_W%,]]7-&6R8]ZL.F
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes256_stored.zip.uu b/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes256_stored.zip.uu
index c49673aab2e7..e8300fa903a8 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes256_stored.zip.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes256_stored.zip.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_zip_winzip_aes256_encryption_stored_data.zip
+begin 644 test_read_format_zip_winzip_aes256_stored.zip
M4$L#!#,#`0!C`(RP#D4`````OAH``*(:```&``L`4D5!1$U%`9D'``(`044#
M``#5>!R(9&J6OW+%/X2D%.HLH/4@[H=,;4@&P$:E>NK#GQM>2SUV&GDS9/G@
M#J5^X(O<TC2DQW<QV`U6]!AA].1DL/:C!^1V=PJ`#_Z7`]_@C+O\SN38$]ZL
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 6c40ae76695a..4b6202bde164 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
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_read_format_zip_winzip_aes256_large)
{
@@ -143,7 +142,7 @@ DEFINE_TEST(test_read_format_zip_winzip_aes256_large)
assertEqualInt(ARCHIVE_FAILED,
archive_read_data(a, buff, sizeof(buff)));
assertEqualString(archive_error_string(a),
- "Unsupported ZIP compression method (deflation)");
+ "Unsupported ZIP compression method (8: deflation)");
assert(archive_errno(a) != 0);
}
@@ -161,7 +160,7 @@ DEFINE_TEST(test_read_format_zip_winzip_aes256_large)
assertEqualInt(ARCHIVE_FAILED,
archive_read_data(a, buff, sizeof(buff)));
assertEqualString(archive_error_string(a),
- "Unsupported ZIP compression method (deflation)");
+ "Unsupported ZIP compression method (8: deflation)");
assert(archive_errno(a) != 0);
}
@@ -179,7 +178,7 @@ DEFINE_TEST(test_read_format_zip_winzip_aes256_large)
assertEqualInt(ARCHIVE_FAILED,
archive_read_data(a, buff, sizeof(buff)));
assertEqualString(archive_error_string(a),
- "Unsupported ZIP compression method (deflation)");
+ "Unsupported ZIP compression method (8: deflation)");
assert(archive_errno(a) != 0);
}
@@ -197,7 +196,7 @@ DEFINE_TEST(test_read_format_zip_winzip_aes256_large)
assertEqualInt(ARCHIVE_FAILED,
archive_read_data(a, buff, sizeof(buff)));
assertEqualString(archive_error_string(a),
- "Unsupported ZIP compression method (deflation)");
+ "Unsupported ZIP compression method (8: deflation)");
assert(archive_errno(a) != 0);
}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.c b/contrib/libarchive/libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.c
index aca8bed60948..e9549fef8e7d 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.c
@@ -23,8 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
-
/*
* Issue 869: zip files without a valid EOCD header aren't loaded even if they
* have a valid ZIP64 version of said header.
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.zip.uu b/contrib/libarchive/libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.zip.uu
index 63744f145ea2..7301c155e404 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.zip.uu
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.zip.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_format_zip_without_eocd.zip
+begin 644 test_read_format_zip_with_invalid_traditional_eocd.zip
M4$L#!"T`"````-IT@DH`````__________\)`"``=&5S=#$N='AT`0`<````
M````````````````````````````````````````````````````````````
M`%!+`P0M``@```#:=()*`````/__________"0`@`'1E<W0R+G1X=`$`'```
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_zip64.c b/contrib/libarchive/libarchive/test/test_read_format_zip_zip64.c
index bd2324e549b3..51968b71addb 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_zip64.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_zip64.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Sample file was created with:
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_zstd.zipx.uu b/contrib/libarchive/libarchive/test/test_read_format_zip_zstd.zipx.uu
new file mode 100644
index 000000000000..58a295844019
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_zstd.zipx.uu
@@ -0,0 +1,18 @@
+begin 644 test_read_format_zip_zstd.zipx
+M4$L#!!0```!=`#TQD4VJ.XZZ&P(``)`#```%````=FEM<F,HM2_]`%B5$``F
+M*&PC(&_;!LR_L%[])MU@R?]OORW$@9`DQ+<"F#-&'$Y6"9""0&%E`%\`7@"1
+M7?FX:LJ\X?*WT9.43+L]A_#MKX7+T^E'CZM<W%N^:O@!SJ4,4TAA"BGIT&'%
+M\5.>I.97\6@M?/P$SA1R6+RFRUD<*@L-#!$.$A`-#!,!;_I.?CH\]WK(I'HJ
+MC1"P;([X:RD\"4NZL[X9?H=*YI9Q^9SUG`U"%GS.%'JF0M<\[PV?3#MR">63
+MU+);7<0EM,_'U]+(<VG*;PPLCBFD+)V*P',I<U:G]:N>)+7>.MS@IFGS.GUF
+M'S5\-@V=Y=MW6",,P^\(`,FALG&E(V`ZX;1&#G$;^?8[^=%R^:Q[GB1^JPZA
+M-SI]3O>XY5O/>)70LG3/QWO;L^DZJQ/Q)"5'6^UGS\CUT,:'[<)XDMY"B%WV
+MPK<V35TV@^>$('N2MJ]2M61L`\D@@2E$0?$HA-^YDM0T959VUCN4BS.J<-=[
+M6P)HFD)TO47V[FWT;?<:9=HN25KX&K(SA?9*P8'"=&]T1G?9G8^[AR>)P11R
+MY'H86B0%XTKA&U$O;*N]M,>LJ)E`K77)I'N2E`(B(!!&C.+TY**V^BU(V9R8
+M!ZLXW)6;"!YPP'E,4_F\OB!T"4Z:6/#"Z823+@5V#BNHGHC-+4@`)>?""C,)
+M2+G'/1,#D-1'B&&R288:'(KD,I>"_/85<Z&-7Q#VF647!5!+`0(_`Q0```!=
+M`#TQD4VJ.XZZ&P(``)`#```%``````````````"D@0````!V:6UR8U!+!08`
+1`````0`!`#,````^`@``````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_zstd_multi.zipx.uu b/contrib/libarchive/libarchive/test/test_read_format_zip_zstd_multi.zipx.uu
new file mode 100644
index 000000000000..502024e1c126
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_zstd_multi.zipx.uu
@@ -0,0 +1,94 @@
+begin 644 test_read_format_zip_zstd_multi.zipx
+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
+I``````````"D@08-``!V:6UR8U!+!08``````P`#`*$```!$#P``````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_large.c b/contrib/libarchive/libarchive/test/test_read_large.c
index 8527e39466b2..46dee4e33d6c 100644
--- a/contrib/libarchive/libarchive/test/test_read_large.c
+++ b/contrib/libarchive/libarchive/test/test_read_large.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char testdata[10 * 1024 * 1024];
static unsigned char testdatacopy[10 * 1024 * 1024];
@@ -37,7 +36,6 @@ static unsigned char buff[11 * 1024 * 1024];
/* Check correct behavior on large reads. */
DEFINE_TEST(test_read_large)
{
- unsigned int i;
int tmpfilefd;
char tmpfilename[] = "test-read_large.XXXXXX";
size_t used;
@@ -45,8 +43,7 @@ DEFINE_TEST(test_read_large)
struct archive_entry *entry;
FILE *f;
- for (i = 0; i < sizeof(testdata); i++)
- testdata[i] = (unsigned char)(rand());
+ fill_with_pseudorandom_data(testdata, sizeof(testdata));
assert(NULL != (a = archive_write_new()));
assertA(0 == archive_write_set_format_ustar(a));
diff --git a/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_aa.uu b/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_aa.uu
index a6c3b3cffebf..299b00b6814a 100644
--- a/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_aa.uu
+++ b/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_aa.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_large_splitted_rar_aa
M4F%R(1H'`,^0<P``#0````````!R,W3`D$<`VK$"`&I!9PX#=T0K]VL`!S\=
M-1T`I($``'!P;61?;'IS<U]C;VYV97)S:6]N7W1E<W0N='ATP,B$``<_&[\&
M/Z<8.^3!KS1=].J=K$!ZW>[/K1`L^BJ7QHH!,TI;W];?!</^PRNT+.T262?/
diff --git a/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ab.uu b/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ab.uu
index 43869789a075..39ce2315c44f 100644
--- a/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ab.uu
+++ b/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ab.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_large_splitted_rar_ab
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
diff --git a/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ac.uu b/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ac.uu
index 0ceeae1b7fc4..7941aaaca7ad 100644
--- a/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ac.uu
+++ b/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ac.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_large_splitted_rar_ac
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
diff --git a/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ad.uu b/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ad.uu
index f736f13c7cb1..9b633d19a931 100644
--- a/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ad.uu
+++ b/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ad.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_large_splitted_rar_ad
M>WI\4,Y&PE_B_KBY3_KR8A*=V5Y9^":+9OY.2W-%I:#J"YC[#9]&6)@HH1ZH
MV*<8TFQK2]$<A645.":BA=R^<=NOJ(%,H)2+!9H%.!"J[E>+2^(@3/9+1"6W
M2O)L"JZC)MCDJG+%_;+=UEV.2(I,V[T@E<XQKA"\G.*'GD,QF_.C^"NU*.#4
diff --git a/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ae.uu b/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ae.uu
index 9f463a4ae384..fada05733f7c 100644
--- a/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ae.uu
+++ b/contrib/libarchive/libarchive/test/test_read_large_splitted_rar_ae.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_large_splitted_rar_ae
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
diff --git a/contrib/libarchive/libarchive/test/test_read_pax_truncated.c b/contrib/libarchive/libarchive/test/test_read_pax_truncated.c
index 0ad13e657d02..a92ac3855c8d 100644
--- a/contrib/libarchive/libarchive/test/test_read_pax_truncated.c
+++ b/contrib/libarchive/libarchive/test/test_read_pax_truncated.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_read_pax_truncated)
{
@@ -48,8 +47,8 @@ DEFINE_TEST(test_read_pax_truncated)
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, "file");
archive_entry_set_mode(ae, S_IFREG | 0755);
- for (i = 0; i < filedata_size; i++)
- filedata[i] = (unsigned char)rand();
+ fill_with_pseudorandom_data(filedata, filedata_size);
+
archive_entry_set_atime(ae, 1, 2);
archive_entry_set_ctime(ae, 3, 4);
archive_entry_set_mtime(ae, 5, 6);
diff --git a/contrib/libarchive/libarchive/test/test_read_pax_xattr_schily.tar.uu b/contrib/libarchive/libarchive/test/test_read_pax_xattr_schily.tar.uu
index 33a3ed4ea036..83a3cdbc52b9 100644
--- a/contrib/libarchive/libarchive/test/test_read_pax_xattr_schily.tar.uu
+++ b/contrib/libarchive/libarchive/test/test_read_pax_xattr_schily.tar.uu
@@ -1,4 +1,4 @@
-begin 644 test_read_pax_xattr_schily.tar.uu
+begin 644 test_read_pax_xattr_schily.tar
M+B]087A(96%D97)S+C$U,C4O8V]N9F9I;&5S````````````````````````
M````````````````````````````````````````````````````````````
M`````````````#`P,#`V-#0`,#`P,#`P,``P,#`P,#`P`#`P,#`P,#`P-C0W
diff --git a/contrib/libarchive/libarchive/test/test_read_position.c b/contrib/libarchive/libarchive/test/test_read_position.c
index 5e7f05fa666d..e404c066e516 100644
--- a/contrib/libarchive/libarchive/test/test_read_position.c
+++ b/contrib/libarchive/libarchive/test/test_read_position.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static unsigned char nulls[1000];
static unsigned char tmp[1000];
diff --git a/contrib/libarchive/libarchive/test/test_read_splitted_rar_aa.uu b/contrib/libarchive/libarchive/test/test_read_splitted_rar_aa.uu
index 9a510cb4c94a..a15d31454d26 100644
--- a/contrib/libarchive/libarchive/test/test_read_splitted_rar_aa.uu
+++ b/contrib/libarchive/libarchive/test/test_read_splitted_rar_aa.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_splitted_rar_aa
M4F%R(1H'`,^0<P``#0````````"$4G0@D#(`%````!0````#0J+(OK=VVCX4
M,`@`I($``'1E<W0N='AT@`BW=MH^MW;:/G1E<W0@=&5X="!D;V-U;65N=`T*
*G2]T()`R``@`````
diff --git a/contrib/libarchive/libarchive/test/test_read_splitted_rar_ab.uu b/contrib/libarchive/libarchive/test/test_read_splitted_rar_ab.uu
index f34f25cc0b1f..0855fc3e7a9e 100644
--- a/contrib/libarchive/libarchive/test/test_read_splitted_rar_ab.uu
+++ b/contrib/libarchive/libarchive/test/test_read_splitted_rar_ab.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_splitted_rar_ab
M``@````#>T3)MM%,V#X4,`@`_Z$``'1E<W1L:6YKP`C13-@^4%_:/G1E<W0N
M='ATS>!T()`Z`!0````4`````T*BR+YC=]H^%#`0`*2!``!T97-T9&ER7'1E
*<W0N='ATP,QC=P``
diff --git a/contrib/libarchive/libarchive/test/test_read_splitted_rar_ac.uu b/contrib/libarchive/libarchive/test/test_read_splitted_rar_ac.uu
index e131343bb9fe..5ec194b0a62d 100644
--- a/contrib/libarchive/libarchive/test/test_read_splitted_rar_ac.uu
+++ b/contrib/libarchive/libarchive/test/test_read_splitted_rar_ac.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_splitted_rar_ac
MVCYC=]H^=&5S="!T97AT(&1O8W5M96YT#0JAR'3@D#$````````````#````
M`&-WVCX4,`<`[4$``'1E<W1D:7+`S&-WVCYD=]H^YN=TX)`V````````````
*`P````"=J]4^%```
diff --git a/contrib/libarchive/libarchive/test/test_read_splitted_rar_ad.uu b/contrib/libarchive/libarchive/test/test_read_splitted_rar_ad.uu
index f4d36093e04c..7d29b7d63bc9 100644
--- a/contrib/libarchive/libarchive/test/test_read_splitted_rar_ad.uu
+++ b/contrib/libarchive/libarchive/test/test_read_splitted_rar_ad.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_read_splitted_rar_ad
D,`P`[4$``'1E<W1E;7!T>61I<H#,G:O5/L5=VC[$/7L`0`<`
`
end
diff --git a/contrib/libarchive/libarchive/test/test_read_truncated.c b/contrib/libarchive/libarchive/test/test_read_truncated.c
index fbfd75c1cea7..c28a9ee30e00 100644
--- a/contrib/libarchive/libarchive/test/test_read_truncated.c
+++ b/contrib/libarchive/libarchive/test/test_read_truncated.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static char buff[1000000];
static char buff2[100000];
@@ -47,8 +46,7 @@ DEFINE_TEST(test_read_truncated)
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, "file");
archive_entry_set_mode(ae, S_IFREG | 0755);
- for (i = 0; i < sizeof(buff2); i++)
- buff2[i] = (unsigned char)rand();
+ fill_with_pseudorandom_data(buff2, sizeof(buff2));
archive_entry_set_size(ae, sizeof(buff2));
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
archive_entry_free(ae);
diff --git a/contrib/libarchive/libarchive/test/test_read_truncated_filter.c b/contrib/libarchive/libarchive/test/test_read_truncated_filter.c
index 632638d6fe92..9c5348d935d2 100644
--- a/contrib/libarchive/libarchive/test/test_read_truncated_filter.c
+++ b/contrib/libarchive/libarchive/test/test_read_truncated_filter.c
@@ -25,7 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Check that we generate an error message when reading a truncated
@@ -41,7 +40,7 @@ test_truncation(const char *compression,
char path[16];
char *buff, *data;
size_t buffsize, datasize, used1;
- int i, j, r, use_prog;
+ int i, r, use_prog;
buffsize = 2000000;
assert(NULL != (buff = (char *)malloc(buffsize)));
@@ -81,7 +80,7 @@ test_truncation(const char *compression,
archive_entry_set_filetype(ae, AE_IFREG);
archive_entry_set_size(ae, datasize);
for (i = 0; i < 100; i++) {
- sprintf(path, "%s%d", compression, i);
+ snprintf(path, sizeof(path), "%s%d", compression, i);
archive_entry_copy_pathname(ae, path);
failure("%s", path);
if (!assertEqualIntA(a, ARCHIVE_OK,
@@ -91,9 +90,7 @@ test_truncation(const char *compression,
free(buff);
return;
}
- for (j = 0; j < (int)datasize; ++j) {
- data[j] = (char)(rand() % 256);
- }
+ fill_with_pseudorandom_data(data, datasize);
failure("%s", path);
if (!assertEqualIntA(a, datasize,
archive_write_data(a, data, datasize))) {
@@ -111,8 +108,13 @@ test_truncation(const char *compression,
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, used1 - used1/64));
+ r = archive_read_open_memory(a, buff, used1 - used1/64);
+ if (r != ARCHIVE_OK) {
+ assertEqualStringA(a, "truncated bzip2 input",
+ archive_error_string(a));
+ goto out;
+ }
+
for (i = 0; i < 100; i++) {
if (ARCHIVE_OK != archive_read_next_header(a, &ae)) {
failure("Should have non-NULL error message for %s",
@@ -120,7 +122,7 @@ test_truncation(const char *compression,
assert(NULL != archive_error_string(a));
break;
}
- sprintf(path, "%s%d", compression, i);
+ snprintf(path, sizeof(path), "%s%d", compression, i);
assertEqualString(path, archive_entry_pathname(ae));
if (datasize != (size_t)archive_read_data(a, data, datasize)) {
failure("Should have non-NULL error message for %s",
@@ -133,6 +135,7 @@ test_truncation(const char *compression,
archive_read_close(a));
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+out:
free(data);
free(buff);
}
@@ -154,12 +157,12 @@ DEFINE_TEST(test_read_truncated_filter_gzip)
DEFINE_TEST(test_read_truncated_filter_lzip)
{
- test_truncation("lzip", archive_write_add_filter_lzip, 0);
+ test_truncation("lzip", archive_write_add_filter_lzip, canLzip());
}
DEFINE_TEST(test_read_truncated_filter_lzma)
{
- test_truncation("lzma", archive_write_add_filter_lzma, 0);
+ test_truncation("lzma", archive_write_add_filter_lzma, canLzma());
}
DEFINE_TEST(test_read_truncated_filter_lzop)
@@ -169,5 +172,5 @@ DEFINE_TEST(test_read_truncated_filter_lzop)
DEFINE_TEST(test_read_truncated_filter_xz)
{
- test_truncation("xz", archive_write_add_filter_xz, 0);
+ test_truncation("xz", archive_write_add_filter_xz, canXz());
}
diff --git a/contrib/libarchive/libarchive/test/test_short_writes.c b/contrib/libarchive/libarchive/test/test_short_writes.c
index afa0206f07cd..8221cece1721 100644
--- a/contrib/libarchive/libarchive/test/test_short_writes.c
+++ b/contrib/libarchive/libarchive/test/test_short_writes.c
@@ -171,6 +171,8 @@ checker_free(struct checker *checker)
{
free(checker->shortbuf);
free(checker->fullbuf);
+ archive_read_free(checker->short_archive);
+ archive_read_free(checker->full_archive);
free(checker);
}
diff --git a/contrib/libarchive/libarchive/test/test_sparse_basic.c b/contrib/libarchive/libarchive/test/test_sparse_basic.c
index 43e87df52451..0350df1e9f27 100644
--- a/contrib/libarchive/libarchive/test/test_sparse_basic.c
+++ b/contrib/libarchive/libarchive/test/test_sparse_basic.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_IOCTL_H
#include <sys/ioctl.h>
@@ -121,7 +120,7 @@ create_sparse_file(const char *path, const struct sparse *s)
memset(buff, ' ', sizeof(buff));
handle = CreateFileA(path, GENERIC_WRITE, 0,
- NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL,
+ NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,
NULL);
assert(handle != INVALID_HANDLE_VALUE);
assert(DeviceIoControl(handle, FSCTL_SET_SPARSE, NULL, 0,
@@ -253,8 +252,10 @@ is_sparse_supported(const char *path)
#if defined(HAVE_LINUX_FIEMAP_H)
if (r < 0)
return (is_sparse_supported_fiemap(path));
-#endif
+ return (1);
+#else
return (r >= 0);
+#endif
}
#elif !defined(HAVE_LINUX_FIEMAP_H)
@@ -364,9 +365,10 @@ verify_sparse_file(struct archive *a, const char *path,
#if DEBUG
fprintf(stderr, " overlapping hole expected_offset=%d, size=%d\n", (int)expected_offset, (int)sparse->size);
#endif
- /* Must be a hole, overlap must be filled with '\0' */
- if (assert(sparse->type == HOLE)) {
+ if (sparse->type == HOLE) {
assertMemoryFilledWith(start, end - start, '\0');
+ } else if (assert(sparse->type == DATA)) {
+ assertMemoryFilledWith(start, end - start, ' ');
}
start = end;
expected_offset += sparse->size;
@@ -410,9 +412,10 @@ verify_sparse_file(struct archive *a, const char *path,
#if DEBUG
fprintf(stderr, " trailing overlap expected_offset=%d, size=%d\n", (int)expected_offset, (int)sparse->size);
#endif
- /* Must be a hole, overlap must be filled with '\0' */
- if (assert(sparse->type == HOLE)) {
+ if (sparse->type == HOLE) {
assertMemoryFilledWith(start, end - start, '\0');
+ } else if (assert(sparse->type == DATA)) {
+ assertMemoryFilledWith(start, end - start, ' ');
}
}
last_offset = offset + bytes_read;
@@ -615,6 +618,33 @@ DEFINE_TEST(test_sparse_basic)
verify_sparse_file2(a, "file0", sparse_file0, 5, 1);
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+
+ /*
+ * Test that setting ARCHIVE_READDISK_NO_SPARSE
+ * creates no sparse entries.
+ */
+ assert((a = archive_read_disk_new()) != NULL);
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_set_behavior(a,
+ ARCHIVE_READDISK_NO_SPARSE));
+
+ verify_sparse_file(a, "file0", sparse_file0, 0);
+ verify_sparse_file(a, "file1", sparse_file1, 0);
+ verify_sparse_file(a, "file2", sparse_file2, 0);
+ verify_sparse_file(a, "file3", sparse_file3, 0);
+ verify_sparse_file(a, "file4", sparse_file4, 0);
+
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+
+ assert((a = archive_read_disk_new()) != NULL);
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_set_behavior(a,
+ ARCHIVE_READDISK_NO_SPARSE));
+
+ verify_sparse_file2(a, "file0", sparse_file0, 0, 0);
+ verify_sparse_file2(a, "file0", sparse_file0, 0, 1);
+
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
free(cwd);
}
diff --git a/contrib/libarchive/libarchive/test/test_splitted_rar_seek_support_aa.uu b/contrib/libarchive/libarchive/test/test_splitted_rar_seek_support_aa.uu
index 0344d2ce30ef..af2fcae348e8 100644
--- a/contrib/libarchive/libarchive/test/test_splitted_rar_seek_support_aa.uu
+++ b/contrib/libarchive/libarchive/test/test_splitted_rar_seek_support_aa.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_splitted_rar_seek_support_aa
M4F%R(1H'`,^0<P``#0````````"X!'0@D$,`CTX``(].```#8Z8%7F!.(4`4
M,!D`I($``$QI8F%R8VAI=F5!9&1I;F=497-T+FAT;6S`S&!.(4!B3B%`/"%$
M3T-465!%($A434P@4%5"3$E#("(M+R]7,T,O+T141"!(5$U,(#0N,"!4<F%N
diff --git a/contrib/libarchive/libarchive/test/test_splitted_rar_seek_support_ab.uu b/contrib/libarchive/libarchive/test/test_splitted_rar_seek_support_ab.uu
index 5f41f5fdac44..5652c6ac5ebf 100644
--- a/contrib/libarchive/libarchive/test/test_splitted_rar_seek_support_ab.uu
+++ b/contrib/libarchive/libarchive/test/test_splitted_rar_seek_support_ab.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_splitted_rar_seek_support_ab
M;&]G(&UE<W-A9V5S(&]N(&9A:6QU<F4N($EN('!A<G1I8W5L87(L('1H97D@
M<')I;G0*=&AE('9A;'5E(&]F(&)O=&@@87)G=6UE;G1S.R!T:&ES(&=R96%T
M;'D@<VEM<&QI9FEE<R!D:6%G;F]S:6YG"F9A:6QU<F5S+B`*/"]0/@H\2#$@
diff --git a/contrib/libarchive/libarchive/test/test_splitted_rar_seek_support_ac.uu b/contrib/libarchive/libarchive/test/test_splitted_rar_seek_support_ac.uu
index ee9f78c48967..3b45bdb4f8f3 100644
--- a/contrib/libarchive/libarchive/test/test_splitted_rar_seek_support_ac.uu
+++ b/contrib/libarchive/libarchive/test/test_splitted_rar_seek_support_ac.uu
@@ -1,4 +1,4 @@
-begin 644 -
+begin 644 test_splitted_rar_seek_support_ac
M<F]M(&-O;F9I9RYH+B`H268@=&AE('1E<W1S('5S92!T:&4@<V%M92`\5%0@
M0TQ!4U,](G=E<W1E<FXB/DA!5D5?/"]45#X*"6UA8W)O<R!A<R!T:&4@8V]D
M92!B96EN9R!T97-T960@=&AE;B!C;VYF:6=U<F%T:6]N('!R;V)L96US('=I
diff --git a/contrib/libarchive/libarchive/test/test_tar_filenames.c b/contrib/libarchive/libarchive/test/test_tar_filenames.c
index 8a3ddab79f29..a8c9a3dc790d 100644
--- a/contrib/libarchive/libarchive/test/test_tar_filenames.c
+++ b/contrib/libarchive/libarchive/test/test_tar_filenames.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Exercise various lengths of filenames in tar archives,
diff --git a/contrib/libarchive/libarchive/test/test_tar_large.c b/contrib/libarchive/libarchive/test/test_tar_large.c
index 6fb77768ba46..7ff3fee17717 100644
--- a/contrib/libarchive/libarchive/test/test_tar_large.c
+++ b/contrib/libarchive/libarchive/test/test_tar_large.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#include <errno.h>
#include <stdlib.h>
@@ -224,7 +223,7 @@ DEFINE_TEST(test_tar_large)
*/
for (i = 0; tests[i] != 0; i++) {
assert((ae = archive_entry_new()) != NULL);
- sprintf(namebuff, "file_%d", i);
+ snprintf(namebuff, sizeof(namebuff), "file_%d", i);
archive_entry_copy_pathname(ae, namebuff);
archive_entry_set_mode(ae, S_IFREG | 0755);
filesize = tests[i];
@@ -271,7 +270,7 @@ DEFINE_TEST(test_tar_large)
*/
for (i = 0; tests[i] > 0; i++) {
assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
- sprintf(namebuff, "file_%d", i);
+ snprintf(namebuff, sizeof(namebuff), "file_%d", i);
assertEqualString(namebuff, archive_entry_pathname(ae));
assert(tests[i] == archive_entry_size(ae));
}
diff --git a/contrib/libarchive/libarchive/test/test_ustar_filename_encoding.c b/contrib/libarchive/libarchive/test/test_ustar_filename_encoding.c
index 5e4fba716c13..cc62453f1c1b 100644
--- a/contrib/libarchive/libarchive/test/test_ustar_filename_encoding.c
+++ b/contrib/libarchive/libarchive/test/test_ustar_filename_encoding.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#include <locale.h>
diff --git a/contrib/libarchive/libarchive/test/test_ustar_filenames.c b/contrib/libarchive/libarchive/test/test_ustar_filenames.c
index c84dd67aa039..896b5cc9f1a1 100644
--- a/contrib/libarchive/libarchive/test/test_ustar_filenames.c
+++ b/contrib/libarchive/libarchive/test/test_ustar_filenames.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Exercise various lengths of filenames in ustar archives.
diff --git a/contrib/libarchive/libarchive/test/test_write_disk.c b/contrib/libarchive/libarchive/test/test_write_disk.c
index 00b9e45af239..fa0743f949f6 100644
--- a/contrib/libarchive/libarchive/test/test_write_disk.c
+++ b/contrib/libarchive/libarchive/test/test_write_disk.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define UMASK 022
/*
diff --git a/contrib/libarchive/libarchive/test/test_write_disk_appledouble.c b/contrib/libarchive/libarchive/test/test_write_disk_appledouble.c
index d82d698ebda7..8de6c8b50413 100644
--- a/contrib/libarchive/libarchive/test/test_write_disk_appledouble.c
+++ b/contrib/libarchive/libarchive/test/test_write_disk_appledouble.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_ACL_H
#include <sys/acl.h>
@@ -237,3 +236,87 @@ DEFINE_TEST(test_write_disk_appledouble)
assertEqualFile("hfscmp/file3", "nocmp/file3");
#endif
}
+
+/* Test writing apple doubles to disk from zip format */
+DEFINE_TEST(test_write_disk_appledouble_zip)
+{
+#if !defined(__APPLE__) || !defined(UF_COMPRESSED) || !defined(HAVE_SYS_XATTR_H)\
+ || !defined(HAVE_ZLIB_H)
+ skipping("MacOS-specific AppleDouble test");
+#else
+ const char *refname = "test_write_disk_appledouble_zip.zip";
+ struct archive *ad, *a;
+ struct archive_entry *ae;
+ struct stat st;
+
+ extract_reference_file(refname);
+
+ /*
+ * Extract an archive to disk.
+ */
+ assert((ad = archive_write_disk_new()) != NULL);
+ assertEqualIntA(ad, ARCHIVE_OK,
+ archive_write_disk_set_standard_lookup(ad));
+ assertEqualIntA(ad, ARCHIVE_OK,
+ archive_write_disk_set_options(ad,
+ ARCHIVE_EXTRACT_TIME |
+ ARCHIVE_EXTRACT_SECURE_SYMLINKS |
+ ARCHIVE_EXTRACT_SECURE_NODOTDOT));
+
+ 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,
+ refname, 512 * 20));
+
+ /* Skip The top level directory */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("apple_double_dir/", archive_entry_pathname(ae));
+
+ /* Extract apple_double_test */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("apple_double_dir/apple_double_dir_test/", archive_entry_pathname(ae));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_extract2(a, ae, ad));
+
+ /* Extract ._apple_double_dir_test which will be merged into apple_double_dir_test as metadata. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("apple_double_dir/._apple_double_dir_test", archive_entry_pathname(ae));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_extract2(a, ae, ad));
+
+ /* Extract test_file */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("apple_double_dir/test_file", archive_entry_pathname(ae));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_extract2(a, ae, ad));
+
+ /* Extract ._test_file which will be merged into test_file as metadata. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("apple_double_dir/._test_file", archive_entry_pathname(ae));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_extract2(a, ae, ad));
+
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ assertEqualIntA(ad, ARCHIVE_OK, archive_write_free(ad));
+
+ /* Test test_file */
+ assertEqualInt(0, stat("apple_double_dir/test_file", &st));
+ assertFileSize("apple_double_dir/test_file", 5);
+ failure("'%s' should have Resource Fork", "test_file");
+ assertEqualInt(1, has_xattr("apple_double_dir/test_file", "com.apple.ResourceFork"));
+
+ /* Test apple_double_dir_test */
+ failure("'%s' should have quarantine xattr", "apple_double_dir_test");
+ assertEqualInt(1, has_xattr("apple_double_dir/apple_double_dir_test", "com.apple.quarantine"));
+
+ /* Test ._test_file. */
+ failure("'apple_double_dir/._test_file' should be merged and removed");
+ assertFileNotExists("apple_double_dir/._test_file");
+
+ /* Test ._apple_double_dir_test */
+ failure("'apple_double_dir/._._apple_double_dir_test' should be merged and removed");
+ assertFileNotExists("apple_double_dir/._apple_double_dir_test");
+
+ assertChdir("..");
+
+#endif
+}
diff --git a/contrib/libarchive/libarchive/test/test_write_disk_appledouble_zip.zip.uu b/contrib/libarchive/libarchive/test/test_write_disk_appledouble_zip.zip.uu
new file mode 100644
index 000000000000..5ab67533d559
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_write_disk_appledouble_zip.zip.uu
@@ -0,0 +1,27 @@
+begin 644 test_write_disk_appledouble_zip.zip
+M4$L#!`H```````MM?%@````````````````1`!``87!P;&5?9&]U8FQE7V1I
+M<B]56`P`O=4%9K75!6;U`10`4$L#!`H```````MM?%@````````````````G
+M`!``87!P;&5?9&]U8FQE7V1I<B]A<'!L95]D;W5B;&5?9&ER7W1E<W0O55@,
+M`+W5!6:UU05F]0$4`%!+`P04``@`"``+;7Q8````````````````*``0`&%P
+M<&QE7V1O=6)L95]D:7(O+E]A<'!L95]D;W5B;&5?9&ER7W1E<W156`P`O=4%
+M9K75!6;U`10`8V`58V=@8F#P34Q6\`]6B%"``I`8`R<0&P%Q!1"#^*L8B`*.
+M(2%!4"9(QPP@%D)3PH@0%TW.S]5++"C(2=4K+$TL2LPKR<Q+92C4-S"P,+8V
+M@`)K:P8`4$L'"!2N=6M7````J@```%!+`P04``@`"`!93GQ8````````````
+M````&@`0`&%P<&QE7V1O=6)L95]D:7(O=&5S=%]F:6QE55@,`+'5!6;IGP5F
+M]0$4`"M)+2[A`@!02P<(QC6Y.P<````%````4$L#!!0`"``(`%E.?%@`````
+M```````````<`!``87!P;&5?9&]U8FQE7V1I<B\N7W1E<W1?9FEL9558#`"Q
+MU05FZ9\%9O4!%`!C8!5C9V!B8/!-3%;P#U:(4(`"D!@#)Q`;`;$;$(/X%4#,
+MQT`0.(:$!$&9%5",`8I2B_-+BY)3%=+RB[*Y`%!+!P@HPLP3/@```(8```!0
+M2P$"%0,*```````+;7Q8````````````````$0`,``````````!`[4$`````
+M87!P;&5?9&]U8FQE7V1I<B]56`@`O=4%9K75!6902P$"%0,*```````+;7Q8
+M````````````````)P`,``````````!`[4$_````87!P;&5?9&]U8FQE7V1I
+M<B]A<'!L95]D;W5B;&5?9&ER7W1E<W0O55@(`+W5!6:UU05F4$L!`A4#%``(
+M``@`"VU\6!2N=6M7````J@```"@`#```````````0*2!E````&%P<&QE7V1O
+M=6)L95]D:7(O+E]A<'!L95]D;W5B;&5?9&ER7W1E<W156`@`O=4%9K75!690
+M2P$"%0,4``@`"`!93GQ8QC6Y.P<````%````&@`,``````````!`I(%1`0``
+M87!P;&5?9&]U8FQE7V1I<B]T97-T7V9I;&556`@`L=4%9NF?!6902P$"%0,4
+M``@`"`!93GQ8*,+,$SX```"&````'``,``````````!`I(&P`0``87!P;&5?
+M9&]U8FQE7V1I<B\N7W1E<W1?9FEL9558"`"QU05FZ9\%9E!+!08`````!0`%
++`+@!``!(`@``````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_write_disk_failures.c b/contrib/libarchive/libarchive/test/test_write_disk_failures.c
index 180c06214b87..ff688b993d5f 100644
--- a/contrib/libarchive/libarchive/test/test_write_disk_failures.c
+++ b/contrib/libarchive/libarchive/test/test_write_disk_failures.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_write_disk_failures)
{
diff --git a/contrib/libarchive/libarchive/test/test_write_disk_hardlink.c b/contrib/libarchive/libarchive/test/test_write_disk_hardlink.c
index 184b9a8ffeff..215633ab40bf 100644
--- a/contrib/libarchive/libarchive/test/test_write_disk_hardlink.c
+++ b/contrib/libarchive/libarchive/test/test_write_disk_hardlink.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#if defined(_WIN32) && !defined(__CYGWIN__)
/* Execution bits, Group members bits and others bits do not work. */
diff --git a/contrib/libarchive/libarchive/test/test_write_disk_hfs_compression.c b/contrib/libarchive/libarchive/test/test_write_disk_hfs_compression.c
index 8a2e7df3b9b2..026e41533628 100644
--- a/contrib/libarchive/libarchive/test/test_write_disk_hfs_compression.c
+++ b/contrib/libarchive/libarchive/test/test_write_disk_hfs_compression.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_XATTR_H
#include <sys/xattr.h>
diff --git a/contrib/libarchive/libarchive/test/test_write_disk_lookup.c b/contrib/libarchive/libarchive/test/test_write_disk_lookup.c
index cabdae8ddc43..52b9a7457017 100644
--- a/contrib/libarchive/libarchive/test/test_write_disk_lookup.c
+++ b/contrib/libarchive/libarchive/test/test_write_disk_lookup.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
group_cleanup(void *d)
diff --git a/contrib/libarchive/libarchive/test/test_write_disk_mac_metadata.c b/contrib/libarchive/libarchive/test/test_write_disk_mac_metadata.c
index be13d96afddf..f9cfd9b3fd7c 100644
--- a/contrib/libarchive/libarchive/test/test_write_disk_mac_metadata.c
+++ b/contrib/libarchive/libarchive/test/test_write_disk_mac_metadata.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_ACL_H
#include <sys/acl.h>
diff --git a/contrib/libarchive/libarchive/test/test_write_disk_no_hfs_compression.c b/contrib/libarchive/libarchive/test/test_write_disk_no_hfs_compression.c
index 0af44d246a11..58ad187574c1 100644
--- a/contrib/libarchive/libarchive/test/test_write_disk_no_hfs_compression.c
+++ b/contrib/libarchive/libarchive/test/test_write_disk_no_hfs_compression.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_XATTR_H
#include <sys/xattr.h>
diff --git a/contrib/libarchive/libarchive/test/test_write_disk_perms.c b/contrib/libarchive/libarchive/test/test_write_disk_perms.c
index 89e593fd1b03..4df9f70bd998 100644
--- a/contrib/libarchive/libarchive/test/test_write_disk_perms.c
+++ b/contrib/libarchive/libarchive/test/test_write_disk_perms.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#if !defined(_WIN32) || defined(__CYGWIN__)
diff --git a/contrib/libarchive/libarchive/test/test_write_disk_secure.c b/contrib/libarchive/libarchive/test/test_write_disk_secure.c
index 6dd8fd9b0f7d..ddaf95d7497c 100644
--- a/contrib/libarchive/libarchive/test/test_write_disk_secure.c
+++ b/contrib/libarchive/libarchive/test/test_write_disk_secure.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define UMASK 022
diff --git a/contrib/libarchive/libarchive/test/test_write_disk_secure744.c b/contrib/libarchive/libarchive/test/test_write_disk_secure744.c
index 08c725e12b80..35824658ce65 100644
--- a/contrib/libarchive/libarchive/test/test_write_disk_secure744.c
+++ b/contrib/libarchive/libarchive/test/test_write_disk_secure744.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define UMASK 022
@@ -75,7 +74,7 @@ DEFINE_TEST(test_write_disk_secure744)
archive_entry_free(ae);
*p++ = '/';
- sprintf(p, "target%d", n);
+ snprintf(p, buff_size - (p - buff), "target%d", n);
/* Try to create a file through the symlink, should fail. */
assert((ae = archive_entry_new()) != NULL);
diff --git a/contrib/libarchive/libarchive/test/test_write_disk_secure745.c b/contrib/libarchive/libarchive/test/test_write_disk_secure745.c
index 870b06475cef..7b908ccc8905 100644
--- a/contrib/libarchive/libarchive/test/test_write_disk_secure745.c
+++ b/contrib/libarchive/libarchive/test/test_write_disk_secure745.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define UMASK 022
diff --git a/contrib/libarchive/libarchive/test/test_write_disk_secure746.c b/contrib/libarchive/libarchive/test/test_write_disk_secure746.c
index 5ce1fd9c4c43..3f0588914707 100644
--- a/contrib/libarchive/libarchive/test/test_write_disk_secure746.c
+++ b/contrib/libarchive/libarchive/test/test_write_disk_secure746.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define UMASK 022
@@ -39,9 +38,6 @@ __FBSDID("$FreeBSD$");
*/
DEFINE_TEST(test_write_disk_secure746a)
{
-#if defined(_WIN32) && !defined(__CYGWIN__)
- skipping("archive_write_disk security checks not supported on Windows");
-#else
struct archive *a;
struct archive_entry *ae;
@@ -75,7 +71,6 @@ DEFINE_TEST(test_write_disk_secure746a)
assertEqualIntA(a, ARCHIVE_FATAL, archive_write_close(a));
archive_write_free(a);
-#endif
}
/*
diff --git a/contrib/libarchive/libarchive/test/test_write_disk_sparse.c b/contrib/libarchive/libarchive/test/test_write_disk_sparse.c
index 1566cd7a845e..36fd6944584d 100644
--- a/contrib/libarchive/libarchive/test/test_write_disk_sparse.c
+++ b/contrib/libarchive/libarchive/test/test_write_disk_sparse.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Write a file using archive_write_data call, read the file
diff --git a/contrib/libarchive/libarchive/test/test_write_disk_symlink.c b/contrib/libarchive/libarchive/test/test_write_disk_symlink.c
index b6f0b3c85170..65194d94c081 100644
--- a/contrib/libarchive/libarchive/test/test_write_disk_symlink.c
+++ b/contrib/libarchive/libarchive/test/test_write_disk_symlink.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Exercise symlink recreation.
diff --git a/contrib/libarchive/libarchive/test/test_write_disk_times.c b/contrib/libarchive/libarchive/test/test_write_disk_times.c
index 7d02d5854d77..265da4c2b875 100644
--- a/contrib/libarchive/libarchive/test/test_write_disk_times.c
+++ b/contrib/libarchive/libarchive/test/test_write_disk_times.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Exercise time restores in archive_write_disk(), including
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_b64encode.c b/contrib/libarchive/libarchive/test/test_write_filter_b64encode.c
index 665087b97885..e33ff8a9817c 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_b64encode.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_b64encode.c
@@ -25,7 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* A basic exercise of b64encode reading and writing.
@@ -64,7 +63,7 @@ DEFINE_TEST(test_write_filter_b64encode)
assert((ae = archive_entry_new()) != NULL);
archive_entry_set_filetype(ae, AE_IFREG);
archive_entry_set_size(ae, datasize);
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
archive_entry_copy_pathname(ae, path);
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
assertA(datasize
@@ -79,7 +78,7 @@ DEFINE_TEST(test_write_filter_b64encode)
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, buff, used1));
for (i = 0; i < 99; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualIntA(a, 0, archive_read_next_header(a, &ae)))
break;
assertEqualString(path, archive_entry_pathname(ae));
@@ -111,7 +110,7 @@ DEFINE_TEST(test_write_filter_b64encode)
assertEqualIntA(a, ARCHIVE_OK,
archive_write_open_memory(a, buff, buffsize, &used2));
for (i = 0; i < 99; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, path);
archive_entry_set_size(ae, datasize);
@@ -128,7 +127,7 @@ DEFINE_TEST(test_write_filter_b64encode)
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, buff, used2));
for (i = 0; i < 99; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(0, archive_read_next_header(a, &ae)))
break;
assertEqualString(path, archive_entry_pathname(ae));
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_bzip2.c b/contrib/libarchive/libarchive/test/test_write_filter_bzip2.c
index 4f32d28cbed4..f48bcc213231 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_bzip2.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_bzip2.c
@@ -25,7 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/test/test_write_compress_bzip2.c 191183 2009-04-17 01:06:31Z kientzle $");
/*
* A basic exercise of bzip2 reading and writing.
@@ -83,7 +82,7 @@ DEFINE_TEST(test_write_filter_bzip2)
archive_entry_set_filetype(ae, AE_IFREG);
archive_entry_set_size(ae, datasize);
for (i = 0; i < 999; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
archive_entry_copy_pathname(ae, path);
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
assertA(datasize
@@ -99,7 +98,7 @@ DEFINE_TEST(test_write_filter_bzip2)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used1));
for (i = 0; i < 999; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(0, archive_read_next_header(a, &ae)))
break;
assertEqualString(path, archive_entry_pathname(ae));
@@ -133,7 +132,7 @@ DEFINE_TEST(test_write_filter_bzip2)
assertEqualIntA(a, ARCHIVE_OK,
archive_write_open_memory(a, buff, buffsize, &used2));
for (i = 0; i < 999; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, path);
archive_entry_set_size(ae, datasize);
@@ -160,7 +159,7 @@ DEFINE_TEST(test_write_filter_bzip2)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used2));
for (i = 0; i < 999; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(0, archive_read_next_header(a, &ae)))
break;
assertEqualString(path, archive_entry_pathname(ae));
@@ -187,7 +186,7 @@ DEFINE_TEST(test_write_filter_bzip2)
assertEqualIntA(a, ARCHIVE_OK,
archive_write_open_memory(a, buff, buffsize, &used2));
for (i = 0; i < 999; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, path);
archive_entry_set_size(ae, datasize);
@@ -212,7 +211,7 @@ DEFINE_TEST(test_write_filter_bzip2)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used2));
for (i = 0; i < 999; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(0, archive_read_next_header(a, &ae)))
break;
assertEqualString(path, archive_entry_pathname(ae));
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_compress.c b/contrib/libarchive/libarchive/test/test_write_filter_compress.c
index 1b8910e51adb..f7b9565b7db2 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_compress.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_compress.c
@@ -25,7 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/test/test_write_compress.c 189308 2009-03-03 17:02:51Z kientzle $");
/*
* A basic exercise of compress reading and writing.
@@ -59,7 +58,7 @@ DEFINE_TEST(test_write_filter_compress)
archive_write_open_memory(a, buff, buffsize, &used));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, path);
archive_entry_set_size(ae, datasize);
@@ -83,7 +82,7 @@ DEFINE_TEST(test_write_filter_compress)
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(0, archive_read_next_header(a, &ae)))
break;
assertEqualString(path, archive_entry_pathname(ae));
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_gzip.c b/contrib/libarchive/libarchive/test/test_write_filter_gzip.c
index 935fb51f5140..ae81a4fc59d6 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_gzip.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_gzip.c
@@ -25,7 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/test/test_write_compress_gzip.c 191183 2009-04-17 01:06:31Z kientzle $");
/*
* A basic exercise of gzip reading and writing.
@@ -85,7 +84,7 @@ DEFINE_TEST(test_write_filter_gzip)
archive_entry_set_filetype(ae, AE_IFREG);
archive_entry_set_size(ae, datasize);
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
archive_entry_copy_pathname(ae, path);
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
assertA(datasize
@@ -113,7 +112,7 @@ DEFINE_TEST(test_write_filter_gzip)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used1));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(ARCHIVE_OK,
archive_read_next_header(a, &ae)))
break;
@@ -148,7 +147,7 @@ DEFINE_TEST(test_write_filter_gzip)
archive_write_set_options(a, "gzip:compression-level=9"));
assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, path);
archive_entry_set_size(ae, datasize);
@@ -187,7 +186,7 @@ DEFINE_TEST(test_write_filter_gzip)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used2));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(ARCHIVE_OK,
archive_read_next_header(a, &ae)))
break;
@@ -212,7 +211,7 @@ DEFINE_TEST(test_write_filter_gzip)
assertEqualIntA(a, ARCHIVE_OK,
archive_write_open_memory(a, buff, buffsize, &used2));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, path);
archive_entry_set_size(ae, datasize);
@@ -249,7 +248,7 @@ DEFINE_TEST(test_write_filter_gzip)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used2));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(ARCHIVE_OK,
archive_read_next_header(a, &ae)))
break;
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 23b11dba79a6..ee29f034231c 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_gzip_timestamp.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_gzip_timestamp.c
@@ -26,7 +26,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_write_filter_gzip_timestamp)
{
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_lrzip.c b/contrib/libarchive/libarchive/test/test_write_filter_lrzip.c
index f28c8358363d..2efc2ec284a4 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_lrzip.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_lrzip.c
@@ -68,7 +68,7 @@ DEFINE_TEST(test_write_filter_lrzip)
archive_entry_set_filetype(ae, AE_IFREG);
archive_entry_set_size(ae, datasize);
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
archive_entry_copy_pathname(ae, path);
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
assertA(datasize
@@ -84,7 +84,7 @@ DEFINE_TEST(test_write_filter_lrzip)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used1));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(ARCHIVE_OK,
archive_read_next_header(a, &ae)))
break;
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_lz4.c b/contrib/libarchive/libarchive/test/test_write_filter_lz4.c
index 4f2135a31507..97a80321dede 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_lz4.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_lz4.c
@@ -25,7 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* A basic exercise of lz4 reading and writing.
@@ -62,7 +61,7 @@ DEFINE_TEST(test_write_filter_lz4)
assert(NULL != (buff = (char *)malloc(buffsize)));
datasize = 10000;
- assert(NULL != (data = (char *)calloc(1, datasize)));
+ assert(NULL != (data = (char *)calloc(datasize, 1)));
filecount = 10;
/*
@@ -84,7 +83,7 @@ DEFINE_TEST(test_write_filter_lz4)
archive_entry_set_filetype(ae, AE_IFREG);
archive_entry_set_size(ae, datasize);
for (i = 0; i < filecount; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
archive_entry_copy_pathname(ae, path);
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
assertA(datasize
@@ -107,7 +106,7 @@ DEFINE_TEST(test_write_filter_lz4)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used1));
for (i = 0; i < filecount; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(ARCHIVE_OK,
archive_read_next_header(a, &ae)))
break;
@@ -142,7 +141,7 @@ DEFINE_TEST(test_write_filter_lz4)
assertEqualIntA(a, ARCHIVE_OK,
archive_write_open_memory(a, buff, buffsize, &used2));
for (i = 0; i < filecount; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, path);
archive_entry_set_size(ae, datasize);
@@ -170,7 +169,7 @@ DEFINE_TEST(test_write_filter_lz4)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used2));
for (i = 0; i < filecount; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(ARCHIVE_OK,
archive_read_next_header(a, &ae)))
break;
@@ -195,7 +194,7 @@ DEFINE_TEST(test_write_filter_lz4)
assertEqualIntA(a, ARCHIVE_OK,
archive_write_open_memory(a, buff, buffsize, &used2));
for (i = 0; i < filecount; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, path);
archive_entry_set_size(ae, datasize);
@@ -225,7 +224,7 @@ DEFINE_TEST(test_write_filter_lz4)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used2));
for (i = 0; i < filecount; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(ARCHIVE_OK,
archive_read_next_header(a, &ae)))
break;
@@ -306,7 +305,7 @@ test_options(const char *options)
assert(NULL != (buff = (char *)malloc(buffsize)));
datasize = 10000;
- assert(NULL != (data = (char *)calloc(1, datasize)));
+ assert(NULL != (data = (char *)calloc(datasize, 1)));
filecount = 10;
/*
@@ -330,7 +329,7 @@ test_options(const char *options)
archive_entry_set_filetype(ae, AE_IFREG);
archive_entry_set_size(ae, datasize);
for (i = 0; i < filecount; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
archive_entry_copy_pathname(ae, path);
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
assertA(datasize
@@ -350,7 +349,7 @@ test_options(const char *options)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used1));
for (i = 0; i < filecount; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(ARCHIVE_OK,
archive_read_next_header(a, &ae)))
break;
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_lzip.c b/contrib/libarchive/libarchive/test/test_write_filter_lzip.c
index 145a3084d3de..8d6544668980 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_lzip.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_lzip.c
@@ -26,7 +26,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* A basic exercise of lzip reading and writing.
@@ -81,7 +80,7 @@ DEFINE_TEST(test_write_filter_lzip)
archive_entry_set_filetype(ae, AE_IFREG);
archive_entry_set_size(ae, datasize);
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
archive_entry_copy_pathname(ae, path);
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
assertA(datasize
@@ -103,7 +102,7 @@ DEFINE_TEST(test_write_filter_lzip)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used1));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(ARCHIVE_OK,
archive_read_next_header(a, &ae)))
break;
@@ -133,7 +132,7 @@ DEFINE_TEST(test_write_filter_lzip)
archive_write_set_filter_option(a, NULL, "compression-level", "9"));
assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, path);
archive_entry_set_size(ae, datasize);
@@ -157,7 +156,7 @@ DEFINE_TEST(test_write_filter_lzip)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used2));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
failure("Trying to read %s", path);
if (!assertEqualIntA(a, ARCHIVE_OK,
archive_read_next_header(a, &ae)))
@@ -181,7 +180,7 @@ DEFINE_TEST(test_write_filter_lzip)
archive_write_set_filter_option(a, NULL, "compression-level", "0"));
assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, path);
archive_entry_set_size(ae, datasize);
@@ -210,7 +209,7 @@ DEFINE_TEST(test_write_filter_lzip)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used2));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(ARCHIVE_OK,
archive_read_next_header(a, &ae)))
break;
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_lzma.c b/contrib/libarchive/libarchive/test/test_write_filter_lzma.c
index 68e489832504..d7c0c5b21b6b 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_lzma.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_lzma.c
@@ -25,7 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/test/test_write_compress_lzma.c 191183 2009-04-17 01:06:31Z kientzle $");
/*
* A basic exercise of lzma reading and writing.
@@ -80,7 +79,7 @@ DEFINE_TEST(test_write_filter_lzma)
archive_entry_set_filetype(ae, AE_IFREG);
archive_entry_set_size(ae, datasize);
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
archive_entry_copy_pathname(ae, path);
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
assertA(datasize
@@ -102,7 +101,7 @@ DEFINE_TEST(test_write_filter_lzma)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used1));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(ARCHIVE_OK,
archive_read_next_header(a, &ae)))
break;
@@ -132,7 +131,7 @@ DEFINE_TEST(test_write_filter_lzma)
archive_write_set_filter_option(a, NULL, "compression-level", "9"));
assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, path);
archive_entry_set_size(ae, datasize);
@@ -156,7 +155,7 @@ DEFINE_TEST(test_write_filter_lzma)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used2));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
failure("Trying to read %s", path);
if (!assertEqualIntA(a, ARCHIVE_OK,
archive_read_next_header(a, &ae)))
@@ -180,7 +179,7 @@ DEFINE_TEST(test_write_filter_lzma)
archive_write_set_filter_option(a, NULL, "compression-level", "0"));
assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, path);
archive_entry_set_size(ae, datasize);
@@ -214,7 +213,7 @@ DEFINE_TEST(test_write_filter_lzma)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used2));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(ARCHIVE_OK,
archive_read_next_header(a, &ae)))
break;
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_lzop.c b/contrib/libarchive/libarchive/test/test_write_filter_lzop.c
index 92db7bf3dc43..87843f49bd3b 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_lzop.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_lzop.c
@@ -25,8 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
-
/*
* A basic exercise of lzop reading and writing.
*/
@@ -57,7 +55,7 @@ DEFINE_TEST(test_write_filter_lzop)
assert(NULL != (buff = (char *)malloc(buffsize)));
datasize = 10000;
- assert(NULL != (data = (char *)calloc(1, datasize)));
+ assert(NULL != (data = (char *)calloc(datasize, 1)));
filecount = 10;
/*
@@ -79,7 +77,7 @@ DEFINE_TEST(test_write_filter_lzop)
archive_entry_set_filetype(ae, AE_IFREG);
archive_entry_set_size(ae, datasize);
for (i = 0; i < filecount; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
archive_entry_copy_pathname(ae, path);
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
assertA(datasize
@@ -99,7 +97,7 @@ DEFINE_TEST(test_write_filter_lzop)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used1));
for (i = 0; i < filecount; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(ARCHIVE_OK,
archive_read_next_header(a, &ae)))
break;
@@ -135,7 +133,7 @@ DEFINE_TEST(test_write_filter_lzop)
assertEqualIntA(a, ARCHIVE_OK,
archive_write_open_memory(a, buff, buffsize, &used2));
for (i = 0; i < filecount; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, path);
archive_entry_set_size(ae, datasize);
@@ -163,7 +161,7 @@ DEFINE_TEST(test_write_filter_lzop)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used2));
for (i = 0; i < filecount; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(ARCHIVE_OK,
archive_read_next_header(a, &ae)))
break;
@@ -188,7 +186,7 @@ DEFINE_TEST(test_write_filter_lzop)
assertEqualIntA(a, ARCHIVE_OK,
archive_write_open_memory(a, buff, buffsize, &used2));
for (i = 0; i < filecount; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, path);
archive_entry_set_size(ae, datasize);
@@ -218,7 +216,7 @@ DEFINE_TEST(test_write_filter_lzop)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used2));
for (i = 0; i < filecount; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(ARCHIVE_OK,
archive_read_next_header(a, &ae)))
break;
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_program.c b/contrib/libarchive/libarchive/test/test_write_filter_program.c
index 9fe264c018dc..a1f93ab79f5a 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_program.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_program.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/test/test_write_compress_program.c 201247 2009-12-30 05:59:21Z kientzle $");
static char buff[1000000];
static char buff2[64];
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_uuencode.c b/contrib/libarchive/libarchive/test/test_write_filter_uuencode.c
index 57a4b49bd2a6..7eda278b35cd 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_uuencode.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_uuencode.c
@@ -25,7 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* A basic exercise of uuencode reading and writing.
@@ -64,7 +63,7 @@ DEFINE_TEST(test_write_filter_uuencode)
assert((ae = archive_entry_new()) != NULL);
archive_entry_set_filetype(ae, AE_IFREG);
archive_entry_set_size(ae, datasize);
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
archive_entry_copy_pathname(ae, path);
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
assertA(datasize
@@ -79,7 +78,7 @@ DEFINE_TEST(test_write_filter_uuencode)
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, buff, used1));
for (i = 0; i < 99; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualIntA(a, 0, archive_read_next_header(a, &ae)))
break;
assertEqualString(path, archive_entry_pathname(ae));
@@ -111,7 +110,7 @@ DEFINE_TEST(test_write_filter_uuencode)
assertEqualIntA(a, ARCHIVE_OK,
archive_write_open_memory(a, buff, buffsize, &used2));
for (i = 0; i < 99; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, path);
archive_entry_set_size(ae, datasize);
@@ -128,7 +127,7 @@ DEFINE_TEST(test_write_filter_uuencode)
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, buff, used2));
for (i = 0; i < 99; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(0, archive_read_next_header(a, &ae)))
break;
assertEqualString(path, archive_entry_pathname(ae));
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_xz.c b/contrib/libarchive/libarchive/test/test_write_filter_xz.c
index bf1265c65b6f..db4e5dafa274 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_xz.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_xz.c
@@ -25,7 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/test/test_write_compress_xz.c 191183 2009-04-17 01:06:31Z kientzle $");
/*
* A basic exercise of xz reading and writing.
@@ -80,7 +79,7 @@ DEFINE_TEST(test_write_filter_xz)
archive_entry_set_filetype(ae, AE_IFREG);
archive_entry_set_size(ae, datasize);
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
archive_entry_copy_pathname(ae, path);
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
assertA(datasize
@@ -102,7 +101,7 @@ DEFINE_TEST(test_write_filter_xz)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used1));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(ARCHIVE_OK,
archive_read_next_header(a, &ae)))
break;
@@ -132,7 +131,7 @@ DEFINE_TEST(test_write_filter_xz)
archive_write_set_filter_option(a, NULL, "compression-level", "9"));
assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, path);
archive_entry_set_size(ae, datasize);
@@ -163,7 +162,7 @@ DEFINE_TEST(test_write_filter_xz)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used2));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
failure("Trying to read %s", path);
if (!assertEqualIntA(a, ARCHIVE_OK,
archive_read_next_header(a, &ae)))
@@ -187,7 +186,7 @@ DEFINE_TEST(test_write_filter_xz)
archive_write_set_filter_option(a, NULL, "compression-level", "0"));
assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, path);
archive_entry_set_size(ae, datasize);
@@ -220,7 +219,7 @@ DEFINE_TEST(test_write_filter_xz)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used2));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(ARCHIVE_OK,
archive_read_next_header(a, &ae)))
break;
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_zstd.c b/contrib/libarchive/libarchive/test/test_write_filter_zstd.c
index b5f061a001aa..da711f9e4bf9 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_zstd.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_zstd.c
@@ -25,7 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_write_filter_zstd)
{
@@ -74,7 +73,7 @@ DEFINE_TEST(test_write_filter_zstd)
archive_entry_set_filetype(ae, AE_IFREG);
archive_entry_set_size(ae, datasize);
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
archive_entry_copy_pathname(ae, path);
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
assertA(datasize
@@ -96,7 +95,7 @@ DEFINE_TEST(test_write_filter_zstd)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used1));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
if (!assertEqualInt(ARCHIVE_OK,
archive_read_next_header(a, &ae)))
break;
@@ -129,9 +128,120 @@ DEFINE_TEST(test_write_filter_zstd)
archive_write_set_filter_option(a, NULL, "compression-level", "-1")); */
assertEqualIntA(a, ARCHIVE_OK,
archive_write_set_filter_option(a, NULL, "compression-level", "7"));
+ assertEqualIntA(a, ARCHIVE_FAILED,
+ archive_write_set_filter_option(a, NULL, "threads", "-1")); /* negative */
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "threads", "4"));
+#if HAVE_ZSTD_H && HAVE_ZSTD_compressStream
+ /* frame-per-file: boolean */
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "frame-per-file", ""));
+ /* min-frame-in: >= 0 */
+ assertEqualIntA(a, ARCHIVE_FAILED,
+ archive_write_set_filter_option(a, NULL, "min-frame-out", ""));
+ assertEqualIntA(a, ARCHIVE_FAILED,
+ archive_write_set_filter_option(a, NULL, "min-frame-out", "-1"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "min-frame-out", "0"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "min-frame-out", "1048576"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "min-frame-out", "1k"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "min-frame-out", "1kB"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "min-frame-out", "1M"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "min-frame-out", "1MB"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "min-frame-out", "1G"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "min-frame-out", "1GB"));
+ /* min-frame-out: >= 0 */
+ assertEqualIntA(a, ARCHIVE_FAILED,
+ archive_write_set_filter_option(a, NULL, "min-frame-in", ""));
+ assertEqualIntA(a, ARCHIVE_FAILED,
+ archive_write_set_filter_option(a, NULL, "min-frame-in", "-1"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "min-frame-in", "0"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "min-frame-in", "1048576"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "min-frame-in", "1k"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "min-frame-in", "1kB"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "min-frame-in", "1M"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "min-frame-in", "1MB"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "min-frame-in", "1G"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "min-frame-in", "1GB"));
+ /* max-frame-in: >= 1024 */
+ assertEqualIntA(a, ARCHIVE_FAILED,
+ archive_write_set_filter_option(a, NULL, "max-frame-in", ""));
+ assertEqualIntA(a, ARCHIVE_FAILED,
+ archive_write_set_filter_option(a, NULL, "max-frame-in", "-1"));
+ assertEqualIntA(a, ARCHIVE_FAILED,
+ archive_write_set_filter_option(a, NULL, "max-frame-in", "0"));
+ assertEqualIntA(a, ARCHIVE_FAILED,
+ archive_write_set_filter_option(a, NULL, "max-frame-in", "1023"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "max-frame-in", "1024"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "max-frame-in", "1048576"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "max-frame-in", "1k"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "max-frame-in", "1kB"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "max-frame-in", "1M"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "max-frame-in", "1MB"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "max-frame-in", "1G"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "max-frame-in", "1GB"));
+ /* max-frame-out: >= 1024 */
+ assertEqualIntA(a, ARCHIVE_FAILED,
+ archive_write_set_filter_option(a, NULL, "max-frame-out", ""));
+ assertEqualIntA(a, ARCHIVE_FAILED,
+ archive_write_set_filter_option(a, NULL, "max-frame-out", "-1"));
+ assertEqualIntA(a, ARCHIVE_FAILED,
+ archive_write_set_filter_option(a, NULL, "max-frame-out", "0"));
+ assertEqualIntA(a, ARCHIVE_FAILED,
+ archive_write_set_filter_option(a, NULL, "max-frame-out", "1023"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "max-frame-out", "1024"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "max-frame-out", "1048576"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "max-frame-out", "1k"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "max-frame-out", "1kB"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "max-frame-out", "1M"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "max-frame-out", "1MB"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_filter_option(a, NULL, "max-frame-out", "1G"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ 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_FAILED,
+ archive_write_set_filter_option(a, NULL, "long", "-1")); /* negative */
+#endif
assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, path);
archive_entry_set_size(ae, datasize);
@@ -154,7 +264,7 @@ DEFINE_TEST(test_write_filter_zstd)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used2));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
failure("Trying to read %s", path);
if (!assertEqualIntA(a, ARCHIVE_OK,
archive_read_next_header(a, &ae)))
@@ -181,7 +291,7 @@ DEFINE_TEST(test_write_filter_zstd)
archive_entry_set_filetype(ae, AE_IFREG);
archive_entry_set_size(ae, datasize);
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
archive_entry_copy_pathname(ae, path);
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
assertA(datasize == (size_t)archive_write_data(a, data, datasize));
@@ -201,7 +311,7 @@ DEFINE_TEST(test_write_filter_zstd)
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_memory(a, buff, used3));
for (i = 0; i < 100; i++) {
- sprintf(path, "file%03d", i);
+ snprintf(path, sizeof(path), "file%03d", i);
failure("Trying to read %s", path);
if (!assertEqualIntA(a, ARCHIVE_OK,
archive_read_next_header(a, &ae)))
diff --git a/contrib/libarchive/libarchive/test/test_write_format_7zip.c b/contrib/libarchive/libarchive/test/test_write_format_7zip.c
index c8fdcd02cc84..d91e88d8f40f 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_7zip.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_7zip.c
@@ -25,7 +25,6 @@
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
test_basic(const char *compression_type)
diff --git a/contrib/libarchive/libarchive/test/test_write_format_7zip_empty.c b/contrib/libarchive/libarchive/test/test_write_format_7zip_empty.c
index 9a503e9d6bac..817009f4355b 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_7zip_empty.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_7zip_empty.c
@@ -25,7 +25,6 @@
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Test writing an empty archive.
diff --git a/contrib/libarchive/libarchive/test/test_write_format_7zip_large.c b/contrib/libarchive/libarchive/test/test_write_format_7zip_large.c
index 5c49f59a1d4d..ac2fa08b4125 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_7zip_large.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_7zip_large.c
@@ -25,9 +25,8 @@
#include "test.h"
-__FBSDID("$FreeBSD$");
-#define LARGE_SIZE (16*1024*1024)
+#define LARGE_SIZE (1*1024*1024)
static void
test_large(const char *compression_type)
{
@@ -37,7 +36,6 @@ test_large(const char *compression_type)
size_t buffsize = LARGE_SIZE + 1024 * 256;
size_t datasize = LARGE_SIZE;
char *buff, *filedata, *filedata2;
- unsigned i;
assert((buff = malloc(buffsize)) != NULL);
assert((filedata = malloc(datasize)) != NULL);
@@ -87,8 +85,7 @@ test_large(const char *compression_type)
/* NOTE: PPMd cannot handle random data correctly.*/
memset(filedata, 'a', datasize);
} else {
- for (i = 0; i < datasize; i++)
- filedata[i] = (char)rand();
+ fill_with_pseudorandom_data(filedata, datasize);
}
assertEqualInt(datasize, archive_write_data(a, filedata, datasize));
diff --git a/contrib/libarchive/libarchive/test/test_write_format_ar.c b/contrib/libarchive/libarchive/test/test_write_format_ar.c
index 85dffdc7277b..9c6cd5ecdb05 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_ar.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_ar.c
@@ -26,7 +26,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static char buff[4096];
static char buff2[64];
diff --git a/contrib/libarchive/libarchive/test/test_write_format_cpio.c b/contrib/libarchive/libarchive/test/test_write_format_cpio.c
index a1c1a86fb0af..827cad3590c4 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_cpio.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_cpio.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
test_format(int (*set_format)(struct archive *))
diff --git a/contrib/libarchive/libarchive/test/test_write_format_cpio_empty.c b/contrib/libarchive/libarchive/test/test_write_format_cpio_empty.c
index df9dee3bf7e1..22682235fca3 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_cpio_empty.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_cpio_empty.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Check that an "empty" cpio archive is correctly created.
diff --git a/contrib/libarchive/libarchive/test/test_write_format_cpio_newc.c b/contrib/libarchive/libarchive/test/test_write_format_cpio_newc.c
index 6b4bb5b7817c..786b5d739b4d 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_cpio_newc.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_cpio_newc.c
@@ -23,8 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
-
static int
is_hex(const char *p, size_t l)
diff --git a/contrib/libarchive/libarchive/test/test_write_format_cpio_odc.c b/contrib/libarchive/libarchive/test/test_write_format_cpio_odc.c
index ddf377231652..c763fcd2520c 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_cpio_odc.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_cpio_odc.c
@@ -23,8 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
-
static int
is_octal(const char *p, size_t l)
diff --git a/contrib/libarchive/libarchive/test/test_write_format_gnutar.c b/contrib/libarchive/libarchive/test/test_write_format_gnutar.c
index 2a4c383e7aff..d72d076d115c 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_gnutar.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_gnutar.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static char buff2[64];
diff --git a/contrib/libarchive/libarchive/test/test_write_format_gnutar_filenames.c b/contrib/libarchive/libarchive/test/test_write_format_gnutar_filenames.c
index 655e998ed827..aae5a2a6f787 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_gnutar_filenames.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_gnutar_filenames.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Inspired by Github issue #682, which reported that gnutar filenames
diff --git a/contrib/libarchive/libarchive/test/test_write_format_iso9660.c b/contrib/libarchive/libarchive/test/test_write_format_iso9660.c
index e4e98bb95c29..7b455794c5de 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_iso9660.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_iso9660.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static char buff2[64];
DEFINE_TEST(test_write_format_iso9660)
@@ -385,14 +384,14 @@ DEFINE_TEST(test_write_format_iso9660)
assertEqualInt(2048, archive_entry_size(ae));
/*
- * Read "hardlnk"
+ * Read "file"
*/
assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
assertEqualInt(2, archive_entry_atime(ae));
assertEqualInt(3, archive_entry_birthtime(ae));
assertEqualInt(4, archive_entry_ctime(ae));
assertEqualInt(5, archive_entry_mtime(ae));
- assertEqualString("hardlnk", archive_entry_pathname(ae));
+ assertEqualString("file", archive_entry_pathname(ae));
assert((AE_IFREG | 0555) == archive_entry_mode(ae));
assertEqualInt(2, archive_entry_nlink(ae));
assertEqualInt(8, archive_entry_size(ae));
@@ -400,15 +399,15 @@ DEFINE_TEST(test_write_format_iso9660)
assertEqualMem(buff2, "12345678", 8);
/*
- * Read "file"
+ * Read "hardlnk"
*/
assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
assertEqualInt(2, archive_entry_atime(ae));
assertEqualInt(3, archive_entry_birthtime(ae));
assertEqualInt(4, archive_entry_ctime(ae));
assertEqualInt(5, archive_entry_mtime(ae));
- assertEqualString("file", archive_entry_pathname(ae));
- assertEqualString("hardlnk", archive_entry_hardlink(ae));
+ assertEqualString("hardlnk", archive_entry_pathname(ae));
+ assertEqualString("file", archive_entry_hardlink(ae));
assert((AE_IFREG | 0555) == archive_entry_mode(ae));
assertEqualInt(2, archive_entry_nlink(ae));
assertEqualInt(0, archive_entry_size(ae));
@@ -982,13 +981,13 @@ DEFINE_TEST(test_write_format_iso9660)
assertEqualInt(2048, archive_entry_size(ae));
/*
- * Read "hardlink"
+ * Read "file"
*/
assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
assertEqualInt(5, archive_entry_atime(ae));
assertEqualInt(5, archive_entry_ctime(ae));
assertEqualInt(5, archive_entry_mtime(ae));
- assertEqualString("HARDLNK", archive_entry_pathname(ae));
+ assertEqualString("FILE", archive_entry_pathname(ae));
assertEqualString(NULL, archive_entry_hardlink(ae));
assert((AE_IFREG | 0400) == archive_entry_mode(ae));
assertEqualInt(8, archive_entry_size(ae));
@@ -996,15 +995,15 @@ DEFINE_TEST(test_write_format_iso9660)
assertEqualMem(buff2, "12345678", 8);
/*
- * Read "file"
+ * Read "hardlnk"
*/
assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
assertEqualInt(5, archive_entry_atime(ae));
assertEqualInt(0, archive_entry_birthtime(ae));
assertEqualInt(5, archive_entry_ctime(ae));
assertEqualInt(5, archive_entry_mtime(ae));
- assertEqualString("FILE", archive_entry_pathname(ae));
- assertEqualString("HARDLNK", archive_entry_hardlink(ae));
+ assertEqualString("HARDLNK", archive_entry_pathname(ae));
+ assertEqualString("FILE", archive_entry_hardlink(ae));
assert((AE_IFREG | 0400) == archive_entry_mode(ae));
assertEqualInt(2, archive_entry_nlink(ae));
assertEqualInt(0, archive_entry_size(ae));
diff --git a/contrib/libarchive/libarchive/test/test_write_format_mtree.c b/contrib/libarchive/libarchive/test/test_write_format_mtree.c
index 4dcefbc8bda3..ed065f9c1340 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_mtree.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_mtree.c
@@ -25,7 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static char buff[4096];
static struct {
diff --git a/contrib/libarchive/libarchive/test/test_write_format_mtree_absolute_path.c b/contrib/libarchive/libarchive/test/test_write_format_mtree_absolute_path.c
index e3972f1f1135..0ad73792add1 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_mtree_absolute_path.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_mtree_absolute_path.c
@@ -25,7 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static char buff[4096];
diff --git a/contrib/libarchive/libarchive/test/test_write_format_mtree_classic.c b/contrib/libarchive/libarchive/test/test_write_format_mtree_classic.c
index 9a75fdd71f52..f155df591895 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_mtree_classic.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_mtree_classic.c
@@ -25,7 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static char buff[4096];
static struct {
diff --git a/contrib/libarchive/libarchive/test/test_write_format_mtree_classic_indent.c b/contrib/libarchive/libarchive/test/test_write_format_mtree_classic_indent.c
index 6d1c54911558..187cc2be0e4b 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_mtree_classic_indent.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_mtree_classic_indent.c
@@ -25,7 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static char buff[4096];
static struct {
diff --git a/contrib/libarchive/libarchive/test/test_write_format_mtree_fflags.c b/contrib/libarchive/libarchive/test/test_write_format_mtree_fflags.c
index 820d86f70b3d..42a1d6522d7f 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_mtree_fflags.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_mtree_fflags.c
@@ -25,7 +25,7 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
+
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
diff --git a/contrib/libarchive/libarchive/test/test_write_format_mtree_no_separator.c b/contrib/libarchive/libarchive/test/test_write_format_mtree_no_separator.c
index faf42dd5245b..c7b64c1ba6a7 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_mtree_no_separator.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_mtree_no_separator.c
@@ -25,7 +25,7 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
+
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
diff --git a/contrib/libarchive/libarchive/test/test_write_format_mtree_quoted_filename.c b/contrib/libarchive/libarchive/test/test_write_format_mtree_quoted_filename.c
index 63e927a81ffe..aca904c83f56 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_mtree_quoted_filename.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_mtree_quoted_filename.c
@@ -25,7 +25,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static char buff[4096];
diff --git a/contrib/libarchive/libarchive/test/test_write_format_pax.c b/contrib/libarchive/libarchive/test/test_write_format_pax.c
index 4538aac8241d..625a3742c044 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_pax.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_pax.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static char buff2[64];
diff --git a/contrib/libarchive/libarchive/test/test_write_format_shar_empty.c b/contrib/libarchive/libarchive/test/test_write_format_shar_empty.c
index 3ca6cceed84d..b4dbce957523 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_shar_empty.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_shar_empty.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Check that an "empty" shar archive is correctly created as an empty file.
diff --git a/contrib/libarchive/libarchive/test/test_write_format_tar.c b/contrib/libarchive/libarchive/test/test_write_format_tar.c
index 1d607bdb064f..631bfa4ed639 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_tar.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_tar.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static char buff[1000000];
static char buff2[64];
diff --git a/contrib/libarchive/libarchive/test/test_write_format_tar_empty.c b/contrib/libarchive/libarchive/test/test_write_format_tar_empty.c
index e45e382b1984..29912f3b2821 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_tar_empty.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_tar_empty.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Check that an "empty" tar archive is correctly created.
diff --git a/contrib/libarchive/libarchive/test/test_write_format_tar_sparse.c b/contrib/libarchive/libarchive/test/test_write_format_tar_sparse.c
index 54ac00988e3d..1568b0eadc29 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_tar_sparse.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_tar_sparse.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static char buff[1000000];
diff --git a/contrib/libarchive/libarchive/test/test_write_format_tar_ustar.c b/contrib/libarchive/libarchive/test/test_write_format_tar_ustar.c
index f62415bb8b18..d86749fd41b0 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_tar_ustar.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_tar_ustar.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static int
is_null(const char *p, size_t l)
diff --git a/contrib/libarchive/libarchive/test/test_write_format_tar_v7tar.c b/contrib/libarchive/libarchive/test/test_write_format_tar_v7tar.c
index 16909956878b..5fa5f4e21f29 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_tar_v7tar.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_tar_v7tar.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static int
is_null(const char *p, size_t l)
diff --git a/contrib/libarchive/libarchive/test/test_write_format_warc.c b/contrib/libarchive/libarchive/test/test_write_format_warc.c
index 3a4c2da1edf1..bb9f2388095b 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_warc.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_warc.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void test_read(struct archive *a, char *buff, size_t used, char *filedata)
{
diff --git a/contrib/libarchive/libarchive/test/test_write_format_warc_empty.c b/contrib/libarchive/libarchive/test/test_write_format_warc_empty.c
index 0bd31bd7f8cb..d66e85d33e68 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_warc_empty.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_warc_empty.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_write_format_warc_empty)
{
diff --git a/contrib/libarchive/libarchive/test/test_write_format_xar.c b/contrib/libarchive/libarchive/test/test_write_format_xar.c
index 02fd2c0e35a7..f1f3032912a7 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_xar.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_xar.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
test_xar(const char *option)
diff --git a/contrib/libarchive/libarchive/test/test_write_format_xar_empty.c b/contrib/libarchive/libarchive/test/test_write_format_xar_empty.c
index 97c080887e40..b3ba6994e9c9 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_xar_empty.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_xar_empty.c
@@ -29,7 +29,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_write_format_xar_empty)
{
diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip.c b/contrib/libarchive/libarchive/test/test_write_format_zip.c
index f37e4e2777bf..54240eeb7afe 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_zip.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_zip.c
@@ -30,7 +30,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* This test doesn't actually check that the zip writer is
@@ -290,9 +289,11 @@ verify_contents(struct archive *a, int seeking, int content)
assertEqualString("file", archive_entry_pathname(ae));
if (seeking) {
assertEqualInt(AE_IFREG | 0755, archive_entry_mode(ae));
+ assert(archive_entry_size_is_set(ae));
+ assertEqualInt(8, archive_entry_size(ae));
+ } else {
+ assertEqualInt(0, archive_entry_size_is_set(ae));
}
- assert(archive_entry_size_is_set(ae));
- assertEqualInt(8, archive_entry_size(ae));
if (content) {
assertEqualIntA(a, 8,
archive_read_data(a, filedata, sizeof(filedata)));
@@ -308,9 +309,11 @@ verify_contents(struct archive *a, int seeking, int content)
assertEqualString("file2", archive_entry_pathname(ae));
if (seeking) {
assertEqualInt(AE_IFREG | 0755, archive_entry_mode(ae));
+ assertEqualInt(4, archive_entry_size(ae));
+ assert(archive_entry_size_is_set(ae));
+ } else {
+ assertEqualInt(0, archive_entry_size_is_set(ae));
}
- assertEqualInt(4, archive_entry_size(ae));
- assert(archive_entry_size_is_set(ae));
if (content) {
assertEqualIntA(a, 4,
archive_read_data(a, filedata, sizeof(filedata)));
@@ -374,10 +377,13 @@ verify_contents(struct archive *a, int seeking, int content)
assertEqualInt(0, archive_entry_atime(ae));
assertEqualInt(0, archive_entry_ctime(ae));
assertEqualString("file_deflate", archive_entry_pathname(ae));
- if (seeking)
+ if (seeking) {
assertEqualInt(AE_IFREG | 0755, archive_entry_mode(ae));
- assertEqualInt(8, archive_entry_size(ae));
- assert(archive_entry_size_is_set(ae));
+ assertEqualInt(8, archive_entry_size(ae));
+ assert(archive_entry_size_is_set(ae));
+ } else {
+ assertEqualInt(0, archive_entry_size_is_set(ae));
+ }
if (content) {
assertEqualIntA(a, 8,
archive_read_data(a, filedata, sizeof(filedata)));
@@ -392,10 +398,13 @@ verify_contents(struct archive *a, int seeking, int content)
assertEqualInt(0, archive_entry_atime(ae));
assertEqualInt(0, archive_entry_ctime(ae));
assertEqualString("file2_deflate", archive_entry_pathname(ae));
- if (seeking)
+ if (seeking) {
assertEqualInt(AE_IFREG | 0755, archive_entry_mode(ae));
- assertEqualInt(4, archive_entry_size(ae));
- assert(archive_entry_size_is_set(ae));
+ assertEqualInt(4, archive_entry_size(ae));
+ assert(archive_entry_size_is_set(ae));
+ } else {
+ assertEqualInt(0, archive_entry_size_is_set(ae));
+ }
if (content) {
assertEqualIntA(a, 4,
archive_read_data(a, filedata, sizeof(filedata)));
@@ -410,6 +419,7 @@ verify_contents(struct archive *a, int seeking, int content)
assertEqualInt(0, archive_entry_ctime(ae));
assertEqualString("file3_deflate", archive_entry_pathname(ae));
if (seeking) {
+ assert(archive_entry_size_is_set(ae));
assertEqualInt(5, archive_entry_size(ae));
assertEqualInt(AE_IFREG | 0621, archive_entry_mode(ae));
} else {
@@ -460,10 +470,13 @@ verify_contents(struct archive *a, int seeking, int content)
assertEqualInt(0, archive_entry_atime(ae));
assertEqualInt(0, archive_entry_ctime(ae));
assertEqualString("file_stored", archive_entry_pathname(ae));
- if (seeking)
+ if (seeking) {
assertEqualInt(AE_IFREG | 0755, archive_entry_mode(ae));
- assert(archive_entry_size_is_set(ae));
- assertEqualInt(8, archive_entry_size(ae));
+ assert(archive_entry_size_is_set(ae));
+ assertEqualInt(8, archive_entry_size(ae));
+ } else {
+ assertEqualInt(0, archive_entry_size_is_set(ae));
+ }
if (content) {
assertEqualIntA(a, 8,
archive_read_data(a, filedata, sizeof(filedata)));
@@ -478,10 +491,13 @@ verify_contents(struct archive *a, int seeking, int content)
assertEqualInt(0, archive_entry_atime(ae));
assertEqualInt(0, archive_entry_ctime(ae));
assertEqualString("file2_stored", archive_entry_pathname(ae));
- if (seeking)
+ if (seeking) {
assertEqualInt(AE_IFREG | 0755, archive_entry_mode(ae));
- assertEqualInt(4, archive_entry_size(ae));
- assert(archive_entry_size_is_set(ae));
+ assertEqualInt(4, archive_entry_size(ae));
+ assert(archive_entry_size_is_set(ae));
+ } else {
+ assertEqualInt(0, archive_entry_size_is_set(ae));
+ }
if (content) {
assertEqualIntA(a, 4,
archive_read_data(a, filedata, sizeof(filedata)));
diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip64_stream.c b/contrib/libarchive/libarchive/test/test_write_format_zip64_stream.c
new file mode 100644
index 000000000000..bed97894e8da
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_write_format_zip64_stream.c
@@ -0,0 +1,276 @@
+/*-
+ * Copyright (c) 2003-2023 Tim Kientzle
+ * Copyright (c) 2008 Anselm Strauss
+ * 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"
+
+/*
+ * Detailed byte-for-byte verification of the format of a zip archive
+ * written in streaming mode with Zip64 extensions enabled.
+ */
+
+static unsigned long
+bitcrc32(unsigned long c, void *_p, size_t s)
+{
+ /* This is a drop-in replacement for crc32() from zlib.
+ * Libarchive should be able to correctly generate
+ * uncompressed zip archives (including correct CRCs) even
+ * when zlib is unavailable, and this function helps us verify
+ * that. Yes, this is very, very slow and unsuitable for
+ * production use, but it's correct, compact, and works well
+ * enough for this particular usage. Libarchive internally
+ * uses a much more efficient implementation. */
+ const unsigned char *p = _p;
+ int bitctr;
+
+ if (p == NULL)
+ return (0);
+
+ for (; s > 0; --s) {
+ c ^= *p++;
+ for (bitctr = 8; bitctr > 0; --bitctr) {
+ if (c & 1) c = (c >> 1);
+ else c = (c >> 1) ^ 0xedb88320;
+ c ^= 0x80000000;
+ }
+ }
+ return (c);
+}
+
+/* Quick and dirty: Read 2-byte and 4-byte integers from Zip file. */
+static unsigned i2(const unsigned char *p) { return ((p[0] & 0xff) | ((p[1] & 0xff) << 8)); }
+static unsigned i4(const unsigned char *p) { return (i2(p) | (i2(p + 2) << 16)); }
+/* We're only working with small values here; ignore the 4 high bytes. */
+static unsigned i8(const unsigned char *p) { return (i4(p)); }
+
+DEFINE_TEST(test_write_format_zip64_stream)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ size_t used, buffsize = 1000000;
+ unsigned long crc;
+ unsigned long compressed_size = 0;
+ int file_perm = 00644;
+ int zip_version = 45;
+ int zip_compression = 8;
+ short file_uid = 10, file_gid = 20;
+ unsigned char *buff, *buffend, *p;
+ unsigned char *central_header, *local_header, *eocd, *eocd_record;
+ unsigned char *extension_start, *extension_end;
+ unsigned char *data_start, *data_end;
+ char file_data[] = {'1', '2', '3', '4', '5', '6', '7', '8'};
+ const char *file_name = "file";
+
+#ifndef HAVE_ZLIB_H
+ zip_compression = 0;
+#endif
+
+ 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_set_options(a, "zip:zip64"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_options(a, "zip:experimental"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_open_memory(a, buff, buffsize, &used));
+
+ assert((ae = archive_entry_new()) != NULL);
+ archive_entry_copy_pathname(ae, file_name);
+ archive_entry_set_mode(ae, AE_IFREG | file_perm);
+ archive_entry_set_uid(ae, file_uid);
+ archive_entry_set_gid(ae, file_gid);
+ archive_entry_set_mtime(ae, 0, 0);
+ assertEqualInt(0, archive_write_header(a, ae));
+ archive_entry_free(ae);
+ assertEqualInt(8, archive_write_data(a, file_data, sizeof(file_data)));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+ buffend = buff + used;
+ dumpfile("constructed.zip", buff, used);
+
+ /* Verify "End of Central Directory" record. */
+ /* Get address of end-of-central-directory record. */
+ eocd_record = p = buffend - 22; /* Assumes there is no zip comment field. */
+ failure("End-of-central-directory begins with PK\\005\\006 signature");
+ assertEqualMem(p, "PK\005\006", 4);
+ failure("This must be disk 0");
+ assertEqualInt(i2(p + 4), 0);
+ failure("Central dir must start on disk 0");
+ assertEqualInt(i2(p + 6), 0);
+ failure("All central dir entries are on this disk");
+ assertEqualInt(i2(p + 8), i2(p + 10));
+ eocd = buff + i4(p + 12) + i4(p + 16);
+ failure("no zip comment");
+ assertEqualInt(i2(p + 20), 0);
+
+ /* Get address of first entry in central directory. */
+ central_header = p = buff + i4(buffend - 6);
+ failure("Central file record at offset %d should begin with"
+ " PK\\001\\002 signature",
+ i4(buffend - 10));
+
+ /* Verify file entry in central directory. */
+ assertEqualMem(p, "PK\001\002", 4); /* Signature */
+ assertEqualInt(i2(p + 4), 3 * 256 + zip_version); /* Version made by */
+ assertEqualInt(i2(p + 6), zip_version); /* Version needed to extract */
+ assertEqualInt(i2(p + 8), 8); /* Flags */
+ assertEqualInt(i2(p + 10), zip_compression); /* Compression method */
+ assertEqualInt(i2(p + 12), 0); /* File time */
+ assertEqualInt(i2(p + 14), 33); /* File date */
+ crc = bitcrc32(0, file_data, sizeof(file_data));
+ assertEqualInt(i4(p + 16), crc); /* CRC-32 */
+ compressed_size = i4(p + 20); /* Compressed size */
+ assertEqualInt(i4(p + 24), sizeof(file_data)); /* Uncompressed size */
+ assertEqualInt(i2(p + 28), strlen(file_name)); /* Pathname length */
+ /* assertEqualInt(i2(p + 30), 28); */ /* Extra field length: See below */
+ assertEqualInt(i2(p + 32), 0); /* File comment length */
+ assertEqualInt(i2(p + 34), 0); /* Disk number start */
+ assertEqualInt(i2(p + 36), 0); /* Internal file attrs */
+ assertEqualInt(i4(p + 38) >> 16 & 01777, file_perm); /* External file attrs */
+ assertEqualInt(i4(p + 42), 0); /* Offset of local header */
+ assertEqualMem(p + 46, file_name, strlen(file_name)); /* Pathname */
+ p = extension_start = central_header + 46 + strlen(file_name);
+ extension_end = extension_start + i2(central_header + 30);
+
+ assertEqualInt(i2(p), 0x7875); /* 'ux' extension header */
+ assertEqualInt(i2(p + 2), 11); /* 'ux' size */
+ /* TODO: verify 'ux' contents */
+ p += 4 + i2(p + 2);
+
+ assertEqualInt(i2(p), 0x5455); /* 'UT' extension header */
+ assertEqualInt(i2(p + 2), 5); /* 'UT' size */
+ assertEqualInt(p[4], 1); /* 'UT' flags */
+ assertEqualInt(i4(p + 5), 0); /* 'UT' mtime */
+ p += 4 + i2(p + 2);
+
+ /* Note: We don't expect to see zip64 extension in the central
+ * directory, since the writer knows the actual full size by
+ * the time it is ready to write the central directory and has
+ * no reason to insert it then. Info-Zip seems to do the same
+ * thing. */
+
+ /* Just in case: Report any extra extensions. */
+ while (p < extension_end) {
+ failure("Unexpected extension 0x%04X", i2(p));
+ assert(0);
+ p += 4 + i2(p + 2);
+ }
+
+ /* Should have run exactly to end of extra data. */
+ assertEqualAddress(p, extension_end);
+
+ assertEqualAddress(p, eocd);
+
+ /* After Central dir, we find Zip64 eocd and Zip64 eocd locator. */
+ assertEqualMem(p, "PK\006\006", 4); /* Zip64 eocd */
+ assertEqualInt(i8(p + 4), 44); /* We're using v1 Zip64 eocd */
+ assertEqualInt(i2(p + 12), 45); /* Written by Version 4.5 */
+ assertEqualInt(i2(p + 14), 45); /* Needs version 4.5 to extract */
+ assertEqualInt(i4(p + 16), 0); /* This is disk #0 */
+ assertEqualInt(i4(p + 20), 0); /* Dir starts on disk #0 */
+ assertEqualInt(i8(p + 24), 1); /* 1 entry on this disk */
+ assertEqualInt(i8(p + 32), 1); /* 1 entry total */
+ assertEqualInt(i8(p + 40), eocd - central_header); /* size of cd */
+ assertEqualInt(i8(p + 48), central_header - buff); /* start of cd */
+ p += 12 + i8(p + 4);
+
+ assertEqualMem(p, "PK\006\007", 4); /* Zip64 eocd locator */
+ assertEqualInt(i4(p + 4), 0); /* Zip64 eocd is on disk #0 */
+ assertEqualInt(i8(p + 8), eocd - buff); /* Offset of Zip64 eocd */
+ assertEqualInt(i4(p + 16), 1); /* 1 disk */
+ p += 20;
+
+ /* Regular EOCD immediately follows Zip64 records. */
+ assertEqualAddress(p, eocd_record);
+
+ /* Verify local header of file entry. */
+ p = local_header = buff;
+ assertEqualMem(p, "PK\003\004", 4); /* Signature */
+ assertEqualInt(i2(p + 4), zip_version); /* Version needed to extract */
+ assertEqualInt(i2(p + 6), 8); /* Flags: bit 3 = length-at-end */
+ assertEqualInt(i2(p + 8), zip_compression); /* Compression method */
+ assertEqualInt(i2(p + 10), 0); /* File time */
+ assertEqualInt(i2(p + 12), 33); /* File date */
+ assertEqualInt(i4(p + 14), 0); /* CRC-32 */
+ assertEqualInt(i4(p + 18), 0); /* Compressed size must be zero for length-at-end */
+ assertEqualInt(i4(p + 22), 0); /* Uncompressed size must be zero for length-at-end */
+ assertEqualInt(i2(p + 26), strlen(file_name)); /* Pathname length */
+ assertEqualInt(i2(p + 28), 37); /* Extra field length */
+ assertEqualMem(p + 30, file_name, strlen(file_name)); /* Pathname */
+ p = extension_start = local_header + 30 + strlen(file_name);
+ extension_end = extension_start + i2(local_header + 28);
+
+ assertEqualInt(i2(p), 0x7875); /* 'ux' extension header */
+ assertEqualInt(i2(p + 2), 11); /* 'ux' size */
+ assertEqualInt(p[4], 1); /* 'ux' version */
+ assertEqualInt(p[5], 4); /* 'ux' uid size */
+ assertEqualInt(i4(p + 6), file_uid); /* 'Ux' UID */
+ assertEqualInt(p[10], 4); /* 'ux' gid size */
+ assertEqualInt(i4(p + 11), file_gid); /* 'Ux' GID */
+ p += 4 + i2(p + 2);
+
+ assertEqualInt(i2(p), 0x5455); /* 'UT' extension header */
+ assertEqualInt(i2(p + 2), 5); /* 'UT' size */
+ assertEqualInt(p[4], 1); /* 'UT' flags */
+ assertEqualInt(i4(p + 5), 0); /* 'UT' mtime */
+ p += 4 + i2(p + 2);
+
+ assertEqualInt(i2(p), 0x6c78); /* 'xl' experimental extension header */
+ assertEqualInt(i2(p + 2), 9); /* size */
+ assertEqualInt(p[4], 7); /* bitmap of included fields */
+ assertEqualInt(i2(p + 5) >> 8, 3); /* system & version made by */
+ assertEqualInt(i2(p + 7), 0); /* internal file attributes */
+ assertEqualInt(i4(p + 9) >> 16 & 01777, file_perm); /* external file attributes */
+ p += 4 + i2(p + 2);
+
+ /* Just in case: Report any extra extensions. */
+ while (p < extension_end) {
+ failure("Unexpected extension 0x%04X", i2(p));
+ assert(0);
+ p += 4 + i2(p + 2);
+ }
+
+ /* Should have run exactly to end of extra data. */
+ assertEqualAddress(p, extension_end);
+ data_start = p;
+
+ /* Data descriptor should follow compressed data. */
+ while (p < central_header && memcmp(p, "PK\007\010", 4) != 0)
+ ++p;
+ data_end = p;
+ assertEqualInt(data_end - data_start, compressed_size);
+ assertEqualMem(p, "PK\007\010", 4);
+ assertEqualInt(i4(p + 4), crc); /* CRC-32 */
+ assertEqualInt(i8(p + 8), compressed_size); /* compressed size */
+ assertEqualInt(i8(p + 16), sizeof(file_data)); /* uncompressed size */
+
+ /* Central directory should immediately follow the only entry. */
+ assertEqualAddress(p + 24, central_header);
+
+ free(buff);
+}
diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip_compression_store.c b/contrib/libarchive/libarchive/test/test_write_format_zip_compression_store.c
index c969a41d4d41..fc764ac7af83 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_zip_compression_store.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_compression_store.c
@@ -28,7 +28,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/test/test_write_format_zip_no_compression.c 201247 2009-12-30 05:59:21Z kientzle $");
/* File data */
static const char file_name[] = "file";
@@ -128,12 +127,22 @@ static void verify_uncompressed_contents(const char *buff, size_t used)
/* Misc variables */
unsigned long crc;
- struct tm *tm = localtime(&now);
-
+ struct tm *tm;
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
+ struct tm tmbuf;
+#endif
/* p is the pointer to walk over the central directory,
* q walks over the local headers, the data and the data descriptors. */
const char *p, *q, *local_header, *extra_start;
+#if defined(HAVE_LOCALTIME_S)
+ tm = localtime_s(&tmbuf, &now) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
+ tm = localtime_r(&now, &tmbuf);
+#else
+ tm = localtime(&now);
+#endif
+
/* Remember the end of the archive in memory. */
buffend = buff + used;
@@ -174,7 +183,7 @@ static void verify_uncompressed_contents(const char *buff, size_t used)
assertEqualInt(i4(p + 20), sizeof(file_data1) + sizeof(file_data2)); /* Compressed size */
assertEqualInt(i4(p + 24), sizeof(file_data1) + sizeof(file_data2)); /* Uncompressed size */
assertEqualInt(i2(p + 28), strlen(file_name)); /* Pathname length */
- assertEqualInt(i2(p + 30), 28); /* Extra field length */
+ assertEqualInt(i2(p + 30), 24); /* Extra field length */
assertEqualInt(i2(p + 32), 0); /* File comment length */
assertEqualInt(i2(p + 34), 0); /* Disk number start */
assertEqualInt(i2(p + 36), 0); /* Internal file attrs */
@@ -182,38 +191,33 @@ static void verify_uncompressed_contents(const char *buff, size_t used)
assertEqualInt(i4(p + 42), 0); /* Offset of local header */
assertEqualMem(p + 46, file_name, strlen(file_name)); /* Pathname */
p = p + 46 + strlen(file_name);
- assertEqualInt(i2(p), 0x5455); /* 'UT' extension header */
- assertEqualInt(i2(p + 2), 9); /* 'UT' size */
- assertEqualInt(p[4], 3); /* 'UT' flags */
- assertEqualInt(i4(p + 5), now); /* 'UT' mtime */
- assertEqualInt(i4(p + 9), now + 3); /* 'UT' atime */
- p = p + 4 + i2(p + 2);
+
assertEqualInt(i2(p), 0x7875); /* 'ux' extension header */
assertEqualInt(i2(p + 2), 11); /* 'ux' size */
/* TODO */
p = p + 4 + i2(p + 2);
+ assertEqualInt(i2(p), 0x5455); /* 'UT' extension header */
+ assertEqualInt(i2(p + 2), 5); /* 'UT' size */
+ assertEqualInt(p[4], 1); /* 'UT' flags */
+ assertEqualInt(i4(p + 5), now); /* 'UT' mtime */
+ p = p + 4 + i2(p + 2);
+
/* Verify local header of file entry. */
local_header = q = buff;
assertEqualMem(q, "PK\003\004", 4); /* Signature */
assertEqualInt(i2(q + 4), 10); /* Version needed to extract */
- assertEqualInt(i2(q + 6), 8); /* Flags */
+ assertEqualInt(i2(q + 6), 8); /* Flags: bit 3 = length-at-end. Required because CRC32 is unknown */
assertEqualInt(i2(q + 8), 0); /* Compression method */
assertEqualInt(i2(q + 10), (tm->tm_hour * 2048) + (tm->tm_min * 32) + (tm->tm_sec / 2)); /* File time */
assertEqualInt(i2(q + 12), ((tm->tm_year - 80) * 512) + ((tm->tm_mon + 1) * 32) + tm->tm_mday); /* File date */
assertEqualInt(i4(q + 14), 0); /* CRC-32 */
- assertEqualInt(i4(q + 18), sizeof(file_data1) + sizeof(file_data2)); /* Compressed size */
- assertEqualInt(i4(q + 22), sizeof(file_data1) + sizeof(file_data2)); /* Uncompressed size */
+ assertEqualInt(i4(q + 18), 0); /* Compressed size, must be zero because of length-at-end */
+ assertEqualInt(i4(q + 22), 0); /* Uncompressed size, must be zero because of length-at-end */
assertEqualInt(i2(q + 26), strlen(file_name)); /* Pathname length */
assertEqualInt(i2(q + 28), 41); /* Extra field length */
assertEqualMem(q + 30, file_name, strlen(file_name)); /* Pathname */
extra_start = q = q + 30 + strlen(file_name);
- assertEqualInt(i2(q), 0x5455); /* 'UT' extension header */
- assertEqualInt(i2(q + 2), 9); /* 'UT' size */
- assertEqualInt(q[4], 3); /* 'UT' flags */
- assertEqualInt(i4(q + 5), now); /* 'UT' mtime */
- assertEqualInt(i4(q + 9), now + 3); /* 'UT' atime */
- q = q + 4 + i2(q + 2);
assertEqualInt(i2(q), 0x7875); /* 'ux' extension header */
assertEqualInt(i2(q + 2), 11); /* 'ux' size */
@@ -224,6 +228,13 @@ static void verify_uncompressed_contents(const char *buff, size_t used)
assertEqualInt(i4(q + 11), file_gid); /* 'Ux' GID */
q = q + 4 + i2(q + 2);
+ assertEqualInt(i2(q), 0x5455); /* 'UT' extension header */
+ assertEqualInt(i2(q + 2), 9); /* 'UT' size */
+ assertEqualInt(q[4], 3); /* 'UT' flags */
+ assertEqualInt(i4(q + 5), now); /* 'UT' mtime */
+ assertEqualInt(i4(q + 9), now + 3); /* 'UT' atime */
+ q = q + 4 + i2(q + 2);
+
assertEqualInt(i2(q), 0x6c78); /* 'xl' experimental extension header */
assertEqualInt(i2(q + 2), 9); /* size */
assertEqualInt(q[4], 7); /* Bitmap of fields included. */
@@ -260,7 +271,7 @@ static void verify_uncompressed_contents(const char *buff, size_t used)
assertEqualInt(i4(p + 20), 0); /* Compressed size */
assertEqualInt(i4(p + 24), 0); /* Uncompressed size */
assertEqualInt(i2(p + 28), strlen(folder_name)); /* Pathname length */
- assertEqualInt(i2(p + 30), 28); /* Extra field length */
+ assertEqualInt(i2(p + 30), 24); /* Extra field length */
assertEqualInt(i2(p + 32), 0); /* File comment length */
assertEqualInt(i2(p + 34), 0); /* Disk number start */
assertEqualInt(i2(p + 36), 0); /* Internal file attrs */
@@ -268,12 +279,7 @@ static void verify_uncompressed_contents(const char *buff, size_t used)
assertEqualInt(i4(p + 42), q - buff); /* Offset of local header */
assertEqualMem(p + 46, folder_name, strlen(folder_name)); /* Pathname */
p = p + 46 + strlen(folder_name);
- assertEqualInt(i2(p), 0x5455); /* 'UT' extension header */
- assertEqualInt(i2(p + 2), 9); /* 'UT' size */
- assertEqualInt(p[4], 5); /* 'UT' flags */
- assertEqualInt(i4(p + 5), now); /* 'UT' mtime */
- assertEqualInt(i4(p + 9), now + 5); /* 'UT' atime */
- p = p + 4 + i2(p + 2);
+
assertEqualInt(i2(p), 0x7875); /* 'ux' extension header */
assertEqualInt(i2(p + 2), 11); /* 'ux' size */
assertEqualInt(p[4], 1); /* 'ux' version */
@@ -281,7 +287,13 @@ static void verify_uncompressed_contents(const char *buff, size_t used)
assertEqualInt(i4(p + 6), folder_uid); /* 'ux' UID */
assertEqualInt(p[10], 4); /* 'ux' gid size */
assertEqualInt(i4(p + 11), folder_gid); /* 'ux' GID */
- /*p = p + 4 + i2(p + 2);*/
+ p = p + 4 + i2(p + 2);
+
+ assertEqualInt(i2(p), 0x5455); /* 'UT' extension header */
+ assertEqualInt(i2(p + 2), 5); /* 'UT' size */
+ assertEqualInt(p[4], 1); /* 'UT' flags */
+ assertEqualInt(i4(p + 5), now); /* 'UT' mtime */
+ p = p + 4 + i2(p + 2);
/* Verify local header of folder entry. */
local_header = q;
@@ -298,12 +310,7 @@ static void verify_uncompressed_contents(const char *buff, size_t used)
assertEqualInt(i2(q + 28), 41); /* Extra field length */
assertEqualMem(q + 30, folder_name, strlen(folder_name)); /* Pathname */
extra_start = q = q + 30 + strlen(folder_name);
- assertEqualInt(i2(q), 0x5455); /* 'UT' extension header */
- assertEqualInt(i2(q + 2), 9); /* 'UT' size */
- assertEqualInt(q[4], 5); /* 'UT' flags */
- assertEqualInt(i4(q + 5), now); /* 'UT' mtime */
- assertEqualInt(i4(q + 9), now + 5); /* 'UT' atime */
- q = q + 4 + i2(q + 2);
+
assertEqualInt(i2(q), 0x7875); /* 'ux' extension header */
assertEqualInt(i2(q + 2), 11); /* 'ux' size */
assertEqualInt(q[4], 1); /* 'ux' version */
@@ -313,6 +320,13 @@ static void verify_uncompressed_contents(const char *buff, size_t used)
assertEqualInt(i4(q + 11), folder_gid); /* 'ux' GID */
q = q + 4 + i2(q + 2);
+ assertEqualInt(i2(q), 0x5455); /* 'UT' extension header */
+ assertEqualInt(i2(q + 2), 9); /* 'UT' size */
+ assertEqualInt(q[4], 5); /* 'UT' flags */
+ assertEqualInt(i4(q + 5), now); /* 'UT' mtime */
+ assertEqualInt(i4(q + 9), now + 5); /* 'UT' atime */
+ q = q + 4 + i2(q + 2);
+
assertEqualInt(i2(q), 0x6c78); /* 'xl' experimental extension header */
assertEqualInt(i2(q + 2), 9); /* size */
assertEqualInt(q[4], 7); /* bitmap of fields */
diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip_empty.c b/contrib/libarchive/libarchive/test/test_write_format_zip_empty.c
index 628ccb18194e..410304d44120 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_zip_empty.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_empty.c
@@ -28,7 +28,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_write_format_zip_empty)
{
diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip_empty_zip64.c b/contrib/libarchive/libarchive/test/test_write_format_zip_empty_zip64.c
index 8f9975b2102c..f56bf578e4cc 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_zip_empty_zip64.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_empty_zip64.c
@@ -28,7 +28,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/test/test_write_format_zip_empty.c 201247 2009-12-30 05:59:21Z kientzle $");
DEFINE_TEST(test_write_format_zip_empty_zip64)
{
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
new file mode 100644
index 000000000000..10c191f7ce7d
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_entry_size_unset.c
@@ -0,0 +1,320 @@
+/*-
+ * Copyright (c) 2021 Jia Cheong Tan
+ * 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"
+
+/* File data */
+static const char file_name[] = "file";
+static const char file_data1[] = {'a', 'b', 'c', 'd', 'e'};
+static const char file_data2[] = {'f', 'g', 'h', 'i', 'j'};
+static const int file_perm = 00644;
+static const short file_uid = 10;
+static const short file_gid = 20;
+
+/* Folder data */
+static const char folder_name[] = "folder/";
+static const int folder_perm = 00755;
+static const short folder_uid = 30;
+static const short folder_gid = 40;
+
+#define ZIP_ENTRY_FLAG_LENGTH_AT_END (1 << 3)
+
+/* Quick and dirty: Read 2-byte and 4-byte integers from Zip file. */
+static unsigned i2(const char *p) { return ((p[0] & 0xff) | ((p[1] & 0xff) << 8)); }
+static unsigned i4(const char *p) { return (i2(p) | (i2(p + 2) << 16)); }
+
+static unsigned long
+bitcrc32(unsigned long c, const void *_p, size_t s)
+{
+ /* This is a drop-in replacement for crc32() from zlib.
+ * Libarchive should be able to correctly generate
+ * uncompressed zip archives (including correct CRCs) even
+ * when zlib is unavailable, and this function helps us verify
+ * that. Yes, this is very, very slow and unsuitable for
+ * production use, but it's correct, compact, and works well
+ * enough for this particular usage. Libarchive internally
+ * uses a much more efficient implementation. */
+ const unsigned char *p = _p;
+ int bitctr;
+
+ if (p == NULL)
+ return (0);
+
+ for (; s > 0; --s)
+ {
+ c ^= *p++;
+ for (bitctr = 8; bitctr > 0; --bitctr)
+ {
+ if (c & 1)
+ c = (c >> 1);
+ else
+ c = (c >> 1) ^ 0xedb88320;
+ c ^= 0x80000000;
+ }
+ }
+ return (c);
+}
+
+static void write_archive(struct archive *a)
+{
+ struct archive_entry *entry = archive_entry_new();
+ assert(entry != NULL);
+
+ /* Does not set size for file entry */
+ archive_entry_set_pathname(entry, file_name);
+ archive_entry_set_mode(entry, S_IFREG | 0644);
+ archive_entry_set_uid(entry, file_uid);
+ archive_entry_set_gid(entry, file_gid);
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, entry));
+ assertEqualIntA(a, sizeof(file_data1), archive_write_data(a, file_data1, sizeof(file_data1)));
+ assertEqualIntA(a, sizeof(file_data2), archive_write_data(a, file_data2, sizeof(file_data2)));
+ archive_entry_free(entry);
+
+ /* Folder */
+ assert((entry = archive_entry_new()) != NULL);
+ archive_entry_set_pathname(entry, folder_name);
+ archive_entry_set_mode(entry, S_IFDIR | folder_perm);
+ archive_entry_set_size(entry, 0);
+ archive_entry_set_uid(entry, folder_uid);
+ archive_entry_set_gid(entry, folder_gid);
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, entry));
+ archive_entry_free(entry);
+}
+
+static void verify_contents(const char *zip_buff, size_t size)
+{
+ unsigned long crc = bitcrc32(0, file_data1, sizeof(file_data1));
+ crc = bitcrc32(crc, file_data2, sizeof(file_data2));
+
+ const char *zip_end = zip_buff + size;
+ /* Since there are no comments, the end of central directory
+ * is 22 bytes from the end of content */
+ const char *end_of_central_dir = zip_end - 22;
+ /* Check for end of central directory signature */
+ assertEqualMem(end_of_central_dir, "PK\x5\x6", 4);
+ /* Check for number of disk */
+ assertEqualInt(i2(end_of_central_dir + 4), 0);
+ /* Check for disk where central directory starts */
+ assertEqualInt(i2(end_of_central_dir + 6), 0);
+ /* Check for number of central directory records on disk */
+ assertEqualInt(i2(end_of_central_dir + 8), 2);
+ /* Check for total number of central directory records */
+ assertEqualInt(i2(end_of_central_dir + 10), 2);
+ /* Check for size of central directory and offset
+ * The size + offset must equal the end of the central directory */
+ assertEqualInt(i4(end_of_central_dir + 12) + i4(end_of_central_dir + 16), end_of_central_dir - zip_buff);
+ /* Check for empty comment length */
+ assertEqualInt(i2(end_of_central_dir + 20), 0);
+
+ /* Get address of central directory */
+ const char *central_directory = zip_buff + i4(end_of_central_dir + 16);
+
+ /* Check for entry in central directory signature */
+ assertEqualMem(central_directory, "PK\x1\x2", 4);
+ /* Check for version used to write entry */
+ assertEqualInt(i2(central_directory + 4), 3 * 256 + 10);
+ /* Check for version needed to extract entry */
+ assertEqualInt(i2(central_directory + 6), 10);
+ /* Check flags */
+ assertEqualInt(i2(central_directory + 8), ZIP_ENTRY_FLAG_LENGTH_AT_END);
+ /* Check compression method */
+ assertEqualInt(i2(central_directory + 10), 0);
+ /* Check crc value */
+ assertEqualInt(i4(central_directory + 16), crc);
+ /* Check compressed size*/
+ assertEqualInt(i4(central_directory + 20), sizeof(file_data1) + sizeof(file_data2));
+ /* Check uncompressed size */
+ assertEqualInt(i4(central_directory + 24), sizeof(file_data1) + sizeof(file_data2));
+ /* Check file name length */
+ assertEqualInt(i2(central_directory + 28), strlen(file_name));
+ /* Check extra field length */
+ assertEqualInt(i2(central_directory + 30), 15);
+ /* Check file comment length */
+ assertEqualInt(i2(central_directory + 32), 0);
+ /* Check disk number where file starts */
+ assertEqualInt(i2(central_directory + 34), 0);
+ /* Check internal file attrs */
+ assertEqualInt(i2(central_directory + 36), 0);
+ /* Check external file attrs */
+ assertEqualInt(i4(central_directory + 38) >> 16 & 01777, file_perm);
+ /* Check offset of local header */
+ assertEqualInt(i4(central_directory + 42), 0);
+ /* Check for file name contents */
+ assertEqualMem(central_directory + 46, file_name, strlen(file_name));
+
+ /* Get address of local file entry */
+ const char *local_file_header = zip_buff;
+
+ /* Check local file header signature */
+ assertEqualMem(local_file_header, "PK\x3\x4", 4);
+ /* Check version needed to extract */
+ assertEqualInt(i2(local_file_header + 4), 10);
+ /* Check flags */
+ assertEqualInt(i2(local_file_header + 6), 8);
+ /* Check compression method */
+ assertEqualInt(i2(local_file_header + 8), 0);
+ /* Check crc */
+ assertEqualInt(i4(local_file_header + 14), 0);
+ /* Check compressed size
+ * 0 because it was unknown at time of writing */
+ assertEqualInt(i4(local_file_header + 18), 0);
+ /* Check uncompressed size
+ * 0 because it was unknown at time of writing */
+ assertEqualInt(i4(local_file_header + 22), 0);
+ /* Check pathname length */
+ assertEqualInt(i2(local_file_header + 26), strlen(file_name));
+ /* Check extra field length */
+ assertEqualInt(i2(local_file_header + 28), 15);
+ /* Check path name match */
+ assertEqualMem(local_file_header + 30, file_name, strlen(file_name));
+
+ /* Start of data */
+ const char *data = local_file_header + i2(local_file_header + 28) + strlen(file_name) + 30;
+ /* Check for file data match */
+ assertEqualMem(data, file_data1, sizeof(file_data1));
+ assertEqualMem(data + sizeof(file_data1), file_data2, sizeof(file_data2));
+
+ /* Start of data descriptor */
+ const char *data_descriptor = data + sizeof(file_data1) + sizeof(file_data2);
+ /* Check data descriptor signature */
+ assertEqualMem(data_descriptor, "PK\x7\x8", 4);
+ /* Check crc value */
+ assertEqualInt(i4(data_descriptor + 4), crc);
+ /* Check compressed size */
+ assertEqualInt(i4(data_descriptor + 8), sizeof(file_data1) + sizeof(file_data2));
+ /* Chcek uncompresed size */
+ assertEqualInt(i4(data_descriptor + 12), sizeof(file_data1) + sizeof(file_data2));
+
+ /* Get folder entry in central directory */
+ const char *central_directory_folder_entry = central_directory + 46 + i2(local_file_header + 28) + strlen(file_name);
+
+ /* Get start of folder entry */
+ const char *local_folder_header = data_descriptor + 16;
+
+ /* Check for entry in central directory signature */
+ assertEqualMem(central_directory_folder_entry, "PK\x1\x2", 4);
+ /* Check version made by */
+ assertEqualInt(i2(central_directory_folder_entry + 4), 3 * 256 + 20);
+ /* Check version needed to extract */
+ assertEqualInt(i2(central_directory_folder_entry + 6), 20);
+ /* Check flags */
+ assertEqualInt(i2(central_directory_folder_entry + 8), 0);
+ /* Check compression method */
+ assertEqualInt(i2(central_directory_folder_entry + 10), 0);
+ /* Check crc */
+ assertEqualInt(i2(central_directory_folder_entry + 16), 0);
+ /* Check compressed size */
+ assertEqualInt(i4(central_directory_folder_entry + 20), 0);
+ /* Check uncompressed size */
+ assertEqualInt(i4(central_directory_folder_entry + 24), 0);
+ /* Check path name length */
+ assertEqualInt(i2(central_directory_folder_entry + 28), strlen(folder_name));
+ /* Check extra field length */
+ assertEqualInt(i2(central_directory_folder_entry + 30), 15);
+ /* Check file comment length */
+ assertEqualInt(i2(central_directory_folder_entry + 32), 0);
+ /* Check disk number start */
+ assertEqualInt(i2(central_directory_folder_entry + 34), 0);
+ /* Check internal file attrs */
+ assertEqualInt(i2(central_directory_folder_entry + 36), 0);
+ /* Check external file attrs */
+ assertEqualInt(i4(central_directory_folder_entry + 38) >> 16 & 01777, folder_perm);
+ /* Check offset of local header*/
+ assertEqualInt(i4(central_directory_folder_entry + 42), local_folder_header - zip_buff);
+ /* Check path name */
+ assertEqualMem(central_directory_folder_entry + 46, folder_name, strlen(folder_name));
+
+ /* Check local header */
+ assertEqualMem(local_folder_header, "PK\x3\x4", 4);
+ /* Check version to extract */
+ assertEqualInt(i2(local_folder_header + 4), 20);
+ /* Check flags */
+ assertEqualInt(i2(local_folder_header + 6), 0);
+ /* Check compression method */
+ assertEqualInt(i2(local_folder_header + 8), 0);
+ /* Check crc */
+ assertEqualInt(i4(local_folder_header + 14), 0);
+ /* Check compressed size */
+ assertEqualInt(i2(local_folder_header + 18), 0);
+ /* Check uncompressed size */
+ assertEqualInt(i4(local_folder_header + 22), 0);
+ /* Check path name length */
+ assertEqualInt(i2(local_folder_header + 26), strlen(folder_name));
+ /* Check extra field length */
+ assertEqualInt(i2(local_folder_header + 28), 15);
+ /* Check path name */
+ assertEqualMem(local_folder_header + 30, folder_name, strlen(folder_name));
+
+ const char *post_local_folder = local_folder_header + 30 + i2(local_folder_header + 28) + strlen(folder_name);
+ assertEqualMem(post_local_folder, central_directory, 4);
+}
+
+DEFINE_TEST(test_write_format_zip_size_unset)
+{
+ struct archive *a;
+ char zip_buffer[100000];
+ size_t size;
+
+ /* Use compression=store to disable compression. */
+ assert((a = archive_write_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_zip(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_set_options(a, "zip:compression=store"));
+ /* Disable zip64 explicitly since it is automatically enabled if no size is set */
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_set_options(a, "zip:zip64="));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_set_bytes_per_block(a, 1));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_set_bytes_in_last_block(a, 1));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, zip_buffer, sizeof(zip_buffer), &size));
+
+ write_archive(a);
+
+ /* Close the archive . */
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+ dumpfile("constructed_size_unset.zip", zip_buffer, size);
+
+ verify_contents(zip_buffer, size);
+
+ /* Use compression-level=0 to disable compression. */
+ assert((a = archive_write_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_zip(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_set_options(a, "zip:compression-level=0"));
+ /* Disable zip64 explicitly since it is automatically enabled if no size is set */
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_set_options(a, "zip:zip64="));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_set_bytes_per_block(a, 1));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_set_bytes_in_last_block(a, 1));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, zip_buffer, sizeof(zip_buffer), &size));
+
+ write_archive(a);
+
+ /* Close the archive . */
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+ dumpfile("constructed_size_unset.zip", zip_buffer, size);
+
+ verify_contents(zip_buffer, size);
+}
diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip_file.c b/contrib/libarchive/libarchive/test/test_write_format_zip_file.c
index 2868123b08b9..d4f1b9b22054 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_zip_file.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_file.c
@@ -29,7 +29,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/test/test_write_format_zip.c 201247 2009-12-30 05:59:21Z kientzle $");
/*
* Detailed byte-for-byte verification of the format of a zip archive
@@ -73,7 +72,10 @@ DEFINE_TEST(test_write_format_zip_file)
struct archive *a;
struct archive_entry *ae;
time_t t = 1234567890;
- struct tm *tm = localtime(&t);
+ struct tm *tm;
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
+ struct tm tmbuf;
+#endif
size_t used, buffsize = 1000000;
unsigned long crc;
int file_perm = 00644;
@@ -91,6 +93,13 @@ DEFINE_TEST(test_write_format_zip_file)
zip_compression = 0;
#endif
+#if defined(HAVE_LOCALTIME_S)
+ tm = localtime_s(&tmbuf, &t) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
+ tm = localtime_r(&t, &tmbuf);
+#else
+ tm = localtime(&t);
+#endif
buff = malloc(buffsize);
/* Create a new archive in memory. */
@@ -160,17 +169,17 @@ DEFINE_TEST(test_write_format_zip_file)
p = extension_start = central_header + 46 + strlen(file_name);
extension_end = extension_start + i2(central_header + 30);
+ assertEqualInt(i2(p), 0x7875); /* 'ux' extension header */
+ assertEqualInt(i2(p + 2), 11); /* 'ux' size */
+ /* TODO: verify 'ux' contents */
+ p += 4 + i2(p + 2);
+
assertEqualInt(i2(p), 0x5455); /* 'UT' extension header */
assertEqualInt(i2(p + 2), 5); /* 'UT' size */
assertEqualInt(p[4], 1); /* 'UT' flags */
assertEqualInt(i4(p + 5), t); /* 'UT' mtime */
p += 4 + i2(p + 2);
- assertEqualInt(i2(p), 0x7875); /* 'ux' extension header */
- assertEqualInt(i2(p + 2), 11); /* 'ux' size */
- /* TODO: verify 'ux' contents */
- p += 4 + i2(p + 2);
-
/* Just in case: Report any extra extensions. */
while (p < extension_end) {
failure("Unexpected extension 0x%04X", i2(p));
@@ -179,36 +188,30 @@ DEFINE_TEST(test_write_format_zip_file)
}
/* Should have run exactly to end of extra data. */
- assert(p == extension_end);
+ assertEqualAddress(p, extension_end);
- assert(p == eocd);
+ assertEqualAddress(p, eocd);
/* Regular EOCD immediately follows central directory. */
- assert(p == eocd_record);
+ assertEqualAddress(p, eocd_record);
/* Verify local header of file entry. */
p = local_header = buff;
assertEqualMem(p, "PK\003\004", 4); /* Signature */
assertEqualInt(i2(p + 4), zip_version); /* Version needed to extract */
- assertEqualInt(i2(p + 6), 8); /* Flags */
+ assertEqualInt(i2(p + 6), 8); /* Flags: bit 3 = length-at-end */
assertEqualInt(i2(p + 8), zip_compression); /* Compression method */
assertEqualInt(i2(p + 10), (tm->tm_hour * 2048) + (tm->tm_min * 32) + (tm->tm_sec / 2)); /* File time */
assertEqualInt(i2(p + 12), ((tm->tm_year - 80) * 512) + ((tm->tm_mon + 1) * 32) + tm->tm_mday); /* File date */
- assertEqualInt(i4(p + 14), 0); /* CRC-32 */
- /* assertEqualInt(i4(p + 18), sizeof(file_data)); */ /* Compressed size */
- /* assertEqualInt(i4(p + 22), sizeof(file_data)); */ /* Uncompressed size not stored because we're using length-at-end. */
+ assertEqualInt(i4(p + 14), 0); /* CRC-32 stored as zero because we're using length-at-end */
+ assertEqualInt(i4(p + 18), 0); /* Compressed size stored as zero because we're using length-at-end. */
+ assertEqualInt(i4(p + 22), 0); /* Uncompressed size stored as zero because we're using length-at-end. */
assertEqualInt(i2(p + 26), strlen(file_name)); /* Pathname length */
assertEqualInt(i2(p + 28), 37); /* Extra field length */
assertEqualMem(p + 30, file_name, strlen(file_name)); /* Pathname */
p = extension_start = local_header + 30 + strlen(file_name);
extension_end = extension_start + i2(local_header + 28);
- assertEqualInt(i2(p), 0x5455); /* 'UT' extension header */
- assertEqualInt(i2(p + 2), 5); /* size */
- assertEqualInt(p[4], 1); /* 'UT' flags */
- assertEqualInt(i4(p + 5), t); /* 'UT' mtime */
- p += 4 + i2(p + 2);
-
assertEqualInt(i2(p), 0x7875); /* 'ux' extension header */
assertEqualInt(i2(p + 2), 11); /* size */
assertEqualInt(p[4], 1); /* 'ux' version */
@@ -218,6 +221,12 @@ DEFINE_TEST(test_write_format_zip_file)
assertEqualInt(i4(p + 11), file_gid); /* 'Ux' GID */
p += 4 + i2(p + 2);
+ assertEqualInt(i2(p), 0x5455); /* 'UT' extension header */
+ assertEqualInt(i2(p + 2), 5); /* size */
+ assertEqualInt(p[4], 1); /* 'UT' flags */
+ assertEqualInt(i4(p + 5), t); /* 'UT' mtime */
+ p += 4 + i2(p + 2);
+
assertEqualInt(i2(p), 0x6c78); /* 'xl' experimental extension block */
assertEqualInt(i2(p + 2), 9); /* size */
assertEqualInt(p[4], 7); /* bitmap of fields in this block */
@@ -234,18 +243,18 @@ DEFINE_TEST(test_write_format_zip_file)
}
/* Should have run exactly to end of extra data. */
- assert(p == extension_end);
+ assertEqualAddress(p, extension_end);
/* Data descriptor should follow compressed data. */
while (p < central_header && memcmp(p, "PK\007\010", 4) != 0)
++p;
assertEqualMem(p, "PK\007\010", 4);
assertEqualInt(i4(p + 4), crc); /* CRC-32 */
- /* assertEqualInt(i4(p + 8), ???); */ /* compressed size */
+ assertEqualInt(i4(p + 8), p - extension_end); /* compressed size */
assertEqualInt(i4(p + 12), sizeof(file_data)); /* uncompressed size */
/* Central directory should immediately follow the only entry. */
- assert(p + 16 == central_header);
+ assertEqualAddress(p + 16, central_header);
free(buff);
}
diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip_file_zip64.c b/contrib/libarchive/libarchive/test/test_write_format_zip_file_zip64.c
index 71da98668d8d..f06f2aad3c95 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_zip_file_zip64.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_file_zip64.c
@@ -29,7 +29,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/test/test_write_format_zip.c 201247 2009-12-30 05:59:21Z kientzle $");
/*
* Detailed byte-for-byte verification of the format of a zip archive
@@ -75,7 +74,10 @@ DEFINE_TEST(test_write_format_zip_file_zip64)
struct archive *a;
struct archive_entry *ae;
time_t t = 1234567890;
- struct tm *tm = localtime(&t);
+ struct tm *tm;
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
+ struct tm tmbuf;
+#endif
size_t used, buffsize = 1000000;
unsigned long crc;
int file_perm = 00644;
@@ -92,6 +94,13 @@ DEFINE_TEST(test_write_format_zip_file_zip64)
zip_compression = 0;
#endif
+#if defined(HAVE_LOCALTIME_S)
+ tm = localtime_s(&tmbuf, &t) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
+ tm = localtime_r(&t, &tmbuf);
+#else
+ tm = localtime(&t);
+#endif
buff = malloc(buffsize);
/* Create a new archive in memory. */
@@ -163,17 +172,17 @@ DEFINE_TEST(test_write_format_zip_file_zip64)
p = extension_start = central_header + 46 + strlen(file_name);
extension_end = extension_start + i2(central_header + 30);
+ assertEqualInt(i2(p), 0x7875); /* 'ux' extension header */
+ assertEqualInt(i2(p + 2), 11); /* 'ux' size */
+ /* TODO: verify 'ux' contents */
+ p += 4 + i2(p + 2);
+
assertEqualInt(i2(p), 0x5455); /* 'UT' extension header */
assertEqualInt(i2(p + 2), 5); /* 'UT' size */
assertEqualInt(p[4], 1); /* 'UT' flags */
assertEqualInt(i4(p + 5), t); /* 'UT' mtime */
p += 4 + i2(p + 2);
- assertEqualInt(i2(p), 0x7875); /* 'ux' extension header */
- assertEqualInt(i2(p + 2), 11); /* 'ux' size */
- /* TODO: verify 'ux' contents */
- p += 4 + i2(p + 2);
-
/* Note: We don't expect to see zip64 extension in the central
* directory, since the writer knows the actual full size by
* the time it is ready to write the central directory and has
@@ -188,9 +197,9 @@ DEFINE_TEST(test_write_format_zip_file_zip64)
}
/* Should have run exactly to end of extra data. */
- assert(p == extension_end);
+ assertEqualAddress(p, extension_end);
- assert(p == eocd);
+ assertEqualAddress(p, eocd);
/* After Central dir, we find Zip64 eocd and Zip64 eocd locator. */
assertEqualMem(p, "PK\006\006", 4); /* Zip64 eocd */
@@ -212,31 +221,25 @@ DEFINE_TEST(test_write_format_zip_file_zip64)
p += 20;
/* Regular EOCD immediately follows Zip64 records. */
- assert(p == eocd_record);
+ assertEqualAddress(p, eocd_record);
/* Verify local header of file entry. */
p = local_header = buff;
assertEqualMem(p, "PK\003\004", 4); /* Signature */
assertEqualInt(i2(p + 4), zip_version); /* Version needed to extract */
- assertEqualInt(i2(p + 6), 8); /* Flags */
+ assertEqualInt(i2(p + 6), 8); /* Flags: bit 3 = length-at-end */
assertEqualInt(i2(p + 8), zip_compression); /* Compression method */
assertEqualInt(i2(p + 10), (tm->tm_hour * 2048) + (tm->tm_min * 32) + (tm->tm_sec / 2)); /* File time */
assertEqualInt(i2(p + 12), ((tm->tm_year - 80) * 512) + ((tm->tm_mon + 1) * 32) + tm->tm_mday); /* File date */
- assertEqualInt(i4(p + 14), 0); /* CRC-32 */
- /* assertEqualInt(i4(p + 18), sizeof(file_data)); */ /* Compressed size */
- /* assertEqualInt(i4(p + 22), sizeof(file_data)); */ /* Uncompressed size not stored because we're using length-at-end. */
+ assertEqualInt(i4(p + 14), 0); /* CRC-32 must be 0 because of length-at-end */
+ assertEqualInt(i4(p + 18), 0); /* Compressed size must be 0 because of length-at-end */
+ assertEqualInt(i4(p + 22), 0); /* Uncompressed size must be 0 because of length-at-end. */
assertEqualInt(i2(p + 26), strlen(file_name)); /* Pathname length */
- assertEqualInt(i2(p + 28), 57); /* Extra field length */
+ assertEqualInt(i2(p + 28), 37); /* Extra field length */
assertEqualMem(p + 30, file_name, strlen(file_name)); /* Pathname */
p = extension_start = local_header + 30 + strlen(file_name);
extension_end = extension_start + i2(local_header + 28);
- assertEqualInt(i2(p), 0x5455); /* 'UT' extension header */
- assertEqualInt(i2(p + 2), 5); /* 'UT' size */
- assertEqualInt(p[4], 1); /* 'UT' flags */
- assertEqualInt(i4(p + 5), t); /* 'UT' mtime */
- p += 4 + i2(p + 2);
-
assertEqualInt(i2(p), 0x7875); /* 'ux' extension header */
assertEqualInt(i2(p + 2), 11); /* 'ux' size */
assertEqualInt(p[4], 1); /* 'ux' version */
@@ -246,10 +249,10 @@ DEFINE_TEST(test_write_format_zip_file_zip64)
assertEqualInt(i4(p + 11), file_gid); /* 'Ux' GID */
p += 4 + i2(p + 2);
- assertEqualInt(i2(p), 0x0001); /* Zip64 extension header */
- assertEqualInt(i2(p + 2), 16); /* size */
- assertEqualInt(i8(p + 4), 8); /* uncompressed file size */
- /* compressed file size we can't verify here */
+ assertEqualInt(i2(p), 0x5455); /* 'UT' extension header */
+ assertEqualInt(i2(p + 2), 5); /* 'UT' size */
+ assertEqualInt(p[4], 1); /* 'UT' flags */
+ assertEqualInt(i4(p + 5), t); /* 'UT' mtime */
p += 4 + i2(p + 2);
assertEqualInt(i2(p), 0x6c78); /* 'xl' experimental extension header */
@@ -268,18 +271,18 @@ DEFINE_TEST(test_write_format_zip_file_zip64)
}
/* Should have run exactly to end of extra data. */
- assert(p == extension_end);
+ assertEqualAddress(p, extension_end);
/* Data descriptor should follow compressed data. */
while (p < central_header && memcmp(p, "PK\007\010", 4) != 0)
++p;
assertEqualMem(p, "PK\007\010", 4);
assertEqualInt(i4(p + 4), crc); /* CRC-32 */
- /* assertEqualInt(i8(p + 8), ???); */ /* compressed size */
+ assertEqualInt(i8(p + 8), p - extension_end); /* compressed size */
assertEqualInt(i8(p + 16), sizeof(file_data)); /* uncompressed size */
/* Central directory should immediately follow the only entry. */
- assert(p + 24 == central_header);
+ assertEqualAddress(p + 24, central_header);
free(buff);
}
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 2f98c6d4db8a..90bd16aaa581 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_zip_large.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_large.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#include <errno.h>
#include <stdlib.h>
@@ -273,22 +272,21 @@ static int64_t test_sizes[] = {
2 * GB - 1, 2 * GB, 2 * GB + 1,
/* Test for 32-bit unsigned overflow. */
4 * GB - 1, 4 * GB, 4 * GB + 1,
- /* And beyond ... because we can. */
- 16 * GB - 1, 16 * GB, 16 * GB + 1,
- 64 * GB - 1, 64 * GB, 64 * GB + 1,
- 256 * GB - 1, 256 * GB, 256 * GB + 1,
- 1 * TB,
+ /* And one larger sample */
+ 5 * GB,
0
};
static void
-verify_large_zip(struct archive *a, struct fileblocks *fileblocks)
+verify_large_zip(struct archive *a, struct fileblocks *fileblocks, int seeking)
{
char namebuff[64];
struct archive_entry *ae;
int i;
+ (void)seeking; /* UNUSED */
+
assertEqualIntA(a, ARCHIVE_OK,
archive_read_set_options(a, "zip:ignorecrc32"));
assertEqualIntA(a, ARCHIVE_OK,
@@ -309,9 +307,15 @@ verify_large_zip(struct archive *a, struct fileblocks *fileblocks)
for (i = 0; test_sizes[i] > 0; i++) {
assertEqualIntA(a, ARCHIVE_OK,
archive_read_next_header(a, &ae));
- sprintf(namebuff, "file_%d", i);
+ snprintf(namebuff, sizeof(namebuff), "file_%d", i);
assertEqualString(namebuff, archive_entry_pathname(ae));
- assertEqualInt(test_sizes[i], archive_entry_size(ae));
+ if (seeking) {
+ assert(archive_entry_size_is_set(ae));
+ assertEqualInt(test_sizes[i], archive_entry_size(ae));
+ } else {
+ assertEqualInt(0, archive_entry_size_is_set(ae));
+ }
+ /* TODO: Read to end of data, verify length */
}
assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
assertEqualString("lastfile", archive_entry_pathname(ae));
@@ -345,6 +349,7 @@ DEFINE_TEST(test_write_format_zip_large)
*/
a = archive_write_new();
archive_write_set_format_zip(a);
+ /* TODO: Repeat this entire test suite with default compression */
assertEqualIntA(a, ARCHIVE_OK,
archive_write_set_options(a, "zip:compression=store"));
assertEqualIntA(a, ARCHIVE_OK,
@@ -359,7 +364,7 @@ DEFINE_TEST(test_write_format_zip_large)
*/
for (i = 0; test_sizes[i] != 0; i++) {
assert((ae = archive_entry_new()) != NULL);
- sprintf(namebuff, "file_%d", i);
+ snprintf(namebuff, sizeof(namebuff), "file_%d", i);
archive_entry_copy_pathname(ae, namebuff);
archive_entry_set_mode(ae, S_IFREG | 0755);
filesize = test_sizes[i];
@@ -398,7 +403,7 @@ DEFINE_TEST(test_write_format_zip_large)
a = archive_read_new();
assertEqualIntA(a, ARCHIVE_OK,
archive_read_support_format_zip_seekable(a));
- verify_large_zip(a, fileblocks);
+ verify_large_zip(a, fileblocks, 1);
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
/*
@@ -407,7 +412,7 @@ DEFINE_TEST(test_write_format_zip_large)
a = archive_read_new();
assertEqualIntA(a, ARCHIVE_OK,
archive_read_support_format_zip_streamable(a));
- verify_large_zip(a, fileblocks);
+ verify_large_zip(a, fileblocks, 0);
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
/*
@@ -430,7 +435,7 @@ DEFINE_TEST(test_write_format_zip_large)
/* Verify regular end-of-central-directory record */
eocd = p - 22;
assertEqualMem(eocd, "PK\005\006\0\0\0\0", 8);
- assertEqualMem(eocd + 8, "\021\0\021\0", 4); /* 17 entries total */
+ assertEqualMem(eocd + 8, "\010\0\010\0", 4); /* 8 entries total */
cd_size = le32(eocd + 12);
/* Start of CD offset should be 0xffffffff */
assertEqualMem(eocd + 16, "\xff\xff\xff\xff", 4);
@@ -450,8 +455,8 @@ DEFINE_TEST(test_write_format_zip_large)
assertEqualMem(zip64_eocd + 14, "\055\0", 2); // Requires version: 45
assertEqualMem(zip64_eocd + 16, "\0\0\0\0", 4); // This disk
assertEqualMem(zip64_eocd + 20, "\0\0\0\0", 4); // Total disks
- assertEqualInt(17, le64(zip64_eocd + 24)); // Entries on this disk
- assertEqualInt(17, le64(zip64_eocd + 32)); // Total entries
+ assertEqualInt(8, le64(zip64_eocd + 24)); // Entries on this disk
+ assertEqualInt(8, le64(zip64_eocd + 32)); // Total entries
cd_size = le64(zip64_eocd + 40);
cd_start = p - (fileblocks->filesize - le64(zip64_eocd + 48));
diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip_stream.c b/contrib/libarchive/libarchive/test/test_write_format_zip_stream.c
new file mode 100644
index 000000000000..aff6a31ae171
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_stream.c
@@ -0,0 +1,247 @@
+/*-
+ * Copyright (c) 2003-2023 Tim Kientzle
+ * Copyright (c) 2008 Anselm Strauss
+ * 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"
+
+/*
+ * Detailed byte-for-byte verification of the format of a zip archive
+ * written in streaming mode WITHOUT Zip64 extensions enabled.
+ */
+
+static unsigned long
+bitcrc32(unsigned long c, void *_p, size_t s)
+{
+ /* This is a drop-in replacement for crc32() from zlib.
+ * Libarchive should be able to correctly generate
+ * uncompressed zip archives (including correct CRCs) even
+ * when zlib is unavailable, and this function helps us verify
+ * that. Yes, this is very, very slow and unsuitable for
+ * production use, but it's correct, compact, and works well
+ * enough for this particular usage. Libarchive internally
+ * uses a much more efficient implementation. */
+ const unsigned char *p = _p;
+ int bitctr;
+
+ if (p == NULL)
+ return (0);
+
+ for (; s > 0; --s) {
+ c ^= *p++;
+ for (bitctr = 8; bitctr > 0; --bitctr) {
+ if (c & 1) c = (c >> 1);
+ else c = (c >> 1) ^ 0xedb88320;
+ c ^= 0x80000000;
+ }
+ }
+ return (c);
+}
+
+/* Quick and dirty: Read 2-byte and 4-byte integers from Zip file. */
+static unsigned i2(const unsigned char *p) { return ((p[0] & 0xff) | ((p[1] & 0xff) << 8)); }
+static unsigned i4(const unsigned char *p) { return (i2(p) | (i2(p + 2) << 16)); }
+
+DEFINE_TEST(test_write_format_zip_stream)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ size_t used, buffsize = 1000000;
+ unsigned long crc;
+ unsigned long compressed_size = 0;
+ int file_perm = 00644;
+ int zip_version = 20;
+ int zip_compression = 8;
+ short file_uid = 10, file_gid = 20;
+ unsigned char *buff, *buffend, *p;
+ unsigned char *central_header, *local_header, *eocd, *eocd_record;
+ unsigned char *extension_start, *extension_end;
+ unsigned char *data_start, *data_end;
+ char file_data[] = {'1', '2', '3', '4', '5', '6', '7', '8'};
+ const char *file_name = "file";
+
+#ifndef HAVE_ZLIB_H
+ zip_compression = 0;
+#endif
+
+ 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_set_options(a, "zip:!zip64"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_open_memory(a, buff, buffsize, &used));
+
+ assert((ae = archive_entry_new()) != NULL);
+ archive_entry_copy_pathname(ae, file_name);
+ archive_entry_set_mode(ae, AE_IFREG | file_perm);
+ archive_entry_set_uid(ae, file_uid);
+ archive_entry_set_gid(ae, file_gid);
+ archive_entry_set_mtime(ae, 0, 0);
+ assertEqualInt(0, archive_write_header(a, ae));
+ archive_entry_free(ae);
+ assertEqualInt(8, archive_write_data(a, file_data, sizeof(file_data)));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+ buffend = buff + used;
+ dumpfile("constructed.zip", buff, used);
+
+ /* Verify "End of Central Directory" record. */
+ /* Get address of end-of-central-directory record. */
+ eocd_record = p = buffend - 22; /* Assumes there is no zip comment field. */
+ failure("End-of-central-directory begins with PK\\005\\006 signature");
+ assertEqualMem(p, "PK\005\006", 4);
+ failure("This must be disk 0");
+ assertEqualInt(i2(p + 4), 0);
+ failure("Central dir must start on disk 0");
+ assertEqualInt(i2(p + 6), 0);
+ failure("All central dir entries are on this disk");
+ assertEqualInt(i2(p + 8), i2(p + 10));
+ eocd = buff + i4(p + 12) + i4(p + 16);
+ failure("no zip comment");
+ assertEqualInt(i2(p + 20), 0);
+
+ /* Get address of first entry in central directory. */
+ central_header = p = buff + i4(buffend - 6);
+ failure("Central file record at offset %d should begin with"
+ " PK\\001\\002 signature",
+ i4(buffend - 10));
+
+ /* Verify file entry in central directory. */
+ assertEqualMem(p, "PK\001\002", 4); /* Signature */
+ assertEqualInt(i2(p + 4), 3 * 256 + zip_version); /* Version made by */
+ assertEqualInt(i2(p + 6), zip_version); /* Version needed to extract */
+ assertEqualInt(i2(p + 8), 8); /* Flags */
+ assertEqualInt(i2(p + 10), zip_compression); /* Compression method */
+ assertEqualInt(i2(p + 12), 0); /* File time */
+ assertEqualInt(i2(p + 14), 33); /* File date */
+ crc = bitcrc32(0, file_data, sizeof(file_data));
+ assertEqualInt(i4(p + 16), crc); /* CRC-32 */
+ compressed_size = i4(p + 20); /* Compressed size */
+ assertEqualInt(i4(p + 24), sizeof(file_data)); /* Uncompressed size */
+ assertEqualInt(i2(p + 28), strlen(file_name)); /* Pathname length */
+ /* assertEqualInt(i2(p + 30), 28); */ /* Extra field length: See below */
+ assertEqualInt(i2(p + 32), 0); /* File comment length */
+ assertEqualInt(i2(p + 34), 0); /* Disk number start */
+ assertEqualInt(i2(p + 36), 0); /* Internal file attrs */
+ assertEqualInt(i4(p + 38) >> 16 & 01777, file_perm); /* External file attrs */
+ assertEqualInt(i4(p + 42), 0); /* Offset of local header */
+ assertEqualMem(p + 46, file_name, strlen(file_name)); /* Pathname */
+ p = extension_start = central_header + 46 + strlen(file_name);
+ extension_end = extension_start + i2(central_header + 30);
+
+ assertEqualInt(i2(p), 0x7875); /* 'ux' extension header */
+ assertEqualInt(i2(p + 2), 11); /* 'ux' size */
+ assertEqualInt(p[4], 1); /* 'ux' version */
+ assertEqualInt(p[5], 4); /* 'ux' uid size */
+ assertEqualInt(i4(p + 6), file_uid); /* 'Ux' UID */
+ assertEqualInt(p[10], 4); /* 'ux' gid size */
+ assertEqualInt(i4(p + 11), file_gid); /* 'Ux' GID */
+ p += 4 + i2(p + 2);
+
+ assertEqualInt(i2(p), 0x5455); /* 'UT' extension header */
+ assertEqualInt(i2(p + 2), 5); /* 'UT' size */
+ assertEqualInt(p[4], 1); /* 'UT' flags */
+ assertEqualInt(i4(p + 5), 0); /* 'UT' mtime */
+ p += 4 + i2(p + 2);
+
+ /* Note: We don't expect to see zip64 extension in the central
+ * directory, since the writer knows the actual full size by
+ * the time it is ready to write the central directory and has
+ * no reason to insert it then. Info-Zip seems to do the same
+ * thing. */
+
+ /* Just in case: Report any extra extensions. */
+ while (p < extension_end) {
+ failure("Unexpected extension 0x%04X", i2(p));
+ assert(0);
+ p += 4 + i2(p + 2);
+ }
+
+ /* Should have run exactly to end of extra data. */
+ assert(p == extension_end);
+
+ assert(p == eocd);
+ assert(p == eocd_record);
+
+ /* Verify local header of file entry. */
+ p = local_header = buff;
+ assertEqualMem(p, "PK\003\004", 4); /* Signature */
+ assertEqualInt(i2(p + 4), zip_version); /* Version needed to extract */
+ assertEqualInt(i2(p + 6), 8); /* Flags */
+ assertEqualInt(i2(p + 8), zip_compression); /* Compression method */
+ assertEqualInt(i2(p + 10), 0); /* File time */
+ assertEqualInt(i2(p + 12), 33); /* File date */
+ assertEqualInt(i4(p + 14), 0); /* CRC-32 */
+ assertEqualInt(i4(p + 18), 0); /* Compressed size */
+ assertEqualInt(i4(p + 22), 0); /* Uncompressed size */
+ assertEqualInt(i2(p + 26), strlen(file_name)); /* Pathname length */
+ assertEqualInt(i2(p + 28), 24); /* Extra field length */
+ assertEqualMem(p + 30, file_name, strlen(file_name)); /* Pathname */
+ p = extension_start = local_header + 30 + strlen(file_name);
+ extension_end = extension_start + i2(local_header + 28);
+
+ assertEqualInt(i2(p), 0x7875); /* 'ux' extension header */
+ assertEqualInt(i2(p + 2), 11); /* 'ux' size */
+ assertEqualInt(p[4], 1); /* 'ux' version */
+ assertEqualInt(p[5], 4); /* 'ux' uid size */
+ assertEqualInt(i4(p + 6), file_uid); /* 'Ux' UID */
+ assertEqualInt(p[10], 4); /* 'ux' gid size */
+ assertEqualInt(i4(p + 11), file_gid); /* 'Ux' GID */
+ p += 4 + i2(p + 2);
+
+ assertEqualInt(i2(p), 0x5455); /* 'UT' extension header */
+ assertEqualInt(i2(p + 2), 5); /* 'UT' size */
+ assertEqualInt(p[4], 1); /* 'UT' flags */
+ assertEqualInt(i4(p + 5), 0); /* 'UT' mtime */
+ p += 4 + i2(p + 2);
+
+ /* Just in case: Report any extra extensions. */
+ while (p < extension_end) {
+ failure("Unexpected extension 0x%04X", i2(p));
+ assert(0);
+ p += 4 + i2(p + 2);
+ }
+
+ /* Should have run exactly to end of extra data. */
+ assert(p == extension_end);
+ data_start = p;
+
+ /* Data descriptor should follow compressed data. */
+ while (p < central_header && memcmp(p, "PK\007\010", 4) != 0)
+ ++p;
+ data_end = p;
+ assertEqualInt(data_end - data_start, compressed_size);
+ assertEqualMem(p, "PK\007\010", 4);
+ assertEqualInt(i4(p + 4), crc); /* CRC-32 */
+ assertEqualInt(i4(p + 8), compressed_size); /* compressed size */
+ assertEqualInt(i4(p + 12), sizeof(file_data)); /* uncompressed size */
+
+ /* Central directory should immediately follow the data descriptor. */
+ assert(p + 16 == central_header);
+
+ free(buff);
+}
diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip_zip64.c b/contrib/libarchive/libarchive/test/test_write_format_zip_zip64.c
index c5f00a2e5d8d..259cdc47d3ae 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_zip_zip64.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_zip64.c
@@ -24,7 +24,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static void
verify_zip_filesize(uint64_t size, int expected)
diff --git a/contrib/libarchive/libarchive/test/test_write_open_memory.c b/contrib/libarchive/libarchive/test/test_write_open_memory.c
index c2cf6a5933f7..2ebe01e413e6 100644
--- a/contrib/libarchive/libarchive/test/test_write_open_memory.c
+++ b/contrib/libarchive/libarchive/test/test_write_open_memory.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/* Try to force archive_write_open_memory.c to write past the end of an array. */
static unsigned char buff[16384];
diff --git a/contrib/libarchive/libarchive/test/test_write_read_format_zip.c b/contrib/libarchive/libarchive/test/test_write_read_format_zip.c
index 4f39489b5b53..828b092c7b3f 100644
--- a/contrib/libarchive/libarchive/test/test_write_read_format_zip.c
+++ b/contrib/libarchive/libarchive/test/test_write_read_format_zip.c
@@ -29,7 +29,6 @@
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/lib/libarchive/test/test_write_format_zip.c 201247 2009-12-30 05:59:21Z kientzle $");
/*
* These tests verify that our reader can read files
@@ -288,8 +287,12 @@ verify_contents(struct archive *a, int seeking, int improved_streaming)
if (seeking || improved_streaming) {
assertEqualInt(AE_IFREG | 0755, archive_entry_mode(ae));
}
- assertEqualInt(8, archive_entry_size(ae));
- assert(archive_entry_size_is_set(ae));
+ if (seeking) {
+ assertEqualInt(8, archive_entry_size(ae));
+ assert(archive_entry_size_is_set(ae));
+ } else {
+ assertEqualInt(0, archive_entry_size_is_set(ae));
+ }
assertEqualIntA(a, 8,
archive_read_data(a, filedata, sizeof(filedata)));
assertEqualMem(filedata, "12345678", 8);
@@ -305,8 +308,12 @@ verify_contents(struct archive *a, int seeking, int improved_streaming)
if (seeking || improved_streaming) {
assertEqualInt(AE_IFREG | 0755, archive_entry_mode(ae));
}
- assertEqualInt(4, archive_entry_size(ae));
- assert(archive_entry_size_is_set(ae));
+ if (seeking) {
+ assertEqualInt(4, archive_entry_size(ae));
+ assert(archive_entry_size_is_set(ae));
+ } else {
+ assertEqualInt(0, archive_entry_size_is_set(ae));
+ }
assertEqualIntA(a, 4,
archive_read_data(a, filedata, sizeof(filedata)));
assertEqualMem(filedata, "1234", 4);
@@ -323,6 +330,7 @@ verify_contents(struct archive *a, int seeking, int improved_streaming)
}
if (seeking) {
assertEqualInt(5, archive_entry_size(ae));
+ assert(archive_entry_size_is_set(ae));
} else {
assertEqualInt(0, archive_entry_size_is_set(ae));
}
@@ -356,8 +364,9 @@ verify_contents(struct archive *a, int seeking, int improved_streaming)
assertEqualInt(0, archive_entry_atime(ae));
assertEqualInt(0, archive_entry_ctime(ae));
assertEqualString("dir/", archive_entry_pathname(ae));
- if (seeking || improved_streaming)
+ if (seeking || improved_streaming) {
assertEqualInt(AE_IFDIR | 0755, archive_entry_mode(ae));
+ }
assertEqualInt(0, archive_entry_size(ae));
assert(archive_entry_size_is_set(ae));
assertEqualIntA(a, 0, archive_read_data(a, filedata, 10));
@@ -378,8 +387,12 @@ verify_contents(struct archive *a, int seeking, int improved_streaming)
if (seeking || improved_streaming) {
assertEqualInt(AE_IFREG | 0755, archive_entry_mode(ae));
}
- assertEqualInt(8, archive_entry_size(ae));
- assert(archive_entry_size_is_set(ae));
+ if (seeking) {
+ assertEqualInt(8, archive_entry_size(ae));
+ assert(archive_entry_size_is_set(ae));
+ } else {
+ assertEqualInt(0, archive_entry_size_is_set(ae));
+ }
assertEqualIntA(a, 8,
archive_read_data(a, filedata, sizeof(filedata)));
assertEqualMem(filedata, "12345678", 8);
@@ -395,8 +408,12 @@ verify_contents(struct archive *a, int seeking, int improved_streaming)
if (seeking || improved_streaming) {
assertEqualInt(AE_IFREG | 0755, archive_entry_mode(ae));
}
- assertEqualInt(4, archive_entry_size(ae));
- assert(archive_entry_size_is_set(ae));
+ if (seeking) {
+ assertEqualInt(4, archive_entry_size(ae));
+ assert(archive_entry_size_is_set(ae));
+ } else {
+ assertEqualInt(0, archive_entry_size_is_set(ae));
+ }
assertEqualIntA(a, 4,
archive_read_data(a, filedata, sizeof(filedata)));
assertEqualMem(filedata, "1234", 4);
@@ -413,6 +430,7 @@ verify_contents(struct archive *a, int seeking, int improved_streaming)
}
if (seeking) {
assertEqualInt(5, archive_entry_size(ae));
+ assert(archive_entry_size_is_set(ae));
} else {
assertEqualInt(0, archive_entry_size_is_set(ae));
}
@@ -468,9 +486,12 @@ verify_contents(struct archive *a, int seeking, int improved_streaming)
if (seeking || improved_streaming) {
assertEqualInt(AE_IFREG | 0755, archive_entry_mode(ae));
}
- assert(archive_entry_size_is_set(ae));
- assert(archive_entry_size_is_set(ae));
- assertEqualInt(8, archive_entry_size(ae));
+ if (seeking) {
+ assert(archive_entry_size_is_set(ae));
+ assertEqualInt(8, archive_entry_size(ae));
+ } else {
+ assertEqualInt(0, archive_entry_size_is_set(ae));
+ }
assertEqualIntA(a, 8,
archive_read_data(a, filedata, sizeof(filedata)));
assertEqualMem(filedata, "12345678", 8);
@@ -486,8 +507,12 @@ verify_contents(struct archive *a, int seeking, int improved_streaming)
if (seeking || improved_streaming) {
assertEqualInt(AE_IFREG | 0755, archive_entry_mode(ae));
}
- assertEqualInt(4, archive_entry_size(ae));
- assert(archive_entry_size_is_set(ae));
+ if (seeking) {
+ assertEqualInt(4, archive_entry_size(ae));
+ assert(archive_entry_size_is_set(ae));
+ } else {
+ assertEqualInt(0, archive_entry_size_is_set(ae));
+ }
assertEqualIntA(a, 4,
archive_read_data(a, filedata, sizeof(filedata)));
assertEqualMem(filedata, "ACEG", 4);
@@ -503,6 +528,7 @@ verify_contents(struct archive *a, int seeking, int improved_streaming)
assertEqualInt(AE_IFREG | 0621, archive_entry_mode(ae));
if (seeking) {
assertEqualInt(5, archive_entry_size(ae));
+ assert(archive_entry_size_is_set(ae));
} else {
assertEqualInt(0, archive_entry_size_is_set(ae));
}
diff --git a/contrib/libarchive/libarchive/test/test_xattr_platform.c b/contrib/libarchive/libarchive/test/test_xattr_platform.c
index df3f81a5b3fd..3f16cac34154 100644
--- a/contrib/libarchive/libarchive/test/test_xattr_platform.c
+++ b/contrib/libarchive/libarchive/test/test_xattr_platform.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_xattr_platform)
{
diff --git a/contrib/libarchive/libarchive/test/test_zip_filename_encoding.c b/contrib/libarchive/libarchive/test/test_zip_filename_encoding.c
index 54cd00630b8e..448fb9b1d4ef 100644
--- a/contrib/libarchive/libarchive/test/test_zip_filename_encoding.c
+++ b/contrib/libarchive/libarchive/test/test_zip_filename_encoding.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#include <locale.h>
@@ -71,7 +70,9 @@ DEFINE_TEST(test_zip_filename_encoding_UTF8)
/*
* Verify that UTF-8 filenames are correctly stored without
* hdrcharset=UTF-8 option.
+ * Skip on Windows where we default to OEMCP
*/
+#if !defined(_WIN32) || defined(__CYGWIN__)
a = archive_write_new();
assertEqualInt(ARCHIVE_OK, archive_write_set_format_zip(a));
assertEqualInt(ARCHIVE_OK,
@@ -90,6 +91,7 @@ DEFINE_TEST(test_zip_filename_encoding_UTF8)
* which indicates the filename charset is UTF-8. */
assertEqualInt(0x08, buff[7]);
assertEqualMem(buff + 30, "\xD0\xBF\xD1\x80\xD0\xB8", 6);
+#endif
/*
* Verify that A bit 11 of general purpose flag is not set
diff --git a/contrib/libarchive/libarchive/xxhash.c b/contrib/libarchive/libarchive/xxhash.c
index f96e9d93493e..beacd2391221 100644
--- a/contrib/libarchive/libarchive/xxhash.c
+++ b/contrib/libarchive/libarchive/xxhash.c
@@ -149,6 +149,10 @@ typedef struct _U32_S { U32 v; } _PACKED U32_S;
#if GCC_VERSION >= 409
__attribute__((__no_sanitize_undefined__))
+#else
+# if defined(__clang__)
+__attribute__((no_sanitize("undefined")))
+# endif
#endif
#if defined(_MSC_VER)
static __inline U32 A32(const void * x)
diff --git a/contrib/libarchive/libarchive_fe/err.c b/contrib/libarchive/libarchive_fe/err.c
index 8c860350bc3e..f6dcf44af347 100644
--- a/contrib/libarchive/libarchive_fe/err.c
+++ b/contrib/libarchive/libarchive_fe/err.c
@@ -25,8 +25,6 @@
*/
#include "lafe_platform.h"
-__FBSDID("$FreeBSD$");
-
#ifdef HAVE_STDARG_H
#include <stdarg.h>
#endif
diff --git a/contrib/libarchive/libarchive_fe/err.h b/contrib/libarchive/libarchive_fe/err.h
index 2f84c2fe6fe0..f4a66350a669 100644
--- a/contrib/libarchive/libarchive_fe/err.h
+++ b/contrib/libarchive/libarchive_fe/err.h
@@ -29,10 +29,12 @@
#define LAFE_ERR_H
#if defined(__GNUC__) && (__GNUC__ > 2 || \
- (__GNUC__ == 2 && __GNUC_MINOR__ >= 5))
-#define __LA_DEAD __attribute__((__noreturn__))
+ (__GNUC__ == 2 && __GNUC_MINOR__ >= 5))
+#define __LA_NORETURN __attribute__((__noreturn__))
+#elif defined(_MSC_VER)
+#define __LA_NORETURN __declspec(noreturn)
#else
-#define __LA_DEAD
+#define __LA_NORETURN
#endif
#if defined(__GNUC__) && (__GNUC__ > 2 || \
@@ -48,8 +50,7 @@
#endif
void lafe_warnc(int code, const char *fmt, ...) __LA_PRINTFLIKE(2, 3);
-void lafe_errc(int eval, int code, const char *fmt, ...) __LA_DEAD
- __LA_PRINTFLIKE(3, 4);
+__LA_NORETURN void lafe_errc(int eval, int code, const char *fmt, ...) __LA_PRINTFLIKE(3, 4);
const char * lafe_getprogname(void);
void lafe_setprogname(const char *name, const char *defaultname);
diff --git a/contrib/libarchive/libarchive_fe/lafe_platform.h b/contrib/libarchive/libarchive_fe/lafe_platform.h
index 38e100d78da8..6de8f898a22f 100644
--- a/contrib/libarchive/libarchive_fe/lafe_platform.h
+++ b/contrib/libarchive/libarchive_fe/lafe_platform.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
@@ -42,14 +40,4 @@
#include "config.h"
#endif
-/* Get a real definition for __FBSDID if we can */
-#if HAVE_SYS_CDEFS_H
-#include <sys/cdefs.h>
-#endif
-
-/* If not, define it so as to avoid dangling semicolons. */
-#ifndef __FBSDID
-#define __FBSDID(a) struct _undefined_hack
-#endif
-
#endif
diff --git a/contrib/libarchive/libarchive_fe/line_reader.c b/contrib/libarchive/libarchive_fe/line_reader.c
index c7c4694eeb82..7f0429ece3cf 100644
--- a/contrib/libarchive/libarchive_fe/line_reader.c
+++ b/contrib/libarchive/libarchive_fe/line_reader.c
@@ -26,8 +26,6 @@
*/
#include "lafe_platform.h"
-__FBSDID("$FreeBSD$");
-
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
diff --git a/contrib/libarchive/libarchive_fe/passphrase.c b/contrib/libarchive/libarchive_fe/passphrase.c
index edf72d147182..90fef32d254c 100644
--- a/contrib/libarchive/libarchive_fe/passphrase.c
+++ b/contrib/libarchive/libarchive_fe/passphrase.c
@@ -50,8 +50,6 @@
#include "lafe_platform.h"
-__FBSDID("$FreeBSD$");
-
#include <errno.h>
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
@@ -78,6 +76,7 @@ __FBSDID("$FreeBSD$");
#if defined(_WIN32) && !defined(__CYGWIN__)
+#include <string.h>
#include <windows.h>
static char *
@@ -115,8 +114,7 @@ readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags)
WriteFile(hStdout, "\r\n", 2, NULL, NULL);
buf[rbytes] = '\0';
/* Remove trailing carriage return(s). */
- if (rbytes > 2 && buf[rbytes - 2] == '\r' && buf[rbytes - 1] == '\n')
- buf[rbytes - 2] = '\0';
+ buf[strcspn(buf, "\r\n")] = '\0';
return (buf);
}
@@ -171,8 +169,10 @@ readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags)
int input, output, save_errno, i, need_restart;
char ch, *p, *end;
struct termios term, oterm;
+#ifdef HAVE_SIGACTION
struct sigaction sa, savealrm, saveint, savehup, savequit, saveterm;
struct sigaction savetstp, savettin, savettou, savepipe;
+#endif
/* I suppose we could alloc on demand in this case (XXX). */
if (bufsiz == 0) {
@@ -221,6 +221,7 @@ restart:
oterm.c_lflag |= ECHO;
}
+#ifdef HAVE_SIGACTION
/*
* Catch signals that would otherwise cause the user to end
* up with echo turned off in the shell. Don't worry about
@@ -239,6 +240,7 @@ restart:
(void)sigaction(SIGTSTP, &sa, &savetstp);
(void)sigaction(SIGTTIN, &sa, &savettin);
(void)sigaction(SIGTTOU, &sa, &savettou);
+#endif
if (!(flags & RPP_STDIN)) {
int r = write(output, prompt, strlen(prompt));
@@ -276,6 +278,7 @@ restart:
continue;
signo[SIGTTOU] = sigttou;
}
+#ifdef HAVE_SIGACTION
(void)sigaction(SIGALRM, &savealrm, NULL);
(void)sigaction(SIGHUP, &savehup, NULL);
(void)sigaction(SIGINT, &saveint, NULL);
@@ -285,6 +288,7 @@ restart:
(void)sigaction(SIGTSTP, &savetstp, NULL);
(void)sigaction(SIGTTIN, &savettin, NULL);
(void)sigaction(SIGTTOU, &savettou, NULL);
+#endif
if (input != STDIN_FILENO)
(void)close(input);
@@ -325,7 +329,7 @@ lafe_readpassphrase(const char *prompt, char *buf, size_t bufsiz)
break;
default:
lafe_errc(1, errno, "Couldn't read passphrase");
- break;
+ /* NOTREACHED */
}
}
return (p);
diff --git a/contrib/libarchive/tar/bsdtar.1 b/contrib/libarchive/tar/bsdtar.1
index 86a06bbd13bb..fe9ec9504674 100644
--- a/contrib/libarchive/tar/bsdtar.1
+++ b/contrib/libarchive/tar/bsdtar.1
@@ -23,9 +23,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
-.Dd January 31, 2020
+.Dd April 23, 2024
.Dt TAR 1
.Os
.Sh NAME
@@ -274,6 +272,15 @@ will be used instead.
On create, this sets the group name that will be stored
in the archive;
the name will not be verified against the system group database.
+.It Fl Fl group Ar name Ns Op : Ns Ar gid
+Use the provided group, if
+.Ar gid
+is not provided,
+.Ar name
+can be either a group name or numeric id.
+See the
+.Fl Fl gname
+option for details.
.It Fl H
(c and r modes only)
Symbolic links named on the command line will be followed; the
@@ -403,6 +410,8 @@ This is the reverse of
and the default behavior in c, r, and u modes or if
.Nm
is run in x mode as root.
+Currently supported only for pax formats
+(including "pax restricted", the default tar format for bsdtar.)
.It Fl n , Fl Fl norecurse , Fl Fl no-recursion
Do not operate recursively on the content of directories.
.It Fl Fl newer Ar date
@@ -470,6 +479,11 @@ This is the reverse of
and the default behavior if
.Nm
is run as non-root in x mode.
+.It Fl Fl no-read-sparse
+(c, r, u modes only)
+Do not read sparse file information from disk.
+This is the reverse of
+.Fl Fl read-sparse .
.It Fl Fl no-safe-writes
(x mode only)
Do not create temporary files and use
@@ -630,13 +644,75 @@ A decimal integer from 4 to 7 specifying the lz4 compression block size
.It Cm lz4:block-dependence
Use the previous block of the block being compressed for
a compression dictionary to improve compression ratio.
-.It Cm zstd:compression-level
-A decimal integer specifying the zstd compression level. Supported values depend
+.It Cm zstd:compression-level Ns = Ns Ar N
+A decimal integer specifying the zstd compression level.
+Supported values depend
on the library version, common values are from 1 to 22.
+.It Cm zstd:threads Ns = Ns Ar N
+Specify the number of worker threads to use, or 0 to use as many
+threads as there are CPU cores in the system.
+.It Cm zstd:frame-per-file
+Start a new compression frame at the beginning of each file in the
+archive.
+.It Cm zstd:min-frame-in Ns = Ns Ar N
+In combination with
+.Cm zstd:frame-per-file ,
+do not start a new compression frame unless the uncompressed size of
+the current frame is at least
+.Ar N
+bytes.
+The number may be followed by
+.Li k / Li kB ,
+.Li M / Li MB ,
+or
+.Li G / Li GB
+to indicate kilobytes, megabytes or gigabytes respectively.
+.It Cm zstd:min-frame-out Ns = Ns Ar N , Cm zstd:min-frame-size Ns = Ns Ar N
+In combination with
+.Cm zstd:frame-per-file ,
+do not start a new compression frame unless the compressed size of the
+current frame is at least
+.Ar N
+bytes.
+The number may be followed by
+.Li k / Li kB ,
+.Li M / Li MB ,
+or
+.Li G / Li GB
+to indicate kilobytes, megabytes or gigabytes respectively.
+.It Cm zstd:max-frame-in Ns = Ns Ar N , Cm zstd:max-frame-size Ns = Ns Ar N
+Start a new compression frame as soon as possible after the
+uncompressed size of the current frame exceeds
+.Ar N
+bytes.
+The number may be followed by
+.Li k / Li kB ,
+.Li M / Li MB ,
+or
+.Li G / Li GB
+to indicate kilobytes, megabytes or gigabytes respectively.
+Values less than 1,024 will be rejected.
+.It Cm zstd:max-frame-out Ns = Ns Ar N
+Start a new compression frame as soon as possible after the compressed
+size of the current frame exceeds
+.Ar N
+bytes.
+The number may be followed by
+.Li k / Li kB ,
+.Li M / Li MB ,
+or
+.Li G / Li GB
+to indicate kilobytes, megabytes or gigabytes respectively.
+Values less than 1,024 will be rejected.
.It Cm lzop:compression-level
A decimal integer from 1 to 9 specifying the lzop compression level.
.It Cm xz:compression-level
A decimal integer from 0 to 9 specifying the xz compression level.
+.It Cm xz:threads
+Specify the number of worker threads to use.
+Setting threads to a special value 0 makes
+.Xr xz 1
+use as many threads as there are CPU cores on the system.
.It Cm mtree: Ns Ar keyword
The mtree writer module allows you to specify which mtree keywords
will be included in the output.
@@ -730,6 +806,12 @@ By default, the archive is always read to the very end, since
there can be multiple entries with the same name and, by convention,
later entries overwrite earlier entries.
This option is provided as a performance optimization.
+.It Fl Fl read-sparse
+(c, r, u modes only)
+Read sparse file information from disk.
+This is the reverse of
+.Fl Fl no-read-sparse
+and the default behavior.
.It Fl S
(x mode only)
Extract files as sparse files.
@@ -740,7 +822,7 @@ This works similar to the conv=sparse option of dd.
Modify file or archive member names according to
.Pa pattern .
The pattern has the format
-.Ar /old/new/ Ns Op ghHprRsS
+.Ar /old/new/ Ns Op bghHprRsS
where
.Ar old
is a basic regular expression,
@@ -762,6 +844,9 @@ of symbolic links.
The optional trailing p specifies that after a successful substitution
the original path name and the new path name should be printed to
standard error.
+The optional trailing b specifies that the substitution should be
+matched from the beginning of the string rather than from right after the
+position at which the previous matching substitution ended.
Optional trailing H, R, or S characters suppress substitutions
for hardlink targets, regular filenames, or symlink targets,
respectively.
@@ -867,6 +952,15 @@ the name is not verified against the system user database.
Pipe the input (in x or t mode) or the output (in c mode) through
.Pa program
instead of using the builtin compression support.
+.It Fl Fl owner Ar name Ns Op : Ns Ar uid
+Use the provided user, if
+.Ar uid
+is not provided,
+.Ar name
+can be either an username or numeric id.
+See the
+.Fl Fl uname
+option for details.
.It Fl v , Fl Fl verbose
Produce verbose output.
In create and extract modes,
@@ -932,7 +1026,7 @@ archives.
.Sh ENVIRONMENT
The following environment variables affect the execution of
.Nm :
-.Bl -tag -width ".Ev BLOCKSIZE"
+.Bl -tag -width indent
.It Ev TAR_READER_OPTIONS
The default options for format readers and compression readers.
The
diff --git a/contrib/libarchive/tar/bsdtar.c b/contrib/libarchive/tar/bsdtar.c
index d421fa033331..42baab2861bd 100644
--- a/contrib/libarchive/tar/bsdtar.c
+++ b/contrib/libarchive/tar/bsdtar.c
@@ -24,7 +24,6 @@
*/
#include "bsdtar_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
@@ -70,24 +69,20 @@ __FBSDID("$FreeBSD$");
#include "bsdtar.h"
#include "err.h"
-/*
- * Per POSIX.1-1988, tar defaults to reading/writing archives to/from
- * the default tape device for the system. Pick something reasonable here.
- */
-#ifdef __linux
-#define _PATH_DEFTAPE "/dev/st0"
-#endif
-#if defined(_WIN32) && !defined(__CYGWIN__)
-#define _PATH_DEFTAPE "\\\\.\\tape0"
+#if ARCHIVE_VERSION_NUMBER < 4000000 && !defined(_PATH_DEFTAPE)
+// Libarchive 4.0 and later will NOT define _PATH_DEFTAPE
+// but will honor it if it's set in the build.
+// Until then, we'll continue to set it by default on certain platforms:
+#if defined(__linux)
+#define _PATH_DEFTAPE "/dev/st0"
+#elif defined(_WIN32) && !defined(__CYGWIN__)
+#define _PATH_DEFTAPE "\\\\.\\tape0"
+#elif !defined(__APPLE__)
+#define _PATH_DEFTAPE "/dev/tape"
#endif
-#if defined(__APPLE__)
-#undef _PATH_DEFTAPE
-#define _PATH_DEFTAPE "-" /* Mac OS has no tape support, default to stdio. */
#endif
-#ifndef _PATH_DEFTAPE
-#define _PATH_DEFTAPE "/dev/tape"
-#endif
+#define _PATH_STDIO "-"
#ifdef __MINGW32__
int _CRT_glob = 0; /* Disable broken CRT globbing. */
@@ -118,11 +113,11 @@ need_report(void)
}
#endif
-static void long_help(void) __LA_DEAD;
+static __LA_NORETURN void long_help(void);
static void only_mode(struct bsdtar *, const char *opt,
const char *valid);
static void set_mode(struct bsdtar *, char opt);
-static void version(void) __LA_DEAD;
+static __LA_NORETURN void version(void);
/* A basic set of security flags to request from libarchive. */
#define SECURITY \
@@ -159,9 +154,10 @@ main(int argc, char **argv)
char compression, compression2;
const char *compression_name, *compression2_name;
const char *compress_program;
- char *tptr;
+ char *tptr, *uptr;
char possible_help_request;
char buff[16];
+ long l;
/*
* Use a pointer for consistency, but stack-allocated storage
@@ -217,8 +213,21 @@ main(int argc, char **argv)
/* Default: open tape drive. */
bsdtar->filename = getenv("TAPE");
- if (bsdtar->filename == NULL)
- bsdtar->filename = _PATH_DEFTAPE;
+#if defined(_PATH_DEFTAPE)
+ if (bsdtar->filename == NULL) {
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ int tapeExists = !_access(_PATH_DEFTAPE, 0);
+#else
+ int tapeExists = !access(_PATH_DEFTAPE, F_OK);
+#endif
+ if (tapeExists) {
+ bsdtar->filename = _PATH_DEFTAPE;
+ }
+ }
+#endif
+ if (bsdtar->filename == NULL) {
+ bsdtar->filename = _PATH_STDIO;
+ }
/* Default block size settings. */
bsdtar->bytes_per_block = DEFAULT_BYTES_PER_BLOCK;
@@ -293,16 +302,15 @@ main(int argc, char **argv)
/* libarchive doesn't need this; just ignore it. */
break;
case 'b': /* SUSv2 */
- errno = 0;
tptr = NULL;
- t = (int)strtol(bsdtar->argument, &tptr, 10);
- if (errno || t <= 0 || t > 8192 ||
+ l = strtol(bsdtar->argument, &tptr, 10);
+ if (l <= 0 || l > 8192L ||
*(bsdtar->argument) == '\0' || tptr == NULL ||
*tptr != '\0') {
lafe_errc(1, 0, "Invalid or out of range "
"(1..8192) argument to -b");
}
- bsdtar->bytes_per_block = 512 * t;
+ bsdtar->bytes_per_block = 512 * (int)l;
/* Explicit -b forces last block size. */
bsdtar->bytes_in_last_block = bsdtar->bytes_per_block;
break;
@@ -361,18 +369,46 @@ main(int argc, char **argv)
bsdtar->filename = bsdtar->argument;
break;
case OPTION_GID: /* cpio */
- errno = 0;
tptr = NULL;
- t = (int)strtol(bsdtar->argument, &tptr, 10);
- if (errno || t < 0 || *(bsdtar->argument) == '\0' ||
+ l = strtol(bsdtar->argument, &tptr, 10);
+ if (l < 0 || l >= INT_MAX || *(bsdtar->argument) == '\0' ||
tptr == NULL || *tptr != '\0') {
lafe_errc(1, 0, "Invalid argument to --gid");
}
- bsdtar->gid = t;
+ bsdtar->gid = (int)l;
break;
case OPTION_GNAME: /* cpio */
bsdtar->gname = bsdtar->argument;
break;
+ case OPTION_GROUP: /* GNU tar */
+ tptr = NULL;
+
+ uptr = strchr(bsdtar->argument, ':');
+ if (uptr != NULL) {
+ if (uptr[1] == '\0') {
+ lafe_errc(1, 0, "Invalid argument to --group (missing id after :)");
+ }
+ uptr[0] = 0;
+ uptr++;
+ l = strtol(uptr, &tptr, 10);
+ if (l < 0 || l >= INT_MAX || *uptr == '\0' ||
+ tptr == NULL || *tptr != '\0') {
+ lafe_errc(1, 0, "Invalid argument to --group (%s is not a number)", uptr);
+ } else {
+ bsdtar->gid = (int)l;
+ }
+ bsdtar->gname = bsdtar->argument;
+ } else {
+ l = strtol(bsdtar->argument, &tptr, 10);
+ if (l < 0 || l >= INT_MAX || *(bsdtar->argument) == '\0' ||
+ tptr == NULL || *tptr != '\0') {
+ bsdtar->gname = bsdtar->argument;
+ } else {
+ bsdtar->gid = (int)l;
+ bsdtar->gname = "";
+ }
+ }
+ break;
case OPTION_GRZIP:
if (compression != '\0')
lafe_errc(1, 0,
@@ -391,8 +427,7 @@ main(int argc, char **argv)
break;
case OPTION_HELP: /* GNU tar, others */
long_help();
- exit(0);
- break;
+ /* NOTREACHED*/
case OPTION_HFS_COMPRESSION: /* Mac OS X v10.6 or later */
bsdtar->extract_flags |=
ARCHIVE_EXTRACT_HFS_COMPRESSION_FORCED;
@@ -542,6 +577,10 @@ main(int argc, char **argv)
bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_MAC_METADATA;
bsdtar->flags |= OPTFLAG_NO_MAC_METADATA;
break;
+ case OPTION_NO_READ_SPARSE:
+ bsdtar->readdisk_flags |= ARCHIVE_READDISK_NO_SPARSE;
+ bsdtar->flags |= OPTFLAG_NO_READ_SPARSE;
+ break;
case OPTION_NO_SAFE_WRITES:
bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_SAFE_WRITES;
break;
@@ -613,8 +652,42 @@ main(int argc, char **argv)
ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS;
break;
case OPTION_OPTIONS:
+ if (bsdtar->option_options != NULL) {
+ lafe_warnc(0,
+ "Ignoring previous option '%s', separate multiple options with commas",
+ bsdtar->option_options);
+ }
bsdtar->option_options = bsdtar->argument;
break;
+ case OPTION_OWNER: /* GNU tar */
+ tptr = NULL;
+
+ uptr = strchr(bsdtar->argument, ':');
+ if (uptr != NULL) {
+ if (uptr[1] == 0) {
+ lafe_errc(1, 0, "Invalid argument to --owner (missing id after :)");
+ }
+ uptr[0] = 0;
+ uptr++;
+ l = strtol(uptr, &tptr, 10);
+ if (l < 0 || l >= INT_MAX || *uptr == '\0' ||
+ tptr == NULL || *tptr != '\0') {
+ lafe_errc(1, 0, "Invalid argument to --owner (%s is not a number)", uptr);
+ } else {
+ bsdtar->uid = (int)l;
+ }
+ bsdtar->uname = bsdtar->argument;
+ } else {
+ l = strtol(bsdtar->argument, &tptr, 10);
+ if (l < 0 || l >= INT_MAX || *(bsdtar->argument) == '\0' ||
+ tptr == NULL || *tptr != '\0') {
+ bsdtar->uname = bsdtar->argument;
+ } else {
+ bsdtar->uid = (int)l;
+ bsdtar->uname = "";
+ }
+ }
+ break;
#if 0
/*
* The common BSD -P option is not necessary, since
@@ -649,11 +722,15 @@ main(int argc, char **argv)
case 'r': /* SUSv2 */
set_mode(bsdtar, opt);
break;
+ case OPTION_READ_SPARSE:
+ bsdtar->readdisk_flags &= ~ARCHIVE_READDISK_NO_SPARSE;
+ bsdtar->flags |= OPTFLAG_READ_SPARSE;
+ break;
case 'S': /* NetBSD pax-as-tar */
bsdtar->extract_flags |= ARCHIVE_EXTRACT_SPARSE;
break;
case 's': /* NetBSD pax-as-tar */
-#if defined(HAVE_REGEX_H) || defined(HAVE_PCREPOSIX_H)
+#if defined(HAVE_REGEX_H) || defined(HAVE_PCREPOSIX_H) || defined(HAVE_PCRE2POSIX_H)
add_substitution(bsdtar, bsdtar->argument);
#else
lafe_warnc(0,
@@ -668,15 +745,14 @@ main(int argc, char **argv)
bsdtar->extract_flags |= ARCHIVE_EXTRACT_OWNER;
break;
case OPTION_STRIP_COMPONENTS: /* GNU tar 1.15 */
- errno = 0;
tptr = NULL;
- t = (int)strtol(bsdtar->argument, &tptr, 10);
- if (errno || t < 0 || *(bsdtar->argument) == '\0' ||
+ l = strtol(bsdtar->argument, &tptr, 10);
+ if (l < 0 || l > 100000L || *(bsdtar->argument) == '\0' ||
tptr == NULL || *tptr != '\0') {
lafe_errc(1, 0, "Invalid argument to "
"--strip-components");
}
- bsdtar->strip_components = t;
+ bsdtar->strip_components = (int)l;
break;
case 'T': /* GNU tar */
bsdtar->names_from_file = bsdtar->argument;
@@ -696,14 +772,13 @@ main(int argc, char **argv)
set_mode(bsdtar, opt);
break;
case OPTION_UID: /* cpio */
- errno = 0;
tptr = NULL;
- t = (int)strtol(bsdtar->argument, &tptr, 10);
- if (errno || t < 0 || *(bsdtar->argument) == '\0' ||
+ l = strtol(bsdtar->argument, &tptr, 10);
+ if (l < 0 || l >= INT_MAX || *(bsdtar->argument) == '\0' ||
tptr == NULL || *tptr != '\0') {
lafe_errc(1, 0, "Invalid argument to --uid");
}
- bsdtar->uid = t;
+ bsdtar->uid = (int)l;
break;
case OPTION_UNAME: /* cpio */
bsdtar->uname = bsdtar->argument;
@@ -721,7 +796,7 @@ main(int argc, char **argv)
break;
case OPTION_VERSION: /* GNU convention */
version();
- break;
+ /* NOTREACHED */
#if 0
/*
* The -W longopt feature is handled inside of
@@ -787,7 +862,6 @@ main(int argc, char **argv)
/* If no "real" mode was specified, treat -h as --help. */
if ((bsdtar->mode == '\0') && possible_help_request) {
long_help();
- exit(0);
}
/* Otherwise, a mode is required. */
@@ -796,8 +870,14 @@ main(int argc, char **argv)
"Must specify one of -c, -r, -t, -u, -x");
/* Check boolean options only permitted in certain modes. */
- if (bsdtar->flags & OPTFLAG_AUTO_COMPRESS)
- only_mode(bsdtar, "-a", "c");
+ if (bsdtar->flags & OPTFLAG_AUTO_COMPRESS) {
+ only_mode(bsdtar, "-a", "cx");
+ if (bsdtar->mode == 'x') {
+ bsdtar->flags &= ~OPTFLAG_AUTO_COMPRESS;
+ lafe_warnc(0,
+ "Ignoring option -a in mode -x");
+ }
+ }
if (bsdtar->readdisk_flags & ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS)
only_mode(bsdtar, "--one-file-system", "cru");
if (bsdtar->flags & OPTFLAG_FAST_READ)
@@ -927,7 +1007,7 @@ main(int argc, char **argv)
}
archive_match_free(bsdtar->matching);
-#if defined(HAVE_REGEX_H) || defined(HAVE_PCREPOSIX_H)
+#if defined(HAVE_REGEX_H) || defined(HAVE_PCREPOSIX_H) || defined(HAVE_PCRE2POSIX_H)
cleanup_substitution(bsdtar);
#endif
cset_free(bsdtar->cset);
diff --git a/contrib/libarchive/tar/bsdtar.h b/contrib/libarchive/tar/bsdtar.h
index 2d61e256c740..22056c7920c4 100644
--- a/contrib/libarchive/tar/bsdtar.h
+++ b/contrib/libarchive/tar/bsdtar.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef BSDTAR_H_INCLUDED
@@ -129,6 +127,8 @@ struct bsdtar {
#define OPTFLAG_FFLAGS (0x00100000) /* --fflags */
#define OPTFLAG_NO_MAC_METADATA (0x00200000) /* --no-mac-metadata */
#define OPTFLAG_MAC_METADATA (0x00400000) /* --mac-metadata */
+#define OPTFLAG_NO_READ_SPARSE (0x00800000) /* --no-read-sparse */
+#define OPTFLAG_READ_SPARSE (0x01000000) /* --read-sparse */
/* Fake short equivalents for long options that otherwise lack them. */
enum {
@@ -143,6 +143,7 @@ enum {
OPTION_FORMAT,
OPTION_GID,
OPTION_GNAME,
+ OPTION_GROUP,
OPTION_GRZIP,
OPTION_HELP,
OPTION_HFS_COMPRESSION,
@@ -164,6 +165,7 @@ enum {
OPTION_NO_ACLS,
OPTION_NO_FFLAGS,
OPTION_NO_MAC_METADATA,
+ OPTION_NO_READ_SPARSE,
OPTION_NO_SAFE_WRITES,
OPTION_NO_SAME_OWNER,
OPTION_NO_SAME_PERMISSIONS,
@@ -176,8 +178,10 @@ enum {
OPTION_OLDER_MTIME_THAN,
OPTION_ONE_FILE_SYSTEM,
OPTION_OPTIONS,
+ OPTION_OWNER,
OPTION_PASSPHRASE,
OPTION_POSIX,
+ OPTION_READ_SPARSE,
OPTION_SAFE_WRITES,
OPTION_SAME_OWNER,
OPTION_STRIP_COMPONENTS,
@@ -204,10 +208,10 @@ void tar_mode_r(struct bsdtar *bsdtar);
void tar_mode_t(struct bsdtar *bsdtar);
void tar_mode_u(struct bsdtar *bsdtar);
void tar_mode_x(struct bsdtar *bsdtar);
-void usage(void) __LA_DEAD;
+__LA_NORETURN void usage(void);
int yes(const char *fmt, ...) __LA_PRINTF(1, 2);
-#if defined(HAVE_REGEX_H) || defined(HAVE_PCREPOSIX_H)
+#if defined(HAVE_REGEX_H) || defined(HAVE_PCREPOSIX_H) || defined(HAVE_PCRE2POSIX_H)
void add_substitution(struct bsdtar *, const char *);
int apply_substitution(struct bsdtar *, const char *, char **, int, int);
void cleanup_substitution(struct bsdtar *);
diff --git a/contrib/libarchive/tar/bsdtar_platform.h b/contrib/libarchive/tar/bsdtar_platform.h
index c5342b44ba60..a4f37d95e9b3 100644
--- a/contrib/libarchive/tar/bsdtar_platform.h
+++ b/contrib/libarchive/tar/bsdtar_platform.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
@@ -46,16 +44,6 @@
#include "bsdtar_windows.h"
#endif
-/* Get a real definition for __FBSDID if we can */
-#if HAVE_SYS_CDEFS_H
-#include <sys/cdefs.h>
-#endif
-
-/* If not, define it so as to avoid dangling semicolons. */
-#ifndef __FBSDID
-#define __FBSDID(a) struct _undefined_hack
-#endif
-
#ifdef HAVE_LIBARCHIVE
/* If we're using the platform libarchive, include system headers. */
#include <archive.h>
@@ -121,12 +109,14 @@
/* How to mark functions that don't return. */
/* This facilitates use of some newer static code analysis tools. */
-#undef __LA_DEAD
+#undef __LA_NORETURN
#if defined(__GNUC__) && (__GNUC__ > 2 || \
- (__GNUC__ == 2 && __GNUC_MINOR__ >= 5))
-#define __LA_DEAD __attribute__((__noreturn__))
-#else
-#define __LA_DEAD
+ (__GNUC__ == 2 && __GNUC_MINOR__ >= 5))
+#define __LA_NORETURN __attribute__((__noreturn__))
+#elif defined(_MSC_VER)
+#define __LA_NORETURN __declspec(noreturn)
+#else
+#define __LA_NORETURN
#endif
#endif /* !BSDTAR_PLATFORM_H_INCLUDED */
diff --git a/contrib/libarchive/tar/cmdline.c b/contrib/libarchive/tar/cmdline.c
index b80937ffcb6e..2a89f42b0880 100644
--- a/contrib/libarchive/tar/cmdline.c
+++ b/contrib/libarchive/tar/cmdline.c
@@ -28,7 +28,6 @@
*/
#include "bsdtar_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -94,6 +93,7 @@ static const struct bsdtar_option {
{ "format", 1, OPTION_FORMAT },
{ "gid", 1, OPTION_GID },
{ "gname", 1, OPTION_GNAME },
+ { "group", 1, OPTION_GROUP },
{ "grzip", 0, OPTION_GRZIP },
{ "gunzip", 0, 'z' },
{ "gzip", 0, 'z' },
@@ -122,6 +122,7 @@ static const struct bsdtar_option {
{ "no-acls", 0, OPTION_NO_ACLS },
{ "no-fflags", 0, OPTION_NO_FFLAGS },
{ "no-mac-metadata", 0, OPTION_NO_MAC_METADATA },
+ { "no-read-sparse", 0, OPTION_NO_READ_SPARSE },
{ "no-recursion", 0, 'n' },
{ "no-safe-writes", 0, OPTION_NO_SAFE_WRITES },
{ "no-same-owner", 0, OPTION_NO_SAME_OWNER },
@@ -141,10 +142,12 @@ static const struct bsdtar_option {
{ "older-than", 1, OPTION_OLDER_CTIME_THAN },
{ "one-file-system", 0, OPTION_ONE_FILE_SYSTEM },
{ "options", 1, OPTION_OPTIONS },
+ { "owner", 1, OPTION_OWNER },
{ "passphrase", 1, OPTION_PASSPHRASE },
{ "posix", 0, OPTION_POSIX },
{ "preserve-permissions", 0, 'p' },
{ "read-full-blocks", 0, 'B' },
+ { "read-sparse", 0, OPTION_READ_SPARSE },
{ "safe-writes", 0, OPTION_SAFE_WRITES },
{ "same-owner", 0, OPTION_SAME_OWNER },
{ "same-permissions", 0, 'p' },
@@ -215,12 +218,18 @@ bsdtar_getopt(struct bsdtar *bsdtar)
enum { state_start = 0, state_old_tar, state_next_word,
state_short, state_long };
- const struct bsdtar_option *popt, *match = NULL, *match2 = NULL;
- const char *p, *long_prefix = "--";
+ const struct bsdtar_option *popt, *match, *match2;
+ const char *p, *long_prefix;
size_t optlength;
- int opt = '?';
- int required = 0;
+ int opt;
+ int required;
+again:
+ match = NULL;
+ match2 = NULL;
+ long_prefix = "--";
+ opt = '?';
+ required = 0;
bsdtar->argument = NULL;
/* First time through, initialize everything. */
@@ -307,7 +316,7 @@ bsdtar_getopt(struct bsdtar *bsdtar)
if (opt == '\0') {
/* End of this group; recurse to get next option. */
bsdtar->getopt_state = state_next_word;
- return bsdtar_getopt(bsdtar);
+ goto again;
}
/* Does this option take an argument? */
diff --git a/contrib/libarchive/tar/creation_set.c b/contrib/libarchive/tar/creation_set.c
index bdc607daeb20..5cd1232b764c 100644
--- a/contrib/libarchive/tar/creation_set.c
+++ b/contrib/libarchive/tar/creation_set.c
@@ -24,7 +24,6 @@
*/
#include "bsdtar_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
@@ -95,7 +94,7 @@ get_format_code(const char *suffix)
{ ".7z", "7zip" },
{ ".ar", "arbsd" },
{ ".cpio", "cpio" },
- { ".iso", "iso9960" },
+ { ".iso", "iso9660" },
{ ".mtree", "mtree" },
{ ".shar", "shar" },
{ ".tar", "paxr" },
diff --git a/contrib/libarchive/tar/read.c b/contrib/libarchive/tar/read.c
index bf7d55b81cb9..a7f14a07bb35 100644
--- a/contrib/libarchive/tar/read.c
+++ b/contrib/libarchive/tar/read.c
@@ -24,7 +24,6 @@
*/
#include "bsdtar_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -371,10 +370,10 @@ read_archive(struct bsdtar *bsdtar, char mode, struct archive *writer)
r = archive_read_extract2(a, entry, writer);
if (r != ARCHIVE_OK) {
if (!bsdtar->verbose)
- safe_fprintf(stderr, "%s",
- archive_entry_pathname(entry));
- safe_fprintf(stderr, ": %s",
- archive_error_string(a));
+ safe_fprintf(stderr, "%s", archive_entry_pathname(entry));
+ safe_fprintf(stderr, ": %s: %s",
+ archive_error_string(a),
+ strerror(archive_errno(a)));
if (!bsdtar->verbose)
fprintf(stderr, "\n");
bsdtar->return_value = 1;
diff --git a/contrib/libarchive/tar/subst.c b/contrib/libarchive/tar/subst.c
index 48370b2fceeb..9747abb906c4 100644
--- a/contrib/libarchive/tar/subst.c
+++ b/contrib/libarchive/tar/subst.c
@@ -24,14 +24,15 @@
*/
#include "bsdtar_platform.h"
-__FBSDID("$FreeBSD$");
-#if defined(HAVE_REGEX_H) || defined(HAVE_PCREPOSIX_H)
+#if defined(HAVE_REGEX_H) || defined(HAVE_PCREPOSIX_H) || defined(HAVE_PCRE2POSIX_H)
#include "bsdtar.h"
#include <errno.h>
-#ifdef HAVE_PCREPOSIX_H
+#if defined(HAVE_PCREPOSIX_H)
#include <pcreposix.h>
+#elif defined(HAVE_PCRE2POSIX_H)
+#include <pcre2posix.h>
#else
#include <regex.h>
#endif
@@ -48,7 +49,7 @@ struct subst_rule {
struct subst_rule *next;
regex_t re;
char *result;
- unsigned int global:1, print:1, regular:1, symlink:1, hardlink:1;
+ unsigned int global:1, print:1, regular:1, symlink:1, hardlink:1, from_begin:1;
};
struct substitution {
@@ -128,9 +129,14 @@ add_substitution(struct bsdtar *bsdtar, const char *rule_text)
rule->regular = 1; /* Rewrite regular filenames. */
rule->symlink = 1; /* Rewrite symlink targets. */
rule->hardlink = 1; /* Rewrite hardlink targets. */
+ rule->from_begin = 0; /* Don't match from start. */
while (*++end_pattern) {
switch (*end_pattern) {
+ case 'b':
+ case 'B':
+ rule->from_begin = 1;
+ break;
case 'g':
case 'G':
rule->global = 1;
@@ -159,6 +165,7 @@ add_substitution(struct bsdtar *bsdtar, const char *rule_text)
break;
default:
lafe_errc(1, 0, "Invalid replacement flag %c", *end_pattern);
+ /* NOTREACHED */
}
}
}
@@ -212,6 +219,7 @@ apply_substitution(struct bsdtar *bsdtar, const char *name, char **result,
{
const char *path = name;
regmatch_t matches[10];
+ char* buffer = NULL;
size_t i, j;
struct subst_rule *rule;
struct substitution *subst;
@@ -237,6 +245,13 @@ apply_substitution(struct bsdtar *bsdtar, const char *name, char **result,
continue;
}
+ if (rule->from_begin && *result) {
+ realloc_strcat(result, name);
+ realloc_strcat(&buffer, *result);
+ name = buffer;
+ (*result)[0] = 0;
+ }
+
while (1) {
if (regexec(&rule->re, name, 10, matches, 0))
break;
@@ -276,6 +291,7 @@ apply_substitution(struct bsdtar *bsdtar, const char *name, char **result,
case '9':
realloc_strncat(result, rule->result + j, i - j - 1);
if ((size_t)(c - '0') > (size_t)(rule->re.re_nsub)) {
+ free(buffer);
free(*result);
*result = NULL;
return -1;
@@ -302,6 +318,8 @@ apply_substitution(struct bsdtar *bsdtar, const char *name, char **result,
if (got_match)
realloc_strcat(result, name);
+ free(buffer);
+
if (print_match)
fprintf(stderr, "%s >> %s\n", path, *result);
@@ -320,8 +338,9 @@ cleanup_substitution(struct bsdtar *bsdtar)
while ((rule = subst->first_rule) != NULL) {
subst->first_rule = rule->next;
free(rule->result);
+ regfree(&rule->re);
free(rule);
}
free(subst);
}
-#endif /* defined(HAVE_REGEX_H) || defined(HAVE_PCREPOSIX_H) */
+#endif /* defined(HAVE_REGEX_H) || defined(HAVE_PCREPOSIX_H) || defined(HAVE_PCRE2POSIX_H) */
diff --git a/contrib/libarchive/tar/test/test.h b/contrib/libarchive/tar/test/test.h
index 1e1bee80709c..549357b4e0fd 100644
--- a/contrib/libarchive/tar/test/test.h
+++ b/contrib/libarchive/tar/test/test.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
/* 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 30d8d9318a82..7a3c2e46858f 100644
--- a/contrib/libarchive/tar/test/test_0.c
+++ b/contrib/libarchive/tar/test/test_0.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* This first test does basic sanity checks on the environment. For
diff --git a/contrib/libarchive/tar/test/test_basic.c b/contrib/libarchive/tar/test/test_basic.c
index 16c0eafcb394..a59236c92b55 100644
--- a/contrib/libarchive/tar/test/test_basic.c
+++ b/contrib/libarchive/tar/test/test_basic.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static const char *
make_files(void)
diff --git a/contrib/libarchive/tar/test/test_copy.c b/contrib/libarchive/tar/test/test_copy.c
index 5d0c68718736..fd47a6d877e6 100644
--- a/contrib/libarchive/tar/test/test_copy.c
+++ b/contrib/libarchive/tar/test/test_copy.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#if defined(__CYGWIN__)
# include <limits.h>
@@ -160,21 +159,21 @@ create_tree(void)
failure("Internal sanity check failed: i = %d", i);
assert(filenames[i] != NULL);
- sprintf(buff, "f/%s", filenames[i]);
+ snprintf(buff, sizeof(buff), "f/%s", filenames[i]);
assertMakeFile(buff, 0777, buff);
/* Create a link named "l/abcdef..." to the above. */
- sprintf(buff2, "l/%s", filenames[i]);
+ snprintf(buff2, sizeof(buff2), "l/%s", filenames[i]);
assertMakeHardlink(buff2, buff);
/* Create a link named "m/abcdef..." to the above. */
- sprintf(buff2, "m/%s", filenames[i]);
+ snprintf(buff2, sizeof(buff2), "m/%s", filenames[i]);
assertMakeHardlink(buff2, buff);
if (canSymlink()) {
/* Create a symlink named "s/abcdef..." to the above. */
- sprintf(buff, "s/%s", filenames[i]);
- sprintf(buff2, "../f/%s", filenames[i]);
+ snprintf(buff, sizeof(buff), "s/%s", filenames[i]);
+ snprintf(buff2, sizeof(buff2), "../f/%s", filenames[i]);
failure("buff=\"%s\" buff2=\"%s\"", buff, buff2);
assertMakeSymlink(buff, buff2, 0);
}
@@ -202,13 +201,13 @@ verify_tree(size_t limit)
/* Generate the names we know should be there and verify them. */
for (i = 1; i < LOOP_MAX; i++) {
/* Verify a file named "f/abcdef..." */
- sprintf(name1, "f/%s", filenames[i]);
+ snprintf(name1, sizeof(name1), "f/%s", filenames[i]);
if (i <= limit) {
assertFileExists(name1);
assertFileContents(name1, (int)strlen(name1), name1);
}
- sprintf(name2, "l/%s", filenames[i]);
+ snprintf(name2, sizeof(name2), "l/%s", filenames[i]);
if (i + 2 <= limit) {
/* Verify hardlink "l/abcdef..." */
assertIsHardlink(name1, name2);
@@ -219,14 +218,14 @@ verify_tree(size_t limit)
if (canSymlink()) {
/* Verify symlink "s/abcdef..." */
- sprintf(name1, "s/%s", filenames[i]);
- sprintf(name2, "../f/%s", filenames[i]);
+ snprintf(name1, sizeof(name1), "s/%s", filenames[i]);
+ snprintf(name2, sizeof(name2), "../f/%s", filenames[i]);
if (strlen(name2) <= limit)
assertIsSymlink(name1, name2, 0);
}
/* Verify dir "d/abcdef...". */
- sprintf(name1, "d/%s", filenames[i]);
+ snprintf(name1, sizeof(name1), "d/%s", filenames[i]);
if (i + 1 <= limit) { /* +1 for trailing slash */
if (assertIsDir(name1, -1)) {
/* TODO: opendir/readdir this
diff --git a/contrib/libarchive/tar/test/test_empty_mtree.c b/contrib/libarchive/tar/test/test_empty_mtree.c
index 6f8a5e91aa1a..11cdfb56690a 100644
--- a/contrib/libarchive/tar/test/test_empty_mtree.c
+++ b/contrib/libarchive/tar/test/test_empty_mtree.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Regression test: We used to get a bogus error message when we
diff --git a/contrib/libarchive/tar/test/test_extract_tar_Z.c b/contrib/libarchive/tar/test/test_extract_tar_Z.c
index 7c994b472a79..b03aca6d1da5 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_Z.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_Z.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_tar_Z)
{
diff --git a/contrib/libarchive/tar/test/test_extract_tar_bz2.c b/contrib/libarchive/tar/test/test_extract_tar_bz2.c
index b734dd28ba74..02b3ee326d5b 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_bz2.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_bz2.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_tar_bz2)
{
diff --git a/contrib/libarchive/tar/test/test_extract_tar_grz.c b/contrib/libarchive/tar/test/test_extract_tar_grz.c
index 9c0615e981f2..f0adf994dec6 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_grz.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_grz.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_tar_grz)
{
diff --git a/contrib/libarchive/tar/test/test_extract_tar_gz.c b/contrib/libarchive/tar/test/test_extract_tar_gz.c
index 2fdb4ba7cdff..b17d66f01529 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_gz.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_gz.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_tar_gz)
{
diff --git a/contrib/libarchive/tar/test/test_extract_tar_lrz.c b/contrib/libarchive/tar/test/test_extract_tar_lrz.c
index 56a0fb88231e..d6049809bb22 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_lrz.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_lrz.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_tar_lrz)
{
diff --git a/contrib/libarchive/tar/test/test_extract_tar_lz.c b/contrib/libarchive/tar/test/test_extract_tar_lz.c
index 5ec7e9a48f2f..3889138928d1 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_lz.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_lz.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_tar_lz)
{
diff --git a/contrib/libarchive/tar/test/test_extract_tar_lz4.c b/contrib/libarchive/tar/test/test_extract_tar_lz4.c
index 150d57d71551..f0e03ed3206e 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_lz4.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_lz4.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_tar_lz4)
{
diff --git a/contrib/libarchive/tar/test/test_extract_tar_lzma.c b/contrib/libarchive/tar/test/test_extract_tar_lzma.c
index 2fa2af049446..fd9f547fb524 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_lzma.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_lzma.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_tar_lzma)
{
diff --git a/contrib/libarchive/tar/test/test_extract_tar_lzo.c b/contrib/libarchive/tar/test/test_extract_tar_lzo.c
index 17b4295edf63..9c05e15a6b04 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_lzo.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_lzo.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_tar_lzo)
{
diff --git a/contrib/libarchive/tar/test/test_extract_tar_xz.c b/contrib/libarchive/tar/test/test_extract_tar_xz.c
index 860bab75acf7..8684072d76f5 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_xz.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_xz.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_tar_xz)
{
diff --git a/contrib/libarchive/tar/test/test_extract_tar_zstd.c b/contrib/libarchive/tar/test/test_extract_tar_zstd.c
index d67170ce3433..1eced8817387 100644
--- a/contrib/libarchive/tar/test/test_extract_tar_zstd.c
+++ b/contrib/libarchive/tar/test/test_extract_tar_zstd.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_extract_tar_zstd)
{
diff --git a/contrib/libarchive/tar/test/test_format_newc.c b/contrib/libarchive/tar/test/test_format_newc.c
index 808fa4b49180..5357cc7cdae4 100644
--- a/contrib/libarchive/tar/test/test_format_newc.c
+++ b/contrib/libarchive/tar/test/test_format_newc.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_format_newc)
{
diff --git a/contrib/libarchive/tar/test/test_help.c b/contrib/libarchive/tar/test/test_help.c
index 0e7d1c97ea62..fd97a217b789 100644
--- a/contrib/libarchive/tar/test/test_help.c
+++ b/contrib/libarchive/tar/test/test_help.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Test that "--help", "-h", and "-W help" options all work and
diff --git a/contrib/libarchive/tar/test/test_leading_slash.c b/contrib/libarchive/tar/test/test_leading_slash.c
index 572c45e3cbb7..ca64ad154055 100644
--- a/contrib/libarchive/tar/test/test_leading_slash.c
+++ b/contrib/libarchive/tar/test/test_leading_slash.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_leading_slash)
{
diff --git a/contrib/libarchive/tar/test/test_missing_file.c b/contrib/libarchive/tar/test/test_missing_file.c
index 808e384e10b0..1cc40f3745e8 100644
--- a/contrib/libarchive/tar/test/test_missing_file.c
+++ b/contrib/libarchive/tar/test/test_missing_file.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_missing_file)
{
diff --git a/contrib/libarchive/tar/test/test_option_C_mtree.c b/contrib/libarchive/tar/test/test_option_C_mtree.c
index ccadc389974c..25679644af61 100644
--- a/contrib/libarchive/tar/test/test_option_C_mtree.c
+++ b/contrib/libarchive/tar/test/test_option_C_mtree.c
@@ -26,7 +26,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_C_mtree)
{
diff --git a/contrib/libarchive/tar/test/test_option_C_upper.c b/contrib/libarchive/tar/test/test_option_C_upper.c
index 538890f58178..cadc924e1d47 100644
--- a/contrib/libarchive/tar/test/test_option_C_upper.c
+++ b/contrib/libarchive/tar/test/test_option_C_upper.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_C_upper)
{
diff --git a/contrib/libarchive/tar/test/test_option_H_upper.c b/contrib/libarchive/tar/test/test_option_H_upper.c
index 2c2ad33ce75b..097a9729d26f 100644
--- a/contrib/libarchive/tar/test/test_option_H_upper.c
+++ b/contrib/libarchive/tar/test/test_option_H_upper.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_H_upper)
{
diff --git a/contrib/libarchive/tar/test/test_option_L_upper.c b/contrib/libarchive/tar/test/test_option_L_upper.c
index 5697b0f293c2..fd1ed0a52c76 100644
--- a/contrib/libarchive/tar/test/test_option_L_upper.c
+++ b/contrib/libarchive/tar/test/test_option_L_upper.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_L_upper)
{
diff --git a/contrib/libarchive/tar/test/test_option_O_upper.c b/contrib/libarchive/tar/test/test_option_O_upper.c
index b9c8c0cad109..a5540dbe8417 100644
--- a/contrib/libarchive/tar/test/test_option_O_upper.c
+++ b/contrib/libarchive/tar/test/test_option_O_upper.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static const char *test4out[] = {"file1", "file2", NULL};
static const char *test5err[] = {"file1", "file2", NULL};
diff --git a/contrib/libarchive/tar/test/test_option_T_upper.c b/contrib/libarchive/tar/test/test_option_T_upper.c
index bc54bd26d0ce..c64767fcfb84 100644
--- a/contrib/libarchive/tar/test/test_option_T_upper.c
+++ b/contrib/libarchive/tar/test/test_option_T_upper.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
static int
tryMakeFile(const char *fn)
diff --git a/contrib/libarchive/tar/test/test_option_U_upper.c b/contrib/libarchive/tar/test/test_option_U_upper.c
index d864e13c4f6b..4518a5f9fd8e 100644
--- a/contrib/libarchive/tar/test/test_option_U_upper.c
+++ b/contrib/libarchive/tar/test/test_option_U_upper.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_U_upper)
{
diff --git a/contrib/libarchive/tar/test/test_option_X_upper.c b/contrib/libarchive/tar/test/test_option_X_upper.c
index 4916af2970e8..b5ea98b9a0d7 100644
--- a/contrib/libarchive/tar/test/test_option_X_upper.c
+++ b/contrib/libarchive/tar/test/test_option_X_upper.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_X_upper)
{
diff --git a/contrib/libarchive/tar/test/test_option_a.c b/contrib/libarchive/tar/test/test_option_a.c
index d9eed8777ff2..52797411c751 100644
--- a/contrib/libarchive/tar/test/test_option_a.c
+++ b/contrib/libarchive/tar/test/test_option_a.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_a)
{
diff --git a/contrib/libarchive/tar/test/test_option_acls.c b/contrib/libarchive/tar/test/test_option_acls.c
index f7451c8eb36b..333ac2e4fb47 100644
--- a/contrib/libarchive/tar/test/test_option_acls.c
+++ b/contrib/libarchive/tar/test/test_option_acls.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#if ARCHIVE_ACL_FREEBSD || ARCHIVE_ACL_DARWIN || ARCHIVE_ACL_LIBACL
static const acl_perm_t acl_perms[] = {
diff --git a/contrib/libarchive/tar/test/test_option_b.c b/contrib/libarchive/tar/test/test_option_b.c
index 0eee80d86f49..d7e0f399c297 100644
--- a/contrib/libarchive/tar/test/test_option_b.c
+++ b/contrib/libarchive/tar/test/test_option_b.c
@@ -23,22 +23,23 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#define USTAR_OPT " --format=ustar"
DEFINE_TEST(test_option_b)
{
char *testprog_ustar;
+ size_t testprog_ustar_len;
assertMakeFile("file1", 0644, "file1");
if (systemf("cat file1 > test_cat.out 2> test_cat.err") != 0) {
skipping("This test requires a `cat` program");
return;
}
- testprog_ustar = malloc(strlen(testprog) + sizeof(USTAR_OPT) + 1);
- strcpy(testprog_ustar, testprog);
- strcat(testprog_ustar, USTAR_OPT);
+ testprog_ustar_len = strlen(testprog) + sizeof(USTAR_OPT) + 1;
+ testprog_ustar = malloc(testprog_ustar_len);
+ strncpy(testprog_ustar, testprog, testprog_ustar_len);
+ strncat(testprog_ustar, USTAR_OPT, testprog_ustar_len);
/*
* Bsdtar does not pad if the output is going directly to a disk file.
diff --git a/contrib/libarchive/tar/test/test_option_b64encode.c b/contrib/libarchive/tar/test/test_option_b64encode.c
index 1d0420430e09..b9a2b809ea4a 100644
--- a/contrib/libarchive/tar/test/test_option_b64encode.c
+++ b/contrib/libarchive/tar/test/test_option_b64encode.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_b64encode)
{
diff --git a/contrib/libarchive/tar/test/test_option_exclude.c b/contrib/libarchive/tar/test/test_option_exclude.c
index 1345f70aa160..b21ec624aec2 100644
--- a/contrib/libarchive/tar/test/test_option_exclude.c
+++ b/contrib/libarchive/tar/test/test_option_exclude.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_exclude)
{
diff --git a/contrib/libarchive/tar/test/test_option_exclude_vcs.c b/contrib/libarchive/tar/test/test_option_exclude_vcs.c
index 202151139996..ec4dc5594f5c 100644
--- a/contrib/libarchive/tar/test/test_option_exclude_vcs.c
+++ b/contrib/libarchive/tar/test/test_option_exclude_vcs.c
@@ -23,10 +23,10 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_exclude_vcs)
{
+ assertUmask(0);
assertMakeDir("in", 0755);
assertChdir("in");
assertMakeFile("file", 0644, "");
diff --git a/contrib/libarchive/tar/test/test_option_fflags.c b/contrib/libarchive/tar/test/test_option_fflags.c
index f223feb19069..045c780edefc 100644
--- a/contrib/libarchive/tar/test/test_option_fflags.c
+++ b/contrib/libarchive/tar/test/test_option_fflags.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__BORLANDC__)
#define chmod _chmod
diff --git a/contrib/libarchive/tar/test/test_option_gid_gname.c b/contrib/libarchive/tar/test/test_option_gid_gname.c
index 4e5f51c8f486..a4cff1ab2f64 100644
--- a/contrib/libarchive/tar/test/test_option_gid_gname.c
+++ b/contrib/libarchive/tar/test/test_option_gid_gname.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_gid_gname)
{
diff --git a/contrib/libarchive/tar/test/test_option_group.c b/contrib/libarchive/tar/test/test_option_group.c
new file mode 100644
index 000000000000..d429ddab9f9f
--- /dev/null
+++ b/contrib/libarchive/tar/test/test_option_group.c
@@ -0,0 +1,84 @@
+/*-
+ * 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"
+
+DEFINE_TEST(test_option_group)
+{
+ char *reference, *data;
+ size_t s;
+
+ assertUmask(0);
+ assertMakeFile("file", 0644, "1234567890");
+
+ /* Create archive with no special options. */
+ failure("Error invoking %s c", testprog);
+ assertEqualInt(0,
+ systemf("%s cf archive1 --format=ustar file >stdout1.txt 2>stderr1.txt",
+ testprog));
+ assertEmptyFile("stdout1.txt");
+ assertEmptyFile("stderr1.txt");
+ reference = slurpfile(&s, "archive1");
+
+ /* Create archive with --group (numeric) */
+ failure("Error invoking %s c", testprog);
+ assertEqualInt(0,
+ systemf("%s cf archive2 --group=17 --format=ustar file >stdout2.txt 2>stderr2.txt",
+ testprog));
+ assertEmptyFile("stdout2.txt");
+ assertEmptyFile("stderr2.txt");
+ data = slurpfile(&s, "archive2");
+ assertEqualMem(data + 116, "000021 \0", 8);
+ /* Gname field in ustar header should be empty. */
+ assertEqualMem(data + 297, "\0", 1);
+ free(data);
+
+ /* Again with --group (name) */
+ failure("Error invoking %s c", testprog);
+ assertEqualInt(0,
+ systemf("%s cf archive3 --group=foofoofoo --format=ustar file >stdout3.txt 2>stderr3.txt",
+ testprog));
+ assertEmptyFile("stdout3.txt");
+ assertEmptyFile("stderr3.txt");
+ data = slurpfile(&s, "archive3");
+ /* Gid should be unchanged from original reference. */
+ assertEqualMem(data + 116, reference + 116, 8);
+ assertEqualMem(data + 297, "foofoofoo\0", 10);
+ free(data);
+
+ /* Again with --group (name:id) */
+ failure("Error invoking %s c", testprog);
+ assertEqualInt(0,
+ systemf("%s cf archive4 --group=foofoofoo:17 --format=ustar file >stdout4.txt 2>stderr4.txt",
+ testprog));
+ assertEmptyFile("stdout4.txt");
+ assertEmptyFile("stderr4.txt");
+ data = slurpfile(&s, "archive4");
+ assertEqualMem(data + 116, "000021 \0", 8);
+ assertEqualMem(data + 297, "foofoofoo\0", 10);
+ free(data);
+
+ free(reference);
+}
diff --git a/contrib/libarchive/tar/test/test_option_grzip.c b/contrib/libarchive/tar/test/test_option_grzip.c
index fbff252421d1..d898e4408151 100644
--- a/contrib/libarchive/tar/test/test_option_grzip.c
+++ b/contrib/libarchive/tar/test/test_option_grzip.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_grzip)
{
diff --git a/contrib/libarchive/tar/test/test_option_ignore_zeros.c b/contrib/libarchive/tar/test/test_option_ignore_zeros.c
new file mode 100644
index 000000000000..985ad3082fce
--- /dev/null
+++ b/contrib/libarchive/tar/test/test_option_ignore_zeros.c
@@ -0,0 +1,146 @@
+/*-
+ * 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"
+
+static int
+make_files(void)
+{
+ int ret;
+
+ assertMakeDir("in", 0755);
+ assertMakeDir("out", 0755);
+ assertMakeFile("in/a", 0644, "a");
+ assertMakeFile("in/b", 0644, "b");
+ assertMakeFile("in/c", 0644, "c");
+ assertEqualInt(0, systemf("%s cf a.tar -C in a", testprog));
+ assertEqualInt(0, systemf("%s cf b.tar -C in b", testprog));
+ /* An archive formed with cat, and readable with --ignore-zeros. */
+ ret = systemf("cat a.tar b.tar > ab-cat.tar");
+ if (ret != 0) {
+ skipping("This test requires a `cat` program");
+ return (ret);
+ }
+
+ return (0);
+}
+
+DEFINE_TEST(test_option_ignore_zeros_mode_t)
+{
+ if (make_files())
+ return;
+
+ /* Generate expected t-mode output. */
+ assertEqualInt(0, systemf(
+ "%s cf ab-norm.tar -C in a b > norm-c.out 2> norm-c.err",
+ testprog));
+ assertEmptyFile("norm-c.err");
+ assertEmptyFile("norm-c.out");
+ assertEqualInt(0, systemf(
+ "%s tf ab-norm.tar > norm-t.out 2> norm-t.err",
+ testprog));
+ assertEmptyFile("norm-t.err");
+
+ /* Test output. */
+ assertEqualInt(0, systemf(
+ "%s tf ab-cat.tar --ignore-zeros > test.out 2> test.err",
+ testprog));
+ assertEmptyFile("test.err");
+
+ assertEqualFile("test.out", "norm-t.out");
+}
+
+DEFINE_TEST(test_option_ignore_zeros_mode_x)
+{
+ if (make_files())
+ return;
+
+ assertEqualInt(0, systemf(
+ "%s xf ab-cat.tar --ignore-zeros -C out > test.out 2> test.err",
+ testprog));
+ assertEmptyFile("test.err");
+ assertEmptyFile("test.out");
+
+ assertEqualFile("out/a", "in/a");
+ assertEqualFile("out/b", "in/b");
+}
+
+DEFINE_TEST(test_option_ignore_zeros_mode_c)
+{
+ if (make_files())
+ return;
+
+ assertEqualInt(0, systemf(
+ "%s cf abc.tar --ignore-zeros @ab-cat.tar -C in c "
+ "> test-c.out 2> test-c.err",
+ testprog));
+ assertEmptyFile("test-c.err");
+ assertEmptyFile("test-c.out");
+
+ assertEqualInt(0, systemf(
+ "%s xf abc.tar -C out > test-x.out 2> test-x.err",
+ testprog));
+ assertEmptyFile("test-x.err");
+ assertEmptyFile("test-x.out");
+
+ assertEqualFile("out/a", "in/a");
+ assertEqualFile("out/b", "in/b");
+ assertEqualFile("out/c", "in/c");
+}
+
+static void
+test_option_ignore_zeros_mode_ru(const char *mode)
+{
+ if (make_files())
+ return;
+
+ assertEqualInt(0, systemf(
+ "%s %sf ab-cat.tar --ignore-zeros -C in c "
+ "> test-ru.out 2> test-ru.err",
+ testprog, mode));
+ assertEmptyFile("test-ru.err");
+ assertEmptyFile("test-ru.out");
+
+ assertEqualInt(0, systemf(
+ "%s xf ab-cat.tar --ignore-zeros -C out "
+ "> test-x.out 2> test-x.err",
+ testprog));
+ assertEmptyFile("test-x.err");
+ assertEmptyFile("test-x.out");
+
+ assertEqualFile("out/a", "in/a");
+ assertEqualFile("out/b", "in/b");
+ assertEqualFile("out/c", "in/c");
+}
+
+DEFINE_TEST(test_option_ignore_zeros_mode_r)
+{
+ test_option_ignore_zeros_mode_ru("r");
+}
+
+DEFINE_TEST(test_option_ignore_zeros_mode_u)
+{
+ test_option_ignore_zeros_mode_ru("u");
+}
diff --git a/contrib/libarchive/tar/test/test_option_j.c b/contrib/libarchive/tar/test/test_option_j.c
index 838234a2aeb5..cf4d91d0afac 100644
--- a/contrib/libarchive/tar/test/test_option_j.c
+++ b/contrib/libarchive/tar/test/test_option_j.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_j)
{
diff --git a/contrib/libarchive/tar/test/test_option_k.c b/contrib/libarchive/tar/test/test_option_k.c
index e57cc274cfc4..873a1209b0a9 100644
--- a/contrib/libarchive/tar/test/test_option_k.c
+++ b/contrib/libarchive/tar/test/test_option_k.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_k)
{
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 089898cc27e0..2572a98c5812 100644
--- a/contrib/libarchive/tar/test/test_option_keep_newer_files.c
+++ b/contrib/libarchive/tar/test/test_option_keep_newer_files.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_keep_newer_files)
{
diff --git a/contrib/libarchive/tar/test/test_option_lrzip.c b/contrib/libarchive/tar/test/test_option_lrzip.c
index 11e9827e0405..8bf4633f643e 100644
--- a/contrib/libarchive/tar/test/test_option_lrzip.c
+++ b/contrib/libarchive/tar/test/test_option_lrzip.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_lrzip)
{
diff --git a/contrib/libarchive/tar/test/test_option_lz4.c b/contrib/libarchive/tar/test/test_option_lz4.c
index 70fdaac3600f..1b766d04969f 100644
--- a/contrib/libarchive/tar/test/test_option_lz4.c
+++ b/contrib/libarchive/tar/test/test_option_lz4.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_lz4)
{
diff --git a/contrib/libarchive/tar/test/test_option_lzma.c b/contrib/libarchive/tar/test/test_option_lzma.c
index a618ff8a3403..1d8697b53ee8 100644
--- a/contrib/libarchive/tar/test/test_option_lzma.c
+++ b/contrib/libarchive/tar/test/test_option_lzma.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_lzma)
{
@@ -44,6 +43,7 @@ DEFINE_TEST(test_option_lzma)
if (strstr(p, "Unsupported compression") != NULL) {
skipping("This version of bsdtar was compiled "
"without lzma support");
+ free(p);
return;
}
failure("--lzma option is broken");
diff --git a/contrib/libarchive/tar/test/test_option_lzop.c b/contrib/libarchive/tar/test/test_option_lzop.c
index 20ef06c5c8a0..d96a14f08fea 100644
--- a/contrib/libarchive/tar/test/test_option_lzop.c
+++ b/contrib/libarchive/tar/test/test_option_lzop.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_lzop)
{
diff --git a/contrib/libarchive/tar/test/test_option_n.c b/contrib/libarchive/tar/test/test_option_n.c
index f36658ef1656..a6bda0599e16 100644
--- a/contrib/libarchive/tar/test/test_option_n.c
+++ b/contrib/libarchive/tar/test/test_option_n.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_WAIT_H
#include <sys/wait.h>
diff --git a/contrib/libarchive/tar/test/test_option_newer_than.c b/contrib/libarchive/tar/test/test_option_newer_than.c
index 2a5fe04e6968..a250a4c8d8c6 100644
--- a/contrib/libarchive/tar/test/test_option_newer_than.c
+++ b/contrib/libarchive/tar/test/test_option_newer_than.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_newer_than)
{
diff --git a/contrib/libarchive/tar/test/test_option_nodump.c b/contrib/libarchive/tar/test/test_option_nodump.c
index 815b08ed9251..6a5b66e3215a 100644
--- a/contrib/libarchive/tar/test/test_option_nodump.c
+++ b/contrib/libarchive/tar/test/test_option_nodump.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_nodump)
{
diff --git a/contrib/libarchive/tar/test/test_option_older_than.c b/contrib/libarchive/tar/test/test_option_older_than.c
index 4bdd2edfe0bd..d57c4d414b8f 100644
--- a/contrib/libarchive/tar/test/test_option_older_than.c
+++ b/contrib/libarchive/tar/test/test_option_older_than.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_older_than)
{
diff --git a/contrib/libarchive/tar/test/test_option_owner.c b/contrib/libarchive/tar/test/test_option_owner.c
new file mode 100644
index 000000000000..04c86cc0e8d4
--- /dev/null
+++ b/contrib/libarchive/tar/test/test_option_owner.c
@@ -0,0 +1,84 @@
+/*-
+ * 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"
+
+DEFINE_TEST(test_option_owner)
+{
+ char *reference, *data;
+ size_t s;
+
+ assertUmask(0);
+ assertMakeFile("file", 0644, "1234567890");
+
+ /* Create archive with no special options. */
+ failure("Error invoking %s c", testprog);
+ assertEqualInt(0,
+ systemf("%s cf archive1 --format=ustar file >stdout1.txt 2>stderr1.txt",
+ testprog));
+ assertEmptyFile("stdout1.txt");
+ assertEmptyFile("stderr1.txt");
+ reference = slurpfile(&s, "archive1");
+
+ /* Create archive with --owner (numeric) */
+ failure("Error invoking %s c", testprog);
+ assertEqualInt(0,
+ systemf("%s cf archive2 --owner=65123 --format=ustar file >stdout2.txt 2>stderr2.txt",
+ testprog));
+ assertEmptyFile("stdout2.txt");
+ assertEmptyFile("stderr2.txt");
+ data = slurpfile(&s, "archive2");
+ assertEqualMem(data + 108, "177143 \0", 8);
+ /* Uname field in ustar header should be empty. */
+ assertEqualMem(data + 265, "\0", 1);
+ free(data);
+
+ /* Again with just --owner (name) */
+ failure("Error invoking %s c", testprog);
+ assertEqualInt(0,
+ systemf("%s cf archive3 --owner=foofoofoo --format=ustar file >stdout3.txt 2>stderr3.txt",
+ testprog));
+ assertEmptyFile("stdout3.txt");
+ assertEmptyFile("stderr3.txt");
+ data = slurpfile(&s, "archive3");
+ /* Uid should be unchanged from original reference. */
+ assertEqualMem(data + 108, reference + 108, 8);
+ assertEqualMem(data + 265, "foofoofoo\0", 10);
+ free(data);
+
+ /* Again with just --owner (name:id) */
+ failure("Error invoking %s c", testprog);
+ assertEqualInt(0,
+ systemf("%s cf archive4 --owner=foofoofoo:65123 --format=ustar file >stdout4.txt 2>stderr4.txt",
+ testprog));
+ assertEmptyFile("stdout4.txt");
+ assertEmptyFile("stderr4.txt");
+ data = slurpfile(&s, "archive4");
+ assertEqualMem(data + 108, "177143 \0", 8);
+ assertEqualMem(data + 265, "foofoofoo\0", 10);
+ free(data);
+
+ free(reference);
+}
diff --git a/contrib/libarchive/tar/test/test_option_passphrase.c b/contrib/libarchive/tar/test/test_option_passphrase.c
index 337292c95bfc..74f3d3d5d031 100644
--- a/contrib/libarchive/tar/test/test_option_passphrase.c
+++ b/contrib/libarchive/tar/test/test_option_passphrase.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_passphrase)
{
diff --git a/contrib/libarchive/tar/test/test_option_q.c b/contrib/libarchive/tar/test/test_option_q.c
index d954f8927e6f..fd4b55e545ae 100644
--- a/contrib/libarchive/tar/test/test_option_q.c
+++ b/contrib/libarchive/tar/test/test_option_q.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_q)
{
diff --git a/contrib/libarchive/tar/test/test_option_r.c b/contrib/libarchive/tar/test/test_option_r.c
index 287e80939adf..655b973ad1e2 100644
--- a/contrib/libarchive/tar/test/test_option_r.c
+++ b/contrib/libarchive/tar/test/test_option_r.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* Also see test_option_q for additional validation of -r support.
diff --git a/contrib/libarchive/tar/test/test_option_s.c b/contrib/libarchive/tar/test/test_option_s.c
index ceed9fb1faf7..564793b97d5e 100644
--- a/contrib/libarchive/tar/test/test_option_s.c
+++ b/contrib/libarchive/tar/test/test_option_s.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_s)
{
@@ -89,6 +88,17 @@ DEFINE_TEST(test_option_s)
assertFileContents("bar", 3, "test4/in/d1/baz");
/*
+ * Test 4b: Multiple substitutions behavior with option b).
+ */
+ assertMakeDir("test4b", 0755);
+ systemf("%s -cf test4b.tar in/d1/foo in/d1/bar",
+ testprog);
+ systemf("%s -xf test4b.tar -s /oo/ar/ -s }ar}az}b -C test4b",
+ testprog);
+ assertFileContents("foo", 3, "test4b/in/d1/faz");
+ assertFileContents("bar", 3, "test4b/in/d1/baz");
+
+ /*
* Test 5: Name-switching substitutions when extracting archive.
*/
assertMakeDir("test5", 0755);
diff --git a/contrib/libarchive/tar/test/test_option_safe_writes.c b/contrib/libarchive/tar/test/test_option_safe_writes.c
index 7b42e8f62253..d1e36cfd4736 100644
--- a/contrib/libarchive/tar/test/test_option_safe_writes.c
+++ b/contrib/libarchive/tar/test/test_option_safe_writes.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_safe_writes)
{
diff --git a/contrib/libarchive/tar/test/test_option_uid_uname.c b/contrib/libarchive/tar/test/test_option_uid_uname.c
index 80c061961488..261e3b86565b 100644
--- a/contrib/libarchive/tar/test/test_option_uid_uname.c
+++ b/contrib/libarchive/tar/test/test_option_uid_uname.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_uid_uname)
{
diff --git a/contrib/libarchive/tar/test/test_option_uuencode.c b/contrib/libarchive/tar/test/test_option_uuencode.c
index a28a8e3407a3..4bb6e0898c2b 100644
--- a/contrib/libarchive/tar/test/test_option_uuencode.c
+++ b/contrib/libarchive/tar/test/test_option_uuencode.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_uuencode)
{
diff --git a/contrib/libarchive/tar/test/test_option_xattrs.c b/contrib/libarchive/tar/test/test_option_xattrs.c
index 79dfff528303..eef6c779bb52 100644
--- a/contrib/libarchive/tar/test/test_option_xattrs.c
+++ b/contrib/libarchive/tar/test/test_option_xattrs.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_xattrs)
{
diff --git a/contrib/libarchive/tar/test/test_option_xz.c b/contrib/libarchive/tar/test/test_option_xz.c
index 91da0730ac94..45163e735f19 100644
--- a/contrib/libarchive/tar/test/test_option_xz.c
+++ b/contrib/libarchive/tar/test/test_option_xz.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_xz)
{
diff --git a/contrib/libarchive/tar/test/test_option_z.c b/contrib/libarchive/tar/test/test_option_z.c
index 59744999fc5c..8e10e37ba22e 100644
--- a/contrib/libarchive/tar/test/test_option_z.c
+++ b/contrib/libarchive/tar/test/test_option_z.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_z)
{
diff --git a/contrib/libarchive/tar/test/test_option_zstd.c b/contrib/libarchive/tar/test/test_option_zstd.c
index 73965e33f3af..f9983670249c 100644
--- a/contrib/libarchive/tar/test/test_option_zstd.c
+++ b/contrib/libarchive/tar/test/test_option_zstd.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_option_zstd)
{
diff --git a/contrib/libarchive/tar/test/test_patterns.c b/contrib/libarchive/tar/test/test_patterns.c
index deffe322e1b4..64f8fffe90f9 100644
--- a/contrib/libarchive/tar/test/test_patterns.c
+++ b/contrib/libarchive/tar/test/test_patterns.c
@@ -24,7 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_patterns)
{
diff --git a/contrib/libarchive/tar/test/test_print_longpath.c b/contrib/libarchive/tar/test/test_print_longpath.c
index 4bac1679cc97..a21651fa15eb 100644
--- a/contrib/libarchive/tar/test/test_print_longpath.c
+++ b/contrib/libarchive/tar/test/test_print_longpath.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_print_longpath)
{
diff --git a/contrib/libarchive/tar/test/test_stdio.c b/contrib/libarchive/tar/test/test_stdio.c
index 7e53cb1b3fd5..d046727a2dd3 100644
--- a/contrib/libarchive/tar/test/test_stdio.c
+++ b/contrib/libarchive/tar/test/test_stdio.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_stdio)
{
diff --git a/contrib/libarchive/tar/test/test_strip_components.c b/contrib/libarchive/tar/test/test_strip_components.c
index ac19abf47e16..9bf79ab7cf20 100644
--- a/contrib/libarchive/tar/test/test_strip_components.c
+++ b/contrib/libarchive/tar/test/test_strip_components.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
DEFINE_TEST(test_strip_components)
{
diff --git a/contrib/libarchive/tar/test/test_symlink_dir.c b/contrib/libarchive/tar/test/test_symlink_dir.c
index df529d04a6e8..4c5666204388 100644
--- a/contrib/libarchive/tar/test/test_symlink_dir.c
+++ b/contrib/libarchive/tar/test/test_symlink_dir.c
@@ -23,7 +23,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD$");
/*
* tar -x -P should follow existing symlinks for dirs, but not other
diff --git a/contrib/libarchive/tar/util.c b/contrib/libarchive/tar/util.c
index 9d59e1a65b26..37c3a23231bd 100644
--- a/contrib/libarchive/tar/util.c
+++ b/contrib/libarchive/tar/util.c
@@ -24,7 +24,6 @@
*/
#include "bsdtar_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
@@ -63,7 +62,7 @@ __FBSDID("$FreeBSD$");
#include "err.h"
#include "passphrase.h"
-static size_t bsdtar_expand_char(char *, size_t, char);
+static size_t bsdtar_expand_char(char *, size_t, size_t, char);
static const char *strip_components(const char *path, int elements);
#if defined(_WIN32) && !defined(__CYGWIN__)
@@ -173,12 +172,12 @@ safe_fprintf(FILE *f, const char *fmt, ...)
/* Not printable, format the bytes. */
while (n-- > 0)
i += (unsigned)bsdtar_expand_char(
- outbuff, i, *p++);
+ outbuff, sizeof(outbuff), i, *p++);
}
} else {
/* After any conversion failure, don't bother
* trying to convert the rest. */
- i += (unsigned)bsdtar_expand_char(outbuff, i, *p++);
+ i += (unsigned)bsdtar_expand_char(outbuff, sizeof(outbuff), i, *p++);
try_wc = 0;
}
@@ -200,7 +199,7 @@ safe_fprintf(FILE *f, const char *fmt, ...)
* Render an arbitrary sequence of bytes into printable ASCII characters.
*/
static size_t
-bsdtar_expand_char(char *buff, size_t offset, char c)
+bsdtar_expand_char(char *buff, size_t buffsize, size_t offset, char c)
{
size_t i = offset;
@@ -221,7 +220,7 @@ bsdtar_expand_char(char *buff, size_t offset, char c)
case '\v': buff[i++] = 'v'; break;
case '\\': buff[i++] = '\\'; break;
default:
- sprintf(buff + i, "%03o", 0xFF & (int)c);
+ snprintf(buff + i, buffsize - i, "%03o", 0xFF & (int)c);
i += 3;
}
}
@@ -309,11 +308,12 @@ set_chdir(struct bsdtar *bsdtar, const char *newdir)
/* The -C /foo -C bar case; concatenate */
char *old_pending = bsdtar->pending_chdir;
size_t old_len = strlen(old_pending);
- bsdtar->pending_chdir = malloc(old_len + strlen(newdir) + 2);
+ size_t new_len = old_len + strlen(newdir) + 2;
+ bsdtar->pending_chdir = malloc(new_len);
if (old_pending[old_len - 1] == '/')
old_pending[old_len - 1] = '\0';
if (bsdtar->pending_chdir != NULL)
- sprintf(bsdtar->pending_chdir, "%s/%s",
+ snprintf(bsdtar->pending_chdir, new_len, "%s/%s",
old_pending, newdir);
free(old_pending);
}
@@ -470,7 +470,7 @@ edit_pathname(struct bsdtar *bsdtar, struct archive_entry *entry)
const char *original_name = name;
const char *hardlinkname = archive_entry_hardlink(entry);
const char *original_hardlinkname = hardlinkname;
-#if defined(HAVE_REGEX_H) || defined(HAVE_PCREPOSIX_H)
+#if defined(HAVE_REGEX_H) || defined(HAVE_PCREPOSIX_H) || defined(HAVE_PCRE2POSIX_H)
char *subst_name;
int r;
@@ -667,13 +667,9 @@ list_item_verbose(struct bsdtar *bsdtar, FILE *out, struct archive_entry *entry)
time_t tim;
static time_t now;
struct tm *ltime;
-#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S)
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
struct tm tmbuf;
#endif
-#if defined(HAVE__LOCALTIME64_S)
- errno_t terr;
- __time64_t tmptime;
-#endif
/*
* We avoid collecting the entire list in memory at once by
@@ -695,7 +691,7 @@ list_item_verbose(struct bsdtar *bsdtar, FILE *out, struct archive_entry *entry)
/* Use uname if it's present, else uid. */
p = archive_entry_uname(entry);
if ((p == NULL) || (*p == '\0')) {
- sprintf(tmp, "%lu ",
+ snprintf(tmp, sizeof(tmp), "%lu ",
(unsigned long)archive_entry_uid(entry));
p = tmp;
}
@@ -710,7 +706,7 @@ list_item_verbose(struct bsdtar *bsdtar, FILE *out, struct archive_entry *entry)
fprintf(out, "%s", p);
w = strlen(p);
} else {
- sprintf(tmp, "%lu",
+ snprintf(tmp, sizeof(tmp), "%lu",
(unsigned long)archive_entry_gid(entry));
w = strlen(tmp);
fprintf(out, "%s", tmp);
@@ -723,7 +719,7 @@ list_item_verbose(struct bsdtar *bsdtar, FILE *out, struct archive_entry *entry)
*/
if (archive_entry_filetype(entry) == AE_IFCHR
|| archive_entry_filetype(entry) == AE_IFBLK) {
- sprintf(tmp, "%lu,%lu",
+ snprintf(tmp, sizeof(tmp), "%lu,%lu",
(unsigned long)archive_entry_rdevmajor(entry),
(unsigned long)archive_entry_rdevminor(entry));
} else {
@@ -745,15 +741,10 @@ list_item_verbose(struct bsdtar *bsdtar, FILE *out, struct archive_entry *entry)
fmt = bsdtar->day_first ? DAY_FMT " %b %Y" : "%b " DAY_FMT " %Y";
else
fmt = bsdtar->day_first ? DAY_FMT " %b %H:%M" : "%b " DAY_FMT " %H:%M";
-#if defined(HAVE_LOCALTIME_R)
+#if defined(HAVE_LOCALTIME_S)
+ ltime = localtime_s(&tmbuf, &tim) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
ltime = localtime_r(&tim, &tmbuf);
-#elif defined(HAVE__LOCALTIME64_S)
- tmptime = tim;
- terr = _localtime64_s(&tmbuf, &tmptime);
- if (terr)
- ltime = NULL;
- else
- ltime = &tmbuf;
#else
ltime = localtime(&tim);
#endif
diff --git a/contrib/libarchive/tar/write.c b/contrib/libarchive/tar/write.c
index 6eaa85c9dbc0..5c7b13ae682f 100644
--- a/contrib/libarchive/tar/write.c
+++ b/contrib/libarchive/tar/write.c
@@ -25,7 +25,6 @@
*/
#include "bsdtar_platform.h"
-__FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -196,6 +195,10 @@ set_reader_options(struct bsdtar *bsdtar, struct archive *a)
else
archive_clear_error(a);
}
+ if (bsdtar->flags & OPTFLAG_IGNORE_ZEROS)
+ if (archive_read_set_options(a,
+ "read_concatenated_archives") != ARCHIVE_OK)
+ lafe_errc(1, 0, "%s", archive_error_string(a));
}
void
@@ -690,6 +693,8 @@ append_archive(struct bsdtar *bsdtar, struct archive *a, struct archive *ina)
while (ARCHIVE_OK == (e = archive_read_next_header(ina, &in_entry))) {
if (archive_match_excluded(bsdtar->matching, in_entry))
continue;
+ if(edit_pathname(bsdtar, in_entry))
+ continue;
if ((bsdtar->flags & OPTFLAG_INTERACTIVE) &&
!yes("copy '%s'", archive_entry_pathname(in_entry)))
continue;
diff --git a/contrib/libarchive/test_utils/test_common.h b/contrib/libarchive/test_utils/test_common.h
index 42119c06db8b..8e1ec82436f8 100644
--- a/contrib/libarchive/test_utils/test_common.h
+++ b/contrib/libarchive/test_utils/test_common.h
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef TEST_COMMON_H
@@ -134,16 +132,6 @@
#include <stdint.h>
#endif
-/* Get a real definition for __FBSDID if we can */
-#if HAVE_SYS_CDEFS_H
-#include <sys/cdefs.h>
-#endif
-
-/* If not, define it so as to avoid dangling semicolons. */
-#ifndef __FBSDID
-#define __FBSDID(a) struct _undefined_hack
-#endif
-
#ifndef O_BINARY
#define O_BINARY 0
#endif
@@ -178,6 +166,8 @@
/* Assert two integers are the same. Reports value of each one if not. */
#define assertEqualInt(v1,v2) \
assertion_equal_int(__FILE__, __LINE__, (v1), #v1, (v2), #v2, NULL)
+#define assertEqualAddress(v1,v2) \
+ assertion_equal_address(__FILE__, __LINE__, (v1), #v1, (v2), #v2, NULL)
/* Assert two strings are the same. Reports value of each one if not. */
#define assertEqualString(v1,v2) \
assertion_equal_string(__FILE__, __LINE__, (v1), #v1, (v2), #v2, NULL, 0)
@@ -291,6 +281,7 @@ int assertion_compare_fflags(const char *, int, const char *, const char *,
int assertion_empty_file(const char *, int, const char *);
int assertion_equal_file(const char *, int, const char *, const char *);
int assertion_equal_int(const char *, int, long long, const char *, long long, const char *, void *);
+int assertion_equal_address(const char *, int, const void *, const char *, const void *, const char *, void *);
int assertion_equal_mem(const char *, int, const void *, const char *, const void *, const char *, size_t, const char *, void *);
int assertion_memory_filled_with(const char *, int, const void *, const char *, size_t, const char *, char, const char *, void *);
int assertion_equal_string(const char *, int, const char *v1, const char *, const char *v2, const char *, void *, int);
@@ -471,4 +462,6 @@ void assertVersion(const char *prog, const char *base);
#include <dmalloc.h>
#endif
+#include "test_utils.h"
+
#endif /* TEST_COMMON_H */
diff --git a/contrib/libarchive/test_utils/test_main.c b/contrib/libarchive/test_utils/test_main.c
index c1c03cdafd70..6617732a335b 100644
--- a/contrib/libarchive/test_utils/test_main.c
+++ b/contrib/libarchive/test_utils/test_main.c
@@ -327,7 +327,7 @@ my_GetFileInformationByName(const char *path, BY_HANDLE_FILE_INFORMATION *bhfi)
int r;
memset(bhfi, 0, sizeof(*bhfi));
- h = CreateFile(path, FILE_READ_ATTRIBUTES, 0, NULL,
+ h = CreateFileA(path, FILE_READ_ATTRIBUTES, 0, NULL,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
if (h == INVALID_HANDLE_VALUE)
return (0);
@@ -426,7 +426,7 @@ failure(const char *fmt, ...)
nextmsg = NULL;
} else {
va_start(ap, fmt);
- vsprintf(msgbuff, fmt, ap);
+ vsnprintf(msgbuff, sizeof(msgbuff), fmt, ap);
va_end(ap);
nextmsg = msgbuff;
}
@@ -551,7 +551,7 @@ test_skipping(const char *fmt, ...)
va_list ap;
va_start(ap, fmt);
- vsprintf(buff, fmt, ap);
+ vsnprintf(buff, sizeof(buff), fmt, ap);
va_end(ap);
/* Use failure() message if set. */
msg = nextmsg;
@@ -625,6 +625,21 @@ assertion_equal_int(const char *file, int line,
return (0);
}
+/* Verify two pointers are equal. */
+int
+assertion_equal_address(const char *file, int line,
+ const void *v1, const char *e1, const void *v2, const char *e2, void *extra)
+{
+ assertion_count(file, line);
+ if (v1 == v2)
+ return (1);
+ failure_start(file, line, "%s != %s", e1, e2);
+ logprintf(" %s=0x%llx\n", e1, (unsigned long long)(uintptr_t)v1);
+ logprintf(" %s=0x%llx\n", e2, (unsigned long long)(uintptr_t)v2);
+ failure_finish(extra);
+ return (0);
+}
+
/*
* Utility to convert a single UTF-8 sequence.
*/
@@ -1245,7 +1260,7 @@ assertion_file_contains_lines_any_order(const char *file, int line,
c = *p;
}
if (actual_count) {
- actual = calloc(sizeof(char *), actual_count);
+ actual = calloc(actual_count, sizeof(char *));
if (actual == NULL) {
failure_start(pathname, line, "Can't allocate memory");
failure_finish(NULL);
@@ -1432,7 +1447,7 @@ assertion_file_time(const char *file, int line,
/* Note: FILE_FLAG_BACKUP_SEMANTICS applies to open
* a directory file. If not, CreateFile() will fail when
* the pathname is a directory. */
- h = CreateFile(pathname, FILE_READ_ATTRIBUTES, 0, NULL,
+ h = CreateFileA(pathname, FILE_READ_ATTRIBUTES, 0, NULL,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
if (h == INVALID_HANDLE_VALUE) {
failure_start(file, line, "Can't access %s\n", pathname);
@@ -1970,7 +1985,12 @@ assertion_make_file(const char *file, int line,
failure_finish(NULL);
return (0);
}
- if (0 != chmod(path, mode)) {
+#ifdef HAVE_FCHMOD
+ if (0 != fchmod(fd, mode))
+#else
+ if (0 != chmod(path, mode))
+#endif
+ {
failure_start(file, line, "Could not chmod %s", path);
failure_finish(NULL);
close(fd);
@@ -2340,7 +2360,7 @@ static void assert_version_id(char **qq, size_t *ss)
q += 3;
s -= 3;
}
-
+
/* Skip a single trailing a,b,c, or d. */
if (*q == 'a' || *q == 'b' || *q == 'c' || *q == 'd')
++q;
@@ -2386,7 +2406,7 @@ void assertVersion(const char *prog, const char *base)
/* Version message should start with name of program, then space. */
assert(s > prog_len + 1);
-
+
failure("Version must start with '%s': ``%s''", base, p);
if (!assertEqualMem(q, base, prog_len)) {
free(p);
@@ -2610,7 +2630,7 @@ canLzma(void)
static int tested = 0, value = 0;
if (!tested) {
tested = 1;
- if (systemf("lzma %s", redirectArgs) == 0)
+ if (systemf("lzma --help %s", redirectArgs) == 0)
value = 1;
}
return (value);
@@ -2724,7 +2744,7 @@ canNodump(void)
/* Get extended attribute value from a path */
void *
getXattr(const char *path, const char *name, size_t *sizep)
-{
+{
void *value = NULL;
#if ARCHIVE_XATTR_SUPPORT
ssize_t size;
@@ -3065,7 +3085,7 @@ systemf(const char *fmt, ...)
int r;
va_start(ap, fmt);
- vsprintf(buff, fmt, ap);
+ vsnprintf(buff, sizeof(buff), fmt, ap);
if (verbosity > VERBOSITY_FULL)
logprintf("Cmd: %s\n", buff);
r = system(buff);
@@ -3090,7 +3110,7 @@ slurpfile(size_t * sizep, const char *fmt, ...)
int r;
va_start(ap, fmt);
- vsprintf(filename, fmt, ap);
+ vsnprintf(filename, sizeof(filename), fmt, ap);
va_end(ap);
f = fopen(filename, "rb");
@@ -3157,7 +3177,7 @@ extract_reference_file(const char *name)
char buff[1024];
FILE *in, *out;
- sprintf(buff, "%s/%s.uu", refdir, name);
+ snprintf(buff, sizeof(buff), "%s/%s.uu", refdir, name);
in = fopen(buff, "r");
failure("Couldn't open reference file %s", buff);
assert(in != NULL);
@@ -3185,14 +3205,12 @@ extract_reference_file(const char *name)
while (bytes > 0) {
int n = 0;
/* Write out 1-3 bytes from that. */
- if (bytes > 0) {
- assert(VALID_UUDECODE(p[0]));
- assert(VALID_UUDECODE(p[1]));
- n = UUDECODE(*p++) << 18;
- n |= UUDECODE(*p++) << 12;
- fputc(n >> 16, out);
- --bytes;
- }
+ assert(VALID_UUDECODE(p[0]));
+ assert(VALID_UUDECODE(p[1]));
+ n = UUDECODE(*p++) << 18;
+ n |= UUDECODE(*p++) << 12;
+ fputc(n >> 16, out);
+ --bytes;
if (bytes > 0) {
assert(VALID_UUDECODE(p[0]));
n |= UUDECODE(*p++) << 6;
@@ -3218,7 +3236,7 @@ copy_reference_file(const char *name)
FILE *in, *out;
size_t rbytes;
- sprintf(buff, "%s/%s", refdir, name);
+ snprintf(buff, sizeof(buff), "%s/%s", refdir, name);
in = fopen(buff, "rb");
failure("Couldn't open reference file %s", buff);
assert(in != NULL);
@@ -3462,6 +3480,12 @@ assertion_entry_compare_acls(const char *file, int line,
* DEFINE_TEST(test_function)
* for each test.
*/
+struct test_list_t
+{
+ void (*func)(void);
+ const char *name;
+ int failures;
+};
/* Use "list.h" to declare all of the test functions. */
#undef DEFINE_TEST
@@ -3539,7 +3563,7 @@ test_run(int i, const char *tmpdir)
exit(1);
}
/* Create a log file for this test. */
- sprintf(logfilename, "%s.log", tests[i].name);
+ snprintf(logfilename, sizeof(logfilename), "%s.log", tests[i].name);
logfile = fopen(logfilename, "w");
fprintf(logfile, "%s\n\n", tests[i].name);
/* Chdir() to a work dir for this specific test. */
@@ -3753,13 +3777,115 @@ success:
return p;
}
+/* Filter tests against a glob pattern. Returns non-zero if test matches
+ * pattern, zero otherwise. A '^' at the beginning of the pattern negates
+ * the return values (i.e. returns zero for a match, non-zero otherwise.
+ */
+static int
+test_filter(const char *pattern, const char *test)
+{
+ int retval = 0;
+ int negate = 0;
+ const char *p = pattern;
+ const char *t = test;
+
+ if (p[0] == '^')
+ {
+ negate = 1;
+ p++;
+ }
+
+ while (1)
+ {
+ if (p[0] == '\\')
+ p++;
+ else if (p[0] == '*')
+ {
+ while (p[0] == '*')
+ p++;
+ if (p[0] == '\\')
+ p++;
+ if ((t = strchr(t, p[0])) == 0)
+ break;
+ }
+ if (p[0] != t[0])
+ break;
+ if (p[0] == '\0') {
+ retval = 1;
+ break;
+ }
+ p++;
+ t++;
+ }
+
+ return (negate) ? !retval : retval;
+}
+
+static int
+get_test_set(int *test_set, int limit, const char *test)
+{
+ int start, end;
+ int idx = 0;
+
+ if (test == NULL) {
+ /* Default: Run all tests. */
+ for (;idx < limit; idx++)
+ test_set[idx] = idx;
+ return (limit);
+ }
+ if (*test >= '0' && *test <= '9') {
+ const char *vp = test;
+ start = 0;
+ while (*vp >= '0' && *vp <= '9') {
+ start *= 10;
+ start += *vp - '0';
+ ++vp;
+ }
+ if (*vp == '\0') {
+ end = start;
+ } else if (*vp == '-') {
+ ++vp;
+ if (*vp == '\0') {
+ end = limit - 1;
+ } else {
+ end = 0;
+ while (*vp >= '0' && *vp <= '9') {
+ end *= 10;
+ end += *vp - '0';
+ ++vp;
+ }
+ }
+ } else
+ return (-1);
+ if (start < 0 || end >= limit || start > end)
+ return (-1);
+ while (start <= end)
+ test_set[idx++] = start++;
+ } else {
+ for (start = 0; start < limit; ++start) {
+ const char *name = tests[start].name;
+ if (test_filter(test, name))
+ test_set[idx++] = start;
+ }
+ }
+ return ((idx == 0)?-1:idx);
+}
+
int
main(int argc, char **argv)
{
static const int limit = sizeof(tests) / sizeof(tests[0]);
int test_set[sizeof(tests) / sizeof(tests[0])];
int i = 0, j = 0, tests_run = 0, tests_failed = 0, option;
+ int testprogdir_len;
+#ifdef PROGRAM
+ int tmp2_len;
+#endif
time_t now;
+ struct tm *tmptr;
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
+ struct tm tmbuf;
+#endif
char *refdir_alloc = NULL;
const char *progname;
char **saved_argv;
@@ -3795,12 +3921,13 @@ main(int argc, char **argv)
* tree.
*/
progname = p = argv[0];
- if ((testprogdir = (char *)malloc(strlen(progname) + 1)) == NULL)
+ testprogdir_len = strlen(progname) + 1;
+ if ((testprogdir = (char *)malloc(testprogdir_len)) == NULL)
{
fprintf(stderr, "ERROR: Out of memory.");
exit(1);
}
- strcpy(testprogdir, progname);
+ strncpy(testprogdir, progname, testprogdir_len);
while (*p != '\0') {
/* Support \ or / dir separators for Windows compat. */
if (*p == '/' || *p == '\\')
@@ -3942,20 +4069,21 @@ main(int argc, char **argv)
#ifdef PROGRAM
if (testprogfile == NULL)
{
- if ((tmp2 = (char *)malloc(strlen(testprogdir) + 1 +
- strlen(PROGRAM) + 1)) == NULL)
+ tmp2_len = strlen(testprogdir) + 1 + strlen(PROGRAM) + 1;
+ if ((tmp2 = (char *)malloc(tmp2_len)) == NULL)
{
fprintf(stderr, "ERROR: Out of memory.");
exit(1);
}
- strcpy(tmp2, testprogdir);
- strcat(tmp2, "/");
- strcat(tmp2, PROGRAM);
+ strncpy(tmp2, testprogdir, tmp2_len);
+ strncat(tmp2, "/", tmp2_len);
+ strncat(tmp2, PROGRAM, tmp2_len);
testprogfile = tmp2;
}
{
char *testprg;
+ int testprg_len;
#if defined(_WIN32) && !defined(__CYGWIN__)
/* Command.com sometimes rejects '/' separators. */
testprg = strdup(testprogfile);
@@ -3966,10 +4094,11 @@ main(int argc, char **argv)
testprogfile = testprg;
#endif
/* Quote the name that gets put into shell command lines. */
- testprg = malloc(strlen(testprogfile) + 3);
- strcpy(testprg, "\"");
- strcat(testprg, testprogfile);
- strcat(testprg, "\"");
+ testprg_len = strlen(testprogfile) + 3;
+ testprg = malloc(testprg_len);
+ strncpy(testprg, "\"", testprg_len);
+ strncat(testprg, testprogfile, testprg_len);
+ strncat(testprg, "\"", testprg_len);
testprog = testprg;
}
#endif
@@ -3991,9 +4120,15 @@ main(int argc, char **argv)
*/
now = time(NULL);
for (i = 0; ; i++) {
+#if defined(HAVE_LOCALTIME_S)
+ tmptr = localtime_s(&tmbuf, &now) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
+ tmptr = localtime_r(&now, &tmbuf);
+#else
+ tmptr = localtime(&now);
+#endif
strftime(tmpdir_timestamp, sizeof(tmpdir_timestamp),
- "%Y-%m-%dT%H.%M.%S",
- localtime(&now));
+ "%Y-%m-%dT%H.%M.%S", tmptr);
if ((strlen(tmp) + 1 + strlen(progname) + 1 +
strlen(tmpdir_timestamp) + 1 + 3) >
(sizeof(tmpdir) / sizeof(char))) {
@@ -4049,13 +4184,12 @@ main(int argc, char **argv)
do {
int test_num;
- test_num = get_test_set(test_set, limit, *argv, tests);
+ test_num = get_test_set(test_set, limit, *argv);
if (test_num < 0) {
printf("*** INVALID Test %s\n", *argv);
free(refdir_alloc);
free(testprogdir);
usage(progname);
- return (1);
}
for (i = 0; i < test_num; i++) {
tests_run++;
diff --git a/contrib/libarchive/test_utils/test_utils.c b/contrib/libarchive/test_utils/test_utils.c
index 8ea3d3c4b33d..b79667610bda 100644
--- a/contrib/libarchive/test_utils/test_utils.c
+++ b/contrib/libarchive/test_utils/test_utils.c
@@ -26,99 +26,86 @@
#include "test_utils.h"
+#include <errno.h>
#include <stdlib.h>
+#include <stdio.h>
#include <string.h>
+#include <assert.h>
-/* Filter tests against a glob pattern. Returns non-zero if test matches
- * pattern, zero otherwise. A '^' at the beginning of the pattern negates
- * the return values (i.e. returns zero for a match, non-zero otherwise.
- */
-static int
-test_filter(const char *pattern, const char *test)
+static inline uint64_t
+xorshift64(uint64_t *state)
{
- int retval = 0;
- int negate = 0;
- const char *p = pattern;
- const char *t = test;
+ uint64_t x = *state;
+ x ^= x << 13;
+ x ^= x >> 7;
+ x ^= x << 17;
+ *state = x;
+ return (x);
+}
- if (p[0] == '^')
- {
- negate = 1;
- p++;
+/*
+ * Fill a buffer with reproducible pseudo-random data using a simple xorshift
+ * algorithm. Originally, most tests filled buffers with a loop that calls
+ * rand() once for each byte. However, this initialization can be extremely
+ * slow when running on emulated platforms such as QEMU where 16M calls to
+ * rand() take a long time: Before the test_write_format_7zip_large_copy test
+ * took ~22 seconds, whereas using a xorshift random number generator (that can
+ * be inlined) reduces it to ~17 seconds on QEMU RISC-V.
+ */
+static void
+fill_with_pseudorandom_data_seed(uint64_t seed, void *buffer, size_t size)
+{
+ uint64_t *aligned_buffer;
+ size_t num_values;
+ size_t i;
+ size_t unaligned_suffix;
+ size_t unaligned_prefix = 0;
+ /*
+ * To avoid unaligned stores we only fill the aligned part of the buffer
+ * with pseudo-random data and fill the unaligned prefix with 0xab and
+ * the suffix with 0xcd.
+ */
+ if ((uintptr_t)buffer % sizeof(uint64_t)) {
+ unaligned_prefix =
+ sizeof(uint64_t) - (uintptr_t)buffer % sizeof(uint64_t);
+ aligned_buffer =
+ (uint64_t *)((char *)buffer + unaligned_prefix);
+ memset(buffer, 0xab, unaligned_prefix);
+ } else {
+ aligned_buffer = (uint64_t *)buffer;
}
-
- while (1)
- {
- if (p[0] == '\\')
- p++;
- else if (p[0] == '*')
- {
- while (p[0] == '*')
- p++;
- if (p[0] == '\\')
- p++;
- if ((t = strchr(t, p[0])) == 0)
- break;
- }
- if (p[0] != t[0])
- break;
- if (p[0] == '\0') {
- retval = 1;
- break;
- }
- p++;
- t++;
+ assert((uintptr_t)aligned_buffer % sizeof(uint64_t) == 0);
+ num_values = (size - unaligned_prefix) / sizeof(uint64_t);
+ unaligned_suffix =
+ size - unaligned_prefix - num_values * sizeof(uint64_t);
+ for (i = 0; i < num_values; i++) {
+ aligned_buffer[i] = xorshift64(&seed);
+ }
+ if (unaligned_suffix) {
+ memset((char *)buffer + size - unaligned_suffix, 0xcd,
+ unaligned_suffix);
}
-
- return (negate) ? !retval : retval;
}
-int get_test_set(int *test_set, int limit, const char *test,
- struct test_list_t *tests)
+void
+fill_with_pseudorandom_data(void *buffer, size_t size)
{
- int start, end;
- int idx = 0;
-
- if (test == NULL) {
- /* Default: Run all tests. */
- for (;idx < limit; idx++)
- test_set[idx] = idx;
- return (limit);
- }
- if (*test >= '0' && *test <= '9') {
- const char *vp = test;
- start = 0;
- while (*vp >= '0' && *vp <= '9') {
- start *= 10;
- start += *vp - '0';
- ++vp;
+ uint64_t seed;
+ const char* seed_str;
+ /*
+ * Check if a seed has been specified in the environment, otherwise fall
+ * back to using rand() as a seed.
+ */
+ if ((seed_str = getenv("TEST_RANDOM_SEED")) != NULL) {
+ errno = 0;
+ seed = strtoull(seed_str, NULL, 10);
+ if (errno != 0) {
+ fprintf(stderr, "strtoull(%s) failed: %s", seed_str,
+ strerror(errno));
+ seed = rand();
}
- if (*vp == '\0') {
- end = start;
- } else if (*vp == '-') {
- ++vp;
- if (*vp == '\0') {
- end = limit - 1;
- } else {
- end = 0;
- while (*vp >= '0' && *vp <= '9') {
- end *= 10;
- end += *vp - '0';
- ++vp;
- }
- }
- } else
- return (-1);
- if (start < 0 || end >= limit || start > end)
- return (-1);
- while (start <= end)
- test_set[idx++] = start++;
} else {
- for (start = 0; start < limit; ++start) {
- const char *name = tests[start].name;
- if (test_filter(test, name))
- test_set[idx++] = start;
- }
+ seed = rand();
}
- return ((idx == 0)?-1:idx);
+ fill_with_pseudorandom_data_seed(seed, buffer, size);
}
diff --git a/contrib/libarchive/test_utils/test_utils.h b/contrib/libarchive/test_utils/test_utils.h
index 164c528fc1de..41457890f0f3 100644
--- a/contrib/libarchive/test_utils/test_utils.h
+++ b/contrib/libarchive/test_utils/test_utils.h
@@ -27,13 +27,10 @@
#ifndef TEST_UTILS_H
#define TEST_UTILS_H
-struct test_list_t
-{
- void (*func)(void);
- const char *name;
- int failures;
-};
+#include <stddef.h>
+#include <stdint.h>
-int get_test_set(int *, int, const char *, struct test_list_t *);
+/* Fill a buffer with pseudorandom data */
+void fill_with_pseudorandom_data(void* buffer, size_t size);
#endif /* TEST_UTILS_H */
diff --git a/contrib/libarchive/unzip/bsdunzip.1 b/contrib/libarchive/unzip/bsdunzip.1
new file mode 100644
index 000000000000..a67ca2327066
--- /dev/null
+++ b/contrib/libarchive/unzip/bsdunzip.1
@@ -0,0 +1,218 @@
+.\"-
+.\" 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
+.Sh NAME
+.Nm bsdunzip
+.Nd extract files from a ZIP archive
+.Sh SYNOPSIS
+.Nm
+.Op Fl aCcfjLlnopqtuvy
+.Op { Fl O | Fl I No } Ar encoding
+.Op Fl d Ar dir
+.Op Fl x Ar pattern
+.Op Fl P Ar password
+.Ar zipfile
+.Op Ar member ...
+.Sh DESCRIPTION
+.\" ...
+The following options are available:
+.Bl -tag -width Fl
+.It Fl a
+When extracting a text file, convert DOS-style line endings to
+Unix-style line endings.
+.It Fl C
+Match file names case-insensitively.
+.It Fl c
+Extract to stdout/screen.
+When extracting files from the zipfile, they are written to stdout.
+This is similar to
+.Fl p ,
+but does not suppress normal output.
+.It Fl d Ar dir
+Extract files into the specified directory rather than the current
+directory.
+.It Fl f
+Update existing.
+Extract only files from the zipfile if a file with the same name
+already exists on disk and is older than the former.
+Otherwise, the file is silently skipped.
+.It Fl I Ar encoding
+.It Fl O Ar encoding
+Convert filenames from the specified encoding.
+.It Fl j
+Ignore directories stored in the zipfile; instead, extract all files
+directly into the extraction directory.
+.It Fl L
+Convert the names of the extracted files and directories to lowercase.
+.It Fl l
+List, rather than extract, the contents of the zipfile.
+.It Fl n
+No overwrite.
+When extracting a file from the zipfile, if a file with the same name
+already exists on disk, the file is silently skipped.
+.It Fl o
+Overwrite.
+When extracting a file from the zipfile, if a file with the same name
+already exists on disk, the existing file is replaced with the file
+from the zipfile.
+.It Fl p
+Extract to stdout.
+When extracting files from the zipfile, they are written to stdout.
+The normal output is suppressed as if
+.Fl q
+was specified.
+.It Fl P Ar password
+Extract encrypted files using a password.
+Putting a password on the command line using this option can be
+insecure.
+.It Fl q
+Quiet: print less information while extracting.
+.It Fl t
+Test: do not extract anything, but verify the checksum of every file
+in the archive.
+.It Fl u
+Update.
+When extracting a file from the zipfile, if a file with the same name
+already exists on disk, the existing file is replaced with the file
+from the zipfile if and only if the latter is newer than the former.
+Otherwise, the file is silently skipped.
+.It Fl v
+List verbosely, rather than extract, the contents of the zipfile.
+This differs from
+.Fl l
+by using the long listing.
+Note that most of the data is currently fake and does not reflect the
+content of the archive.
+.It Fl x Ar pattern
+Exclude files matching the pattern
+.Ar pattern .
+.It Fl y
+Print four digit years in listings instead of two.
+.It Fl Z Ar mode
+Emulate
+.Xr zipinfo 1L
+mode.
+Enabling
+.Xr zipinfo 1L
+mode changes the way in which additional arguments are parsed.
+Currently only
+.Xr zipinfo 1L
+mode 1 is supported, which lists the file names one per line.
+.It Ar [member ...]
+Optional list of members to extract from the zipfile.
+Can include patterns, e.g.,
+.Ar 'memberdir/*'
+will extract all files and dirs below memberdir.
+.El
+.Pp
+Note that only one of
+.Fl n ,
+.Fl o ,
+and
+.Fl u
+may be specified.
+If specified filename is
+.Qq - ,
+then data is read from
+.Va stdin .
+.Sh ENVIRONMENT
+If the
+.Ev UNZIP_DEBUG
+environment variable is defined, the
+.Fl q
+command-line option has no effect, and additional debugging
+information will be printed to
+.Va stderr .
+.Sh COMPATIBILITY
+The
+.Nm
+utility aims to be sufficiently compatible with other implementations
+to serve as a drop-in replacement in the context of the
+.Xr ports 7
+system.
+No attempt has been made to replicate functionality which is not
+required for that purpose.
+.Pp
+For compatibility reasons, command-line options will be recognized if
+they are listed not only before but also after the name of the
+zipfile.
+.Pp
+Normally, the
+.Fl a
+option should only affect files which are marked as text files in the
+zipfile's central directory.
+Since the
+.Xr archive 3
+library does not provide access to that information, it is not available
+to the
+.Nm
+utility.
+Instead, the
+.Nm
+utility will assume that a file is a text file if no non-ASCII
+characters are present within the first block of data decompressed for
+that file.
+If non-ASCII characters appear in subsequent blocks of data, a warning
+will be issued.
+.Pp
+The
+.Nm
+utility is only able to process ZIP archives handled by
+.Xr libarchive 3 .
+Depending on the installed version of
+.Xr libarchive 3 ,
+this may or may not include self-extracting or ZIPX archives.
+.Sh SEE ALSO
+.Xr libarchive 3
+.Sh HISTORY
+The
+.Nm
+utility appeared in
+.Fx 8.0 .
+.Sh AUTHORS
+The
+.Nm
+utility and this manual page were written by
+.An Dag-Erling Sm\(/orgrav Aq Mt des@FreeBSD.org .
+It uses the
+.Xr archive 3
+library developed by
+.An Tim Kientzle Aq Mt kientzle@FreeBSD.org .
+.Sh CAVEATS
+The
+.Nm
+utility performs two scans of the command-line for arguments before
+and after the archive name, so as to maintain compatibility with
+Info-ZIP unzip.
+As a result, the POSIX
+.Ql --
+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
diff --git a/contrib/libarchive/unzip/bsdunzip.c b/contrib/libarchive/unzip/bsdunzip.c
new file mode 100644
index 000000000000..af3fb14c3636
--- /dev/null
+++ b/contrib/libarchive/unzip/bsdunzip.c
@@ -0,0 +1,1290 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * 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
+
+#ifdef HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_FNMATCH_H
+#include <fnmatch.h>
+#endif
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
+#ifdef HAVE_STDARG_H
+#include <stdarg.h>
+#endif
+#include <stdio.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if ((!defined(HAVE_UTIMENSAT) && defined(HAVE_LUTIMES)) || \
+ (!defined(HAVE_FUTIMENS) && defined(HAVE_FUTIMES)))
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#endif
+#ifdef HAVE_GETOPT_OPTRESET
+#include <getopt.h>
+#endif
+
+#include "bsdunzip.h"
+#include "passphrase.h"
+#include "err.h"
+
+/* command-line options */
+static int a_opt; /* convert EOL */
+static int C_opt; /* match case-insensitively */
+static int c_opt; /* extract to stdout */
+static const char *d_arg; /* directory */
+static int f_opt; /* update existing files only */
+static const char *O_arg; /* encoding */
+static int j_opt; /* junk directories */
+static int L_opt; /* lowercase names */
+static int n_opt; /* never overwrite */
+static int o_opt; /* always overwrite */
+static int p_opt; /* extract to stdout, quiet */
+static const char *P_arg; /* passphrase */
+static int q_opt; /* quiet */
+static int t_opt; /* test */
+static int u_opt; /* update */
+static int v_opt; /* verbose/list */
+static const char *y_str = ""; /* 4 digit year */
+static int Z1_opt; /* zipinfo mode list files only */
+static int version_opt; /* version string */
+
+/* debug flag */
+static int unzip_debug;
+
+/* zipinfo mode */
+static int zipinfo_mode;
+
+/* running on tty? */
+static int tty;
+
+/* processing exclude list */
+static int unzip_exclude_mode = 0;
+
+int bsdunzip_optind;
+
+/* convenience macro */
+/* XXX should differentiate between ARCHIVE_{WARN,FAIL,RETRY} */
+#define ac(call) \
+ do { \
+ int acret = (call); \
+ if (acret != ARCHIVE_OK) \
+ errorx("%s", archive_error_string(a)); \
+ } while (0)
+
+/*
+ * Indicates that last info() did not end with EOL. This helps error() et
+ * al. avoid printing an error message on the same line as an incomplete
+ * informational message.
+ */
+static int noeol;
+
+/* for an interactive passphrase input */
+static char *passphrase_buf;
+
+/* fatal error message + errno */
+static void
+error(const char *fmt, ...)
+{
+ va_list ap;
+
+ if (noeol)
+ fprintf(stdout, "\n");
+ fflush(stdout);
+ fprintf(stderr, "unzip: ");
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ fprintf(stderr, ": %s\n", strerror(errno));
+ exit(EXIT_FAILURE);
+}
+
+/* fatal error message, no errno */
+static void
+errorx(const char *fmt, ...)
+{
+ va_list ap;
+
+ if (noeol)
+ fprintf(stdout, "\n");
+ fflush(stdout);
+ fprintf(stderr, "unzip: ");
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ fprintf(stderr, "\n");
+ exit(EXIT_FAILURE);
+}
+
+/* non-fatal error message + errno */
+static void
+warning(const char *fmt, ...)
+{
+ va_list ap;
+
+ if (noeol)
+ fprintf(stdout, "\n");
+ fflush(stdout);
+ fprintf(stderr, "unzip: ");
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ fprintf(stderr, ": %s\n", strerror(errno));
+}
+
+/* non-fatal error message, no errno */
+static void
+warningx(const char *fmt, ...)
+{
+ va_list ap;
+
+ if (noeol)
+ fprintf(stdout, "\n");
+ fflush(stdout);
+ fprintf(stderr, "unzip: ");
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ fprintf(stderr, "\n");
+}
+
+/* informational message (if not -q) */
+static void
+info(const char *fmt, ...)
+{
+ va_list ap;
+
+ if (q_opt && !unzip_debug)
+ return;
+ va_start(ap, fmt);
+ vfprintf(stdout, fmt, ap);
+ va_end(ap);
+ fflush(stdout);
+
+ if (*fmt == '\0')
+ noeol = 1;
+ else
+ noeol = fmt[strlen(fmt) - 1] != '\n';
+}
+
+/* debug message (if unzip_debug) */
+static void
+debug(const char *fmt, ...)
+{
+ va_list ap;
+
+ if (!unzip_debug)
+ return;
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ fflush(stderr);
+
+ if (*fmt == '\0')
+ noeol = 1;
+ else
+ noeol = fmt[strlen(fmt) - 1] != '\n';
+}
+
+/* duplicate a path name, possibly converting to lower case */
+static char *
+pathdup(const char *path)
+{
+ char *str;
+ size_t i, len;
+
+ if (path == NULL || path[0] == '\0')
+ return (NULL);
+
+ len = strlen(path);
+ while (len && path[len - 1] == '/')
+ len--;
+ if ((str = malloc(len + 1)) == NULL) {
+ errno = ENOMEM;
+ error("malloc()");
+ }
+ if (L_opt) {
+ for (i = 0; i < len; ++i)
+ str[i] = tolower((unsigned char)path[i]);
+ } else {
+ memcpy(str, path, len);
+ }
+ str[len] = '\0';
+
+ return (str);
+}
+
+/* concatenate two path names */
+static char *
+pathcat(const char *prefix, const char *path)
+{
+ char *str;
+ size_t prelen, len;
+
+ prelen = prefix ? strlen(prefix) + 1 : 0;
+ len = strlen(path) + 1;
+ if ((str = malloc(prelen + len)) == NULL) {
+ errno = ENOMEM;
+ error("malloc()");
+ }
+ if (prefix) {
+ memcpy(str, prefix, prelen); /* includes zero */
+ str[prelen - 1] = '/'; /* splat zero */
+ }
+ memcpy(str + prelen, path, len); /* includes zero */
+
+ return (str);
+}
+
+/*
+ * Pattern lists for include / exclude processing
+ */
+struct pattern {
+ STAILQ_ENTRY(pattern) link;
+ char pattern[];
+};
+
+STAILQ_HEAD(pattern_list, pattern);
+static struct pattern_list include = STAILQ_HEAD_INITIALIZER(include);
+static struct pattern_list exclude = STAILQ_HEAD_INITIALIZER(exclude);
+
+/*
+ * Add an entry to a pattern list
+ */
+static void
+add_pattern(struct pattern_list *list, const char *pattern)
+{
+ struct pattern *entry;
+ size_t len;
+
+ debug("adding pattern '%s'\n", pattern);
+ len = strlen(pattern);
+ if ((entry = malloc(sizeof *entry + len + 1)) == NULL) {
+ errno = ENOMEM;
+ error("malloc()");
+ }
+ memcpy(entry->pattern, pattern, len + 1);
+ STAILQ_INSERT_TAIL(list, entry, link);
+}
+
+/*
+ * Match a string against a list of patterns
+ */
+static int
+match_pattern(struct pattern_list *list, const char *str)
+{
+ struct pattern *entry;
+
+ STAILQ_FOREACH(entry, list, link) {
+#ifdef HAVE_FNMATCH
+ if (fnmatch(entry->pattern, str, C_opt ? FNM_CASEFOLD : 0) == 0)
+ return (1);
+#else
+#error "Unsupported platform: fnmatch() is required"
+#endif
+ }
+ return (0);
+}
+
+/*
+ * Verify that a given pathname is in the include list and not in the
+ * exclude list.
+ */
+static int
+accept_pathname(const char *pathname)
+{
+
+ if (!STAILQ_EMPTY(&include) && !match_pattern(&include, pathname))
+ return (0);
+ if (!STAILQ_EMPTY(&exclude) && match_pattern(&exclude, pathname))
+ return (0);
+ return (1);
+}
+
+/*
+ * Create the specified directory with the specified mode, taking certain
+ * precautions on they way.
+ */
+static void
+make_dir(const char *path, int mode)
+{
+ struct stat sb;
+
+ if (lstat(path, &sb) == 0) {
+ if (S_ISDIR(sb.st_mode))
+ return;
+ /*
+ * Normally, we should either ask the user about removing
+ * the non-directory of the same name as a directory we
+ * wish to create, or respect the -n or -o command-line
+ * options. However, this may lead to a later failure or
+ * even compromise (if this non-directory happens to be a
+ * symlink to somewhere unsafe), so we don't.
+ */
+
+ /*
+ * Don't check unlink() result; failure will cause mkdir()
+ * to fail later, which we will catch.
+ */
+ (void)unlink(path);
+ }
+ if (mkdir(path, mode) != 0 && errno != EEXIST)
+ error("mkdir('%s')", path);
+}
+
+/*
+ * Ensure that all directories leading up to (but not including) the
+ * specified path exist.
+ *
+ * XXX inefficient + modifies the file in-place
+ */
+static void
+make_parent(char *path)
+{
+ struct stat sb;
+ char *sep;
+
+ sep = strrchr(path, '/');
+ if (sep == NULL || sep == path)
+ return;
+ *sep = '\0';
+ if (lstat(path, &sb) == 0) {
+ if (S_ISDIR(sb.st_mode)) {
+ *sep = '/';
+ return;
+ }
+ unlink(path);
+ }
+ make_parent(path);
+ mkdir(path, 0755);
+ *sep = '/';
+
+#if 0
+ for (sep = path; (sep = strchr(sep, '/')) != NULL; sep++) {
+ /* root in case of absolute d_arg */
+ if (sep == path)
+ continue;
+ *sep = '\0';
+ make_dir(path, 0755);
+ *sep = '/';
+ }
+#endif
+}
+
+/*
+ * Extract a directory.
+ */
+static void
+extract_dir(struct archive *a, struct archive_entry *e, const char *path)
+{
+ int mode;
+
+ /*
+ * Dropbox likes to create '/' directory entries, just ignore
+ * such junk.
+ */
+ if (*path == '\0')
+ return;
+
+ mode = archive_entry_mode(e) & 0777;
+ if (mode == 0)
+ mode = 0755;
+
+ /*
+ * Some zipfiles contain directories with weird permissions such
+ * as 0644 or 0444. This can cause strange issues such as being
+ * unable to extract files into the directory we just created, or
+ * the user being unable to remove the directory later without
+ * first manually changing its permissions. Therefore, we whack
+ * the permissions into shape, assuming that the user wants full
+ * access and that anyone who gets read access also gets execute
+ * access.
+ */
+ mode |= 0700;
+ if (mode & 0040)
+ mode |= 0010;
+ if (mode & 0004)
+ mode |= 0001;
+
+ info(" creating: %s/\n", path);
+ make_dir(path, mode);
+ ac(archive_read_data_skip(a));
+}
+
+static unsigned char buffer[8192];
+static char spinner[] = { '|', '/', '-', '\\' };
+
+static int
+handle_existing_file(char **path)
+{
+ size_t alen;
+ ssize_t len;
+ char buf[4];
+
+ for (;;) {
+ 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;
+ }
+ switch (*buf) {
+ case 'A':
+ o_opt = 1;
+ /* FALLTHROUGH */
+ case 'y':
+ case 'Y':
+ (void)unlink(*path);
+ return 1;
+ case 'N':
+ n_opt = 1;
+ /* FALLTHROUGH */
+ case 'n':
+ return -1;
+ case 'r':
+ case 'R':
+ printf("New name: ");
+ fflush(stdout);
+ free(*path);
+ *path = NULL;
+ alen = 0;
+ len = getline(path, &alen, stdin);
+ if ((*path)[len - 1] == '\n')
+ (*path)[len - 1] = '\0';
+ return 0;
+ default:
+ break;
+ }
+ }
+}
+
+/*
+ * Detect binary files by a combination of character white list and
+ * black list. NUL bytes and other control codes without use in text files
+ * result directly in switching the file to binary mode. Otherwise, at least
+ * one white-listed byte has to be found.
+ *
+ * Black-listed: 0..6, 14..25, 28..31
+ * 0xf3ffc07f = 11110011111111111100000001111111b
+ * White-listed: 9..10, 13, >= 32
+ * 0x00002600 = 00000000000000000010011000000000b
+ *
+ * See the proginfo/txtvsbin.txt in the zip sources for a detailed discussion.
+ */
+#define BYTE_IS_BINARY(x) ((x) < 32 && (0xf3ffc07fU & (1U << (x))))
+#define BYTE_IS_TEXT(x) ((x) >= 32 || (0x00002600U & (1U << (x))))
+
+static int
+check_binary(const unsigned char *buf, size_t len)
+{
+ int rv;
+ for (rv = 1; len--; ++buf) {
+ if (BYTE_IS_BINARY(*buf))
+ return 1;
+ if (BYTE_IS_TEXT(*buf))
+ rv = 0;
+ }
+
+ return rv;
+}
+
+/*
+ * Extract to a file descriptor
+ */
+static int
+extract2fd(struct archive *a, char *pathname, int fd)
+{
+ int cr, text, warn;
+ ssize_t len;
+ unsigned char *p, *q, *end;
+
+ text = a_opt;
+ warn = 0;
+ cr = 0;
+
+ /* loop over file contents and write to fd */
+ for (int n = 0; ; n++) {
+ if (fd != STDOUT_FILENO)
+ if (tty && (n % 4) == 0)
+ info(" %c\b\b", spinner[(n / 4) % sizeof spinner]);
+
+ len = archive_read_data(a, buffer, sizeof buffer);
+
+ if (len < 0)
+ ac(len);
+
+ /* left over CR from previous buffer */
+ if (a_opt && cr) {
+ if (len == 0 || buffer[0] != '\n')
+ if (write(fd, "\r", 1) != 1)
+ error("write('%s')", pathname);
+ cr = 0;
+ }
+
+ /* EOF */
+ if (len == 0)
+ break;
+ end = buffer + len;
+
+ /*
+ * Detect whether this is a text file. The correct way to
+ * do this is to check the least significant bit of the
+ * "internal file attributes" field of the corresponding
+ * file header in the central directory, but libarchive
+ * does not provide access to this field, so we have to
+ * guess by looking for non-ASCII characters in the
+ * buffer. Hopefully we won't guess wrong. If we do
+ * guess wrong, we print a warning message later.
+ */
+ if (a_opt && n == 0) {
+ if (check_binary(buffer, len))
+ text = 0;
+ }
+
+ /* simple case */
+ if (!a_opt || !text) {
+ if (write(fd, buffer, len) != len)
+ error("write('%s')", pathname);
+ continue;
+ }
+
+ /* hard case: convert \r\n to \n (sigh...) */
+ for (p = buffer; p < end; p = q + 1) {
+ for (q = p; q < end; q++) {
+ if (!warn && BYTE_IS_BINARY(*q)) {
+ warningx("%s may be corrupted due"
+ " to weak text file detection"
+ " heuristic", pathname);
+ warn = 1;
+ }
+ if (q[0] != '\r')
+ continue;
+ if (&q[1] == end) {
+ cr = 1;
+ break;
+ }
+ if (q[1] == '\n')
+ break;
+ }
+ if (write(fd, p, q - p) != q - p)
+ error("write('%s')", pathname);
+ }
+ }
+
+ return text;
+}
+
+/*
+ * Extract a regular file.
+ */
+static void
+extract_file(struct archive *a, struct archive_entry *e, char **path)
+{
+ int mode;
+ struct timespec mtime;
+ struct stat sb;
+ int fd, check, text;
+ const char *linkname;
+#if defined(HAVE_UTIMENSAT) || defined(HAVE_FUTIMENS)
+ struct timespec ts[2];
+#endif
+#if ((!defined(HAVE_UTIMENSAT) && defined(HAVE_LUTIMES)) || \
+ (!defined(HAVE_FUTIMENS) && defined(HAVE_FUTIMES)))
+ struct timeval times[2];
+#endif
+
+ mode = archive_entry_mode(e) & 0777;
+ if (mode == 0)
+ mode = 0644;
+ mtime.tv_sec = archive_entry_mtime(e);
+ mtime.tv_nsec = archive_entry_mtime_nsec(e);
+
+ /* look for existing file of same name */
+recheck:
+ if (lstat(*path, &sb) == 0) {
+ if (u_opt || f_opt) {
+ /* check if up-to-date */
+ if (S_ISREG(sb.st_mode) && (
+#if HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC
+ sb.st_mtimespec.tv_sec > mtime.tv_sec ||
+ (sb.st_mtimespec.tv_sec == mtime.tv_sec &&
+ sb.st_mtimespec.tv_nsec >= mtime.tv_nsec)
+#elif HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
+ sb.st_mtim.tv_sec > mtime.tv_sec ||
+ (sb.st_mtim.tv_sec == mtime.tv_sec &&
+ sb.st_mtim.tv_nsec >= mtime.tv_nsec)
+#elif HAVE_STRUCT_STAT_ST_MTIME_N
+ sb.st_mtime > mtime.tv_sec ||
+ (sb.st_mtime == mtime.tv_sec &&
+ sb.st_mtime_n => mtime.tv_nsec)
+#elif HAVE_STRUCT_STAT_ST_MTIME_USEC
+ sb.st_mtime > mtime.tv_sec ||
+ (sb.st_mtime == mtime.tv_sec &&
+ sb.st_mtime_usec => mtime.tv_nsec / 1000)
+#else
+ sb.st_mtime > mtime.tv_sec
+#endif
+ ))
+ return;
+ (void)unlink(*path);
+ } else if (o_opt) {
+ /* overwrite */
+ (void)unlink(*path);
+ } else if (n_opt) {
+ /* do not overwrite */
+ return;
+ } else {
+ check = handle_existing_file(path);
+ if (check == 0)
+ goto recheck;
+ if (check == -1)
+ return; /* do not overwrite */
+ }
+ } else {
+ if (f_opt)
+ return;
+ }
+
+#if defined(HAVE_UTIMENSAT) || defined(HAVE_FUTIMENS)
+ ts[0].tv_sec = 0;
+ ts[0].tv_nsec = UTIME_NOW;
+ ts[1] = mtime;
+#endif
+#if ((!defined(HAVE_UTIMENSAT) && defined(HAVE_LUTIMES)) || \
+ (!defined(HAVE_FUTIMENS) && defined(HAVE_FUTIMES)))
+ times[0].tv_sec = 0;
+ times[0].tv_usec = -1;
+ times[1].tv_sec = mtime.tv_sec;
+ times[1].tv_usec = mtime.tv_nsec / 1000;
+#endif
+
+ /* process symlinks */
+ linkname = archive_entry_symlink(e);
+ if (linkname != NULL) {
+ if (symlink(linkname, *path) != 0)
+ error("symlink('%s')", *path);
+ info(" extracting: %s -> %s\n", *path, linkname);
+#ifdef HAVE_LCHMOD
+ if (lchmod(*path, mode) != 0)
+ warning("Cannot set mode for '%s'", *path);
+#endif
+ /* set access and modification time */
+#if defined(HAVE_UTIMENSAT)
+ if (utimensat(AT_FDCWD, *path, ts, AT_SYMLINK_NOFOLLOW) != 0)
+ warning("utimensat('%s')", *path);
+#elif defined(HAVE_LUTIMES)
+ gettimeofday(&times[0], NULL);
+ if (lutimes(*path, times) != 0)
+ warning("lutimes('%s')", *path);
+#endif
+ return;
+ }
+
+ if ((fd = open(*path, O_RDWR|O_CREAT|O_TRUNC, mode)) < 0)
+ error("open('%s')", *path);
+
+ info(" extracting: %s", *path);
+
+ text = extract2fd(a, *path, fd);
+
+ if (tty)
+ info(" \b\b");
+ if (text)
+ info(" (text)");
+ info("\n");
+
+ /* set access and modification time */
+#if defined(HAVE_FUTIMENS)
+ if (futimens(fd, ts) != 0)
+ error("futimens('%s')", *path);
+#elif defined(HAVE_FUTIMES)
+ gettimeofday(&times[0], NULL);
+ if (futimes(fd, times) != 0)
+ error("futimes('%s')", *path);
+#endif
+ if (close(fd) != 0)
+ error("close('%s')", *path);
+}
+
+/*
+ * Extract a zipfile entry: first perform some sanity checks to ensure
+ * that it is either a directory or a regular file and that the path is
+ * not absolute and does not try to break out of the current directory;
+ * then call either extract_dir() or extract_file() as appropriate.
+ *
+ * This is complicated a bit by the various ways in which we need to
+ * manipulate the path name. Case conversion (if requested by the -L
+ * option) happens first, but the include / exclude patterns are applied
+ * to the full converted path name, before the directory part of the path
+ * is removed in accordance with the -j option. Sanity checks are
+ * intentionally done earlier than they need to be, so the user will get a
+ * warning about insecure paths even for files or directories which
+ * wouldn't be extracted anyway.
+ */
+static void
+extract(struct archive *a, struct archive_entry *e)
+{
+ char *pathname, *realpathname;
+ mode_t filetype;
+ char *p, *q;
+
+ if ((pathname = pathdup(archive_entry_pathname(e))) == NULL) {
+ warningx("skipping empty or unreadable filename entry");
+ ac(archive_read_data_skip(a));
+ return;
+ }
+ filetype = archive_entry_filetype(e);
+
+ /* sanity checks */
+ if (pathname[0] == '/' ||
+ strncmp(pathname, "../", 3) == 0 ||
+ strstr(pathname, "/../") != NULL) {
+ warningx("skipping insecure entry '%s'", pathname);
+ ac(archive_read_data_skip(a));
+ free(pathname);
+ return;
+ }
+
+ /* I don't think this can happen in a zipfile.. */
+ if (!S_ISDIR(filetype) && !S_ISREG(filetype) && !S_ISLNK(filetype)) {
+ warningx("skipping non-regular entry '%s'", pathname);
+ ac(archive_read_data_skip(a));
+ free(pathname);
+ return;
+ }
+
+ /* skip directories in -j case */
+ if (S_ISDIR(filetype) && j_opt) {
+ ac(archive_read_data_skip(a));
+ free(pathname);
+ return;
+ }
+
+ /* apply include / exclude patterns */
+ if (!accept_pathname(pathname)) {
+ ac(archive_read_data_skip(a));
+ free(pathname);
+ return;
+ }
+
+ /* apply -j and -d */
+ if (j_opt) {
+ for (p = q = pathname; *p; ++p)
+ if (*p == '/')
+ q = p + 1;
+ realpathname = pathcat(d_arg, q);
+ } else {
+ realpathname = pathcat(d_arg, pathname);
+ }
+
+ /* ensure that parent directory exists */
+ make_parent(realpathname);
+
+ if (S_ISDIR(filetype))
+ extract_dir(a, e, realpathname);
+ else
+ extract_file(a, e, &realpathname);
+
+ free(realpathname);
+ free(pathname);
+}
+
+static void
+extract_stdout(struct archive *a, struct archive_entry *e)
+{
+ char *pathname;
+ mode_t filetype;
+
+ if ((pathname = pathdup(archive_entry_pathname(e))) == NULL) {
+ warningx("skipping empty or unreadable filename entry");
+ ac(archive_read_data_skip(a));
+ return;
+ }
+ filetype = archive_entry_filetype(e);
+
+ /* I don't think this can happen in a zipfile.. */
+ if (!S_ISDIR(filetype) && !S_ISREG(filetype) && !S_ISLNK(filetype)) {
+ warningx("skipping non-regular entry '%s'", pathname);
+ ac(archive_read_data_skip(a));
+ free(pathname);
+ return;
+ }
+
+ /* skip directories in -j case */
+ if (S_ISDIR(filetype)) {
+ ac(archive_read_data_skip(a));
+ free(pathname);
+ return;
+ }
+
+ /* apply include / exclude patterns */
+ if (!accept_pathname(pathname)) {
+ ac(archive_read_data_skip(a));
+ free(pathname);
+ return;
+ }
+
+ if (c_opt)
+ info("x %s\n", pathname);
+
+ (void)extract2fd(a, pathname, STDOUT_FILENO);
+
+ free(pathname);
+}
+
+/*
+ * Print the name of an entry to stdout.
+ */
+static void
+list(struct archive *a, struct archive_entry *e)
+{
+ char buf[20];
+ time_t mtime;
+ struct tm *tm;
+
+ mtime = archive_entry_mtime(e);
+ tm = localtime(&mtime);
+ if (*y_str)
+ strftime(buf, sizeof(buf), "%m-%d-%G %R", tm);
+ else
+ strftime(buf, sizeof(buf), "%m-%d-%g %R", tm);
+
+ if (!zipinfo_mode) {
+ if (v_opt == 1) {
+ printf(" %8ju %s %s\n",
+ (uintmax_t)archive_entry_size(e),
+ buf, archive_entry_pathname(e));
+ } else if (v_opt == 2) {
+ printf("%8ju Stored %7ju 0%% %s %08x %s\n",
+ (uintmax_t)archive_entry_size(e),
+ (uintmax_t)archive_entry_size(e),
+ buf,
+ 0U,
+ archive_entry_pathname(e));
+ }
+ } else {
+ if (Z1_opt)
+ printf("%s\n",archive_entry_pathname(e));
+ }
+ ac(archive_read_data_skip(a));
+}
+
+/*
+ * Extract to memory to check CRC
+ */
+static int
+test(struct archive *a, struct archive_entry *e)
+{
+ ssize_t len;
+ int error_count;
+
+ error_count = 0;
+ if (S_ISDIR(archive_entry_filetype(e)))
+ return 0;
+
+ info(" testing: %s\t", archive_entry_pathname(e));
+ while ((len = archive_read_data(a, buffer, sizeof buffer)) > 0)
+ /* nothing */;
+ if (len < 0) {
+ info(" %s\n", archive_error_string(a));
+ ++error_count;
+ } else {
+ info(" OK\n");
+ }
+
+ /* shouldn't be necessary, but it doesn't hurt */
+ ac(archive_read_data_skip(a));
+
+ return error_count;
+}
+
+/*
+ * Callback function for reading passphrase.
+ * Originally from cpio.c and passphrase.c, libarchive.
+ */
+#define PPBUFF_SIZE 1024
+static const char *
+passphrase_callback(struct archive *a, void *_client_data)
+{
+ char *p;
+
+ (void)a; /* UNUSED */
+ (void)_client_data; /* UNUSED */
+
+ if (passphrase_buf == NULL) {
+ passphrase_buf = malloc(PPBUFF_SIZE);
+ if (passphrase_buf == NULL) {
+ errno = ENOMEM;
+ error("malloc()");
+ }
+ }
+
+ p = lafe_readpassphrase("\nEnter password: ", passphrase_buf,
+ PPBUFF_SIZE);
+
+ if (p == NULL && errno != EINTR)
+ error("Error reading password");
+
+ return p;
+}
+
+/*
+ * Main loop: open the zipfile, iterate over its contents and decide what
+ * to do with each entry.
+ */
+static void
+unzip(const char *fn)
+{
+ struct archive *a;
+ struct archive_entry *e;
+ int ret;
+ uintmax_t total_size, file_count, error_count;
+
+ if ((a = archive_read_new()) == NULL)
+ error("archive_read_new failed");
+
+ ac(archive_read_support_format_zip(a));
+
+ if (O_arg)
+ ac(archive_read_set_format_option(a, "zip", "hdrcharset", O_arg));
+
+ if (P_arg)
+ archive_read_add_passphrase(a, P_arg);
+ else
+ archive_read_set_passphrase_callback(a, NULL,
+ &passphrase_callback);
+
+ ac(archive_read_open_filename(a, fn, 8192));
+
+ if (!zipinfo_mode) {
+ if (!p_opt && !q_opt)
+ printf("Archive: %s\n", fn);
+ if (v_opt == 1) {
+ printf(" Length %sDate Time Name\n", y_str);
+ printf(" -------- %s---- ---- ----\n", y_str);
+ } else if (v_opt == 2) {
+ printf(" Length Method Size Ratio %sDate Time CRC-32 Name\n", y_str);
+ printf("-------- ------ ------- ----- %s---- ---- ------ ----\n", y_str);
+ }
+ }
+
+ total_size = 0;
+ file_count = 0;
+ error_count = 0;
+ for (;;) {
+ ret = archive_read_next_header(a, &e);
+ if (ret == ARCHIVE_EOF)
+ break;
+ ac(ret);
+ if (!zipinfo_mode) {
+ if (t_opt)
+ error_count += test(a, e);
+ else if (v_opt)
+ list(a, e);
+ else if (p_opt || c_opt)
+ extract_stdout(a, e);
+ else
+ extract(a, e);
+ } else {
+ if (Z1_opt)
+ list(a, e);
+ }
+
+ total_size += archive_entry_size(e);
+ ++file_count;
+ }
+
+ if (zipinfo_mode) {
+ if (v_opt == 1) {
+ printf(" -------- %s-------\n", y_str);
+ printf(" %8ju %s%ju file%s\n",
+ total_size, y_str, file_count, file_count != 1 ? "s" : "");
+ } else if (v_opt == 2) {
+ printf("-------- ------- --- %s-------\n", y_str);
+ printf("%8ju %7ju 0%% %s%ju file%s\n",
+ total_size, total_size, y_str, file_count,
+ file_count != 1 ? "s" : "");
+ }
+ }
+
+ ac(archive_read_free(a));
+
+ if (passphrase_buf != NULL) {
+ memset(passphrase_buf, 0, PPBUFF_SIZE);
+ free(passphrase_buf);
+ }
+
+ if (t_opt) {
+ if (error_count > 0) {
+ errorx("%ju checksum error(s) found.", error_count);
+ }
+ else {
+ printf("No errors detected in compressed data of %s.\n",
+ fn);
+ }
+ }
+}
+
+static void
+usage(void)
+{
+
+ fprintf(stderr,
+"Usage: unzip [-aCcfjLlnopqtuvyZ1] [{-O|-I} encoding] [-d dir] [-x pattern] [-P password] zipfile\n"
+" [member ...]\n");
+ exit(EXIT_FAILURE);
+}
+
+static void
+version(void)
+{
+ printf("bsdunzip %s - %s \n",
+ BSDUNZIP_VERSION_STRING,
+ archive_version_details());
+ exit(0);
+}
+
+static int
+getopts(int argc, char *argv[])
+{
+ struct bsdunzip *bsdunzip, bsdunzip_storage;
+ int opt;
+ bsdunzip_optind = 1;
+
+ bsdunzip = &bsdunzip_storage;
+ memset(bsdunzip, 0, sizeof(*bsdunzip));
+
+ bsdunzip->argv = argv;
+ bsdunzip->argc = argc;
+
+ while ((opt = bsdunzip_getopt(bsdunzip)) != -1) {
+ unzip_exclude_mode = 0;
+ switch (opt) {
+ case 'a':
+ a_opt = 1;
+ break;
+ case 'C':
+ C_opt = 1;
+ break;
+ case 'c':
+ c_opt = 1;
+ break;
+ case 'd':
+ d_arg = bsdunzip->argument;
+ break;
+ case 'f':
+ f_opt = 1;
+ break;
+ case 'I':
+ case 'O':
+ O_arg = bsdunzip->argument;
+ break;
+ case 'j':
+ j_opt = 1;
+ break;
+ case 'L':
+ L_opt = 1;
+ break;
+ case 'l':
+ if (v_opt == 0)
+ v_opt = 1;
+ break;
+ case 'n':
+ n_opt = 1;
+ break;
+ case 'o':
+ o_opt = 1;
+ q_opt = 1;
+ break;
+ case 'p':
+ p_opt = 1;
+ break;
+ case 'P':
+ P_arg = bsdunzip->argument;
+ break;
+ case 'q':
+ q_opt = 1;
+ break;
+ case 't':
+ t_opt = 1;
+ break;
+ case 'u':
+ u_opt = 1;
+ break;
+ case 'v':
+ v_opt = 2;
+ break;
+ case 'x':
+ add_pattern(&exclude, bsdunzip->argument);
+ unzip_exclude_mode = 1;
+ break;
+ case 'y':
+ y_str = " ";
+ break;
+ case 'Z':
+ zipinfo_mode = 1;
+ if (bsdunzip->argument != NULL &&
+ strcmp(bsdunzip->argument, "1") == 0) {
+ Z1_opt = 1;
+ }
+ break;
+ case OPTION_VERSION:
+ version_opt = 1;
+ break;
+ case OPTION_NONE:
+ break;
+ default:
+ usage();
+ }
+ if (opt == OPTION_NONE)
+ break;
+ }
+ return (bsdunzip_optind);
+}
+
+int
+main(int argc, char *argv[])
+{
+ const char *zipfile;
+ int nopts;
+
+ lafe_setprogname(*argv, "bsdunzip");
+
+#if HAVE_SETLOCALE
+ if (setlocale(LC_ALL, "") == NULL)
+ lafe_warnc(0, "Failed to set default locale");
+#endif
+
+ if (isatty(STDOUT_FILENO))
+ tty = 1;
+
+ if (getenv("UNZIP_DEBUG") != NULL)
+ unzip_debug = 1;
+ for (int i = 0; i < argc; ++i)
+ debug("%s%c", argv[i], (i < argc - 1) ? ' ' : '\n');
+
+#ifdef __GLIBC__
+ /* Prevent GNU getopt(3) from rearranging options. */
+ setenv("POSIXLY_CORRECT", "", 1);
+#endif
+ /*
+ * Info-ZIP's unzip(1) expects certain options to come before the
+ * zipfile name, and others to come after - though it does not
+ * enforce this. For simplicity, we accept *all* options both
+ * before and after the zipfile name.
+ */
+ nopts = getopts(argc, argv);
+
+ if (version_opt == 1)
+ version();
+
+ /*
+ * When more of the zipinfo mode options are implemented, this
+ * will need to change.
+ */
+ if (zipinfo_mode && !Z1_opt) {
+ printf("Zipinfo mode needs additional options\n");
+ exit(EXIT_FAILURE);
+ }
+
+ if (argc <= nopts)
+ usage();
+ zipfile = argv[nopts++];
+
+ if (strcmp(zipfile, "-") == 0)
+ zipfile = NULL; /* STDIN */
+
+ unzip_exclude_mode = 0;
+
+ while (nopts < argc && *argv[nopts] != '-')
+ add_pattern(&include, argv[nopts++]);
+
+ nopts--; /* fake argv[0] */
+ nopts += getopts(argc - nopts, argv + nopts);
+
+ /*
+ * For compatibility with Info-ZIP's unzip(1) we need to treat
+ * non-option arguments following an -x after the zipfile as
+ * exclude list members.
+ */
+ if (unzip_exclude_mode) {
+ while (nopts < argc && *argv[nopts] != '-')
+ add_pattern(&exclude, argv[nopts++]);
+ nopts--; /* fake argv[0] */
+ nopts += getopts(argc - nopts, argv + nopts);
+ }
+
+ /* There may be residual arguments if we encountered -- */
+ while (nopts < argc)
+ add_pattern(&include, argv[nopts++]);
+
+ if (n_opt + o_opt + u_opt > 1)
+ errorx("-n, -o and -u are contradictory");
+
+ unzip(zipfile);
+
+ exit(EXIT_SUCCESS);
+}
diff --git a/contrib/libarchive/unzip/bsdunzip.h b/contrib/libarchive/unzip/bsdunzip.h
new file mode 100644
index 000000000000..ab81e3930ec2
--- /dev/null
+++ b/contrib/libarchive/unzip/bsdunzip.h
@@ -0,0 +1,60 @@
+/*-
+ * 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
+#define BSDUNZIP_H_INCLUDED
+
+#if defined(PLATFORM_CONFIG_H)
+/* Use hand-built config.h in environments that need it. */
+#include PLATFORM_CONFIG_H
+#else
+/* Not having a config.h of some sort is a serious problem. */
+#include "config.h"
+#endif
+
+#include <archive.h>
+#include <archive_entry.h>
+
+struct bsdunzip {
+ /* Option parser state */
+ int getopt_state;
+ char *getopt_word;
+
+ /* Miscellaneous state information */
+ int argc;
+ char **argv;
+ const char *argument;
+};
+
+enum {
+ OPTION_NONE,
+ OPTION_VERSION
+};
+
+int bsdunzip_getopt(struct bsdunzip *);
+
+extern int bsdunzip_optind;
+
+#endif
diff --git a/contrib/libarchive/unzip/bsdunzip_platform.h b/contrib/libarchive/unzip/bsdunzip_platform.h
new file mode 100644
index 000000000000..d4fcbb1aeab4
--- /dev/null
+++ b/contrib/libarchive/unzip/bsdunzip_platform.h
@@ -0,0 +1,65 @@
+/*-
+ * 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.
+ */
+
+/*
+ * This header is the first thing included in any of the bsdtar
+ * source files. As far as possible, platform-specific issues should
+ * be dealt with here and not within individual source files.
+ */
+
+#ifndef BSDUNZIP_PLATFORM_H_INCLUDED
+#define BSDUNZIP_PLATFORM_H_INCLUDED
+
+#if defined(PLATFORM_CONFIG_H)
+/* Use hand-built config.h in environments that need it. */
+#include PLATFORM_CONFIG_H
+#else
+/* Not having a config.h of some sort is a serious problem. */
+#include "config.h"
+#endif
+
+#ifdef HAVE_LIBARCHIVE
+/* If we're using the platform libarchive, include system headers. */
+#include <archive.h>
+#include <archive_entry.h>
+#else
+/* Otherwise, include user headers. */
+#include "archive.h"
+#include "archive_entry.h"
+#endif
+
+/* How to mark functions that don't return. */
+/* This facilitates use of some newer static code analysis tools. */
+#undef __LA_NORETURN
+#if defined(__GNUC__) && (__GNUC__ > 2 || \
+ (__GNUC__ == 2 && __GNUC_MINOR__ >= 5))
+#define __LA_NORETURN __attribute__((__noreturn__))
+#elif defined(_MSC_VER)
+#define __LA_NORETURN __declspec(noreturn)
+#else
+#define __LA_NORETURN
+#endif
+
+#endif /* !BSDUNZIP_PLATFORM_H_INCLUDED */
diff --git a/contrib/libarchive/unzip/cmdline.c b/contrib/libarchive/unzip/cmdline.c
new file mode 100644
index 000000000000..4c6efc3e0694
--- /dev/null
+++ b/contrib/libarchive/unzip/cmdline.c
@@ -0,0 +1,253 @@
+/*-
+ * 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.
+ */
+
+/*
+ * Command line parser for bsdunzip.
+ */
+
+#include "bsdunzip_platform.h"
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include "bsdunzip.h"
+#include "err.h"
+
+/*
+ * Short options for bsdunzip. Please keep this sorted.
+ */
+static const char *short_options
+ = "aCcd:fI:jLlnO:opP:qtuvx:yZ:";
+
+/*
+ * Long options for bsdunzip. Please keep this list sorted.
+ *
+ * The symbolic names for options that lack a short equivalent are
+ * defined in bsdunzip.h. Also note that so far I've found no need
+ * to support optional arguments to long options. That would be
+ * a small change to the code below.
+ */
+
+static const struct bsdunzip_option {
+ const char *name;
+ int required; /* 1 if this option requires an argument. */
+ int equivalent; /* Equivalent short option. */
+} bsdunzip_longopts[] = {
+ { "version", 0, OPTION_VERSION },
+ { NULL, 0, 0 }
+};
+
+/*
+ * This getopt implementation has two key features that common
+ * getopt_long() implementations lack. Apart from those, it's a
+ * straightforward option parser, considerably simplified by not
+ * needing to support the wealth of exotic getopt_long() features. It
+ * has, of course, been shamelessly tailored for bsdunzip. (If you're
+ * looking for a generic getopt_long() implementation for your
+ * project, I recommend Gregory Pietsch's public domain getopt_long()
+ * implementation.) The two additional features are:
+ */
+
+int
+bsdunzip_getopt(struct bsdunzip *bsdunzip)
+{
+ enum { state_start = 0, state_next_word, state_short, state_long };
+
+ const struct bsdunzip_option *popt, *match, *match2;
+ const char *p, *long_prefix;
+ size_t optlength;
+ int opt;
+ int required;
+
+again:
+ match = NULL;
+ match2 = NULL;
+ long_prefix = "--";
+ opt = OPTION_NONE;
+ required = 0;
+ bsdunzip->argument = NULL;
+
+ /* First time through, initialize everything. */
+ if (bsdunzip->getopt_state == state_start) {
+ /* Skip program name. */
+ ++bsdunzip->argv;
+ --bsdunzip->argc;
+ if (*bsdunzip->argv == NULL)
+ return (-1);
+ bsdunzip->getopt_state = state_next_word;
+ }
+
+ /*
+ * We're ready to look at the next word in argv.
+ */
+ if (bsdunzip->getopt_state == state_next_word) {
+ /* No more arguments, so no more options. */
+ if (bsdunzip->argv[0] == NULL)
+ return (-1);
+ /* Doesn't start with '-', so no more options. */
+ if (bsdunzip->argv[0][0] != '-')
+ return (-1);
+ /* "--" marks end of options; consume it and return. */
+ if (strcmp(bsdunzip->argv[0], "--") == 0) {
+ ++bsdunzip->argv;
+ --bsdunzip->argc;
+ bsdunzip_optind++;
+ return (-1);
+ }
+ /* Get next word for parsing. */
+ bsdunzip->getopt_word = *bsdunzip->argv++;
+ --bsdunzip->argc;
+ bsdunzip_optind++;
+ if (bsdunzip->getopt_word[1] == '-') {
+ /* Set up long option parser. */
+ bsdunzip->getopt_state = state_long;
+ bsdunzip->getopt_word += 2; /* Skip leading '--' */
+ } else {
+ /* Set up short option parser. */
+ bsdunzip->getopt_state = state_short;
+ ++bsdunzip->getopt_word; /* Skip leading '-' */
+ }
+ }
+
+ /*
+ * We're parsing a group of POSIX-style single-character options.
+ */
+ if (bsdunzip->getopt_state == state_short) {
+ /* Peel next option off of a group of short options. */
+ opt = *bsdunzip->getopt_word++;
+ if (opt == '\0') {
+ /* End of this group; recurse to get next option. */
+ bsdunzip->getopt_state = state_next_word;
+ goto again;
+ }
+
+ /* Does this option take an argument? */
+ p = strchr(short_options, opt);
+ if (p == NULL)
+ return ('?');
+ if (p[1] == ':')
+ required = 1;
+
+ /* If it takes an argument, parse that. */
+ if (required) {
+ /* If arg is run-in, bsdunzip->getopt_word already points to it. */
+ if (bsdunzip->getopt_word[0] == '\0') {
+ /* Otherwise, pick up the next word. */
+ bsdunzip->getopt_word = *bsdunzip->argv;
+ if (bsdunzip->getopt_word == NULL) {
+ lafe_warnc(0,
+ "Option -%c requires an argument",
+ opt);
+ return ('?');
+ }
+ ++bsdunzip->argv;
+ --bsdunzip->argc;
+ bsdunzip_optind++;
+ }
+ bsdunzip->getopt_state = state_next_word;
+ bsdunzip->argument = bsdunzip->getopt_word;
+ }
+ }
+
+ /* We're reading a long option */
+ if (bsdunzip->getopt_state == state_long) {
+ /* After this long option, we'll be starting a new word. */
+ bsdunzip->getopt_state = state_next_word;
+
+ /* Option name ends at '=' if there is one. */
+ p = strchr(bsdunzip->getopt_word, '=');
+ if (p != NULL) {
+ optlength = (size_t)(p - bsdunzip->getopt_word);
+ bsdunzip->argument = (char *)(uintptr_t)(p + 1);
+ } else {
+ optlength = strlen(bsdunzip->getopt_word);
+ }
+
+ /* Search the table for an unambiguous match. */
+ for (popt = bsdunzip_longopts; popt->name != NULL; popt++) {
+ /* Short-circuit if first chars don't match. */
+ if (popt->name[0] != bsdunzip->getopt_word[0])
+ continue;
+ /* If option is a prefix of name in table, record it.*/
+ if (strncmp(bsdunzip->getopt_word, popt->name, optlength) == 0) {
+ match2 = match; /* Record up to two matches. */
+ match = popt;
+ /* If it's an exact match, we're done. */
+ if (strlen(popt->name) == optlength) {
+ match2 = NULL; /* Forget the others. */
+ break;
+ }
+ }
+ }
+
+ /* Fail if there wasn't a unique match. */
+ if (match == NULL) {
+ lafe_warnc(0,
+ "Option %s%s is not supported",
+ long_prefix, bsdunzip->getopt_word);
+ return ('?');
+ }
+ if (match2 != NULL) {
+ lafe_warnc(0,
+ "Ambiguous option %s%s (matches --%s and --%s)",
+ long_prefix, bsdunzip->getopt_word, match->name, match2->name);
+ return ('?');
+ }
+
+ /* We've found a unique match; does it need an argument? */
+ if (match->required) {
+ /* Argument required: get next word if necessary. */
+ if (bsdunzip->argument == NULL) {
+ bsdunzip->argument = *bsdunzip->argv;
+ if (bsdunzip->argument == NULL) {
+ lafe_warnc(0,
+ "Option %s%s requires an argument",
+ long_prefix, match->name);
+ return ('?');
+ }
+ ++bsdunzip->argv;
+ --bsdunzip->argc;
+ bsdunzip_optind++;
+ }
+ } else {
+ /* Argument forbidden: fail if there is one. */
+ if (bsdunzip->argument != NULL) {
+ lafe_warnc(0,
+ "Option %s%s does not allow an argument",
+ long_prefix, match->name);
+ return ('?');
+ }
+ }
+ return (match->equivalent);
+ }
+
+ return (opt);
+}
diff --git a/contrib/libarchive/unzip/la_getline.c b/contrib/libarchive/unzip/la_getline.c
new file mode 100644
index 000000000000..79a6bc010214
--- /dev/null
+++ b/contrib/libarchive/unzip/la_getline.c
@@ -0,0 +1,99 @@
+/* $NetBSD: getline.c,v 1.2 2014/09/16 17:23:50 christos Exp $ */
+
+/*-
+ * 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"
+#ifndef HAVE_GETLINE
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STDIO_H
+#include <stdio.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+static ssize_t
+la_getdelim(char **buf, size_t *bufsiz, int delimiter, FILE *fp)
+{
+ char *ptr, *eptr;
+
+
+ if (*buf == NULL || *bufsiz == 0) {
+ *bufsiz = BUFSIZ;
+ if ((*buf = malloc(*bufsiz)) == NULL)
+ return -1;
+ }
+
+ for (ptr = *buf, eptr = *buf + *bufsiz;;) {
+ int c = fgetc(fp);
+ if (c == -1) {
+ if (feof(fp)) {
+ ssize_t diff = (ssize_t)(ptr - *buf);
+ if (diff != 0) {
+ *ptr = '\0';
+ return diff;
+ }
+ }
+ return -1;
+ }
+ *ptr++ = c;
+ if (c == delimiter) {
+ *ptr = '\0';
+ return ptr - *buf;
+ }
+ if (ptr + 2 >= eptr) {
+ char *nbuf;
+ size_t nbufsiz = *bufsiz * 2;
+ ssize_t d = ptr - *buf;
+ if ((nbuf = realloc(*buf, nbufsiz)) == NULL)
+ return -1;
+ *buf = nbuf;
+ *bufsiz = nbufsiz;
+ eptr = nbuf + nbufsiz;
+ ptr = nbuf + d;
+ }
+ }
+}
+
+ssize_t
+getline(char **buf, size_t *bufsiz, FILE *fp)
+{
+ return la_getdelim(buf, bufsiz, '\n', fp);
+}
+#endif
diff --git a/contrib/libarchive/unzip/la_queue.h b/contrib/libarchive/unzip/la_queue.h
new file mode 100644
index 000000000000..917526531b2a
--- /dev/null
+++ b/contrib/libarchive/unzip/la_queue.h
@@ -0,0 +1,840 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ *
+ * Copyright (c) 1991, 1993
+ * The Regents of the University of California. All rights reserved.
+ */
+
+#ifndef _SYS_QUEUE_H_
+#define _SYS_QUEUE_H_
+
+/*
+ * This file defines four types of data structures: singly-linked lists,
+ * singly-linked tail queues, lists and tail queues.
+ *
+ * A singly-linked list is headed by a single forward pointer. The elements
+ * are singly linked for minimum space and pointer manipulation overhead at
+ * the expense of O(n) removal for arbitrary elements. New elements can be
+ * added to the list after an existing element or at the head of the list.
+ * Elements being removed from the head of the list should use the explicit
+ * macro for this purpose for optimum efficiency. A singly-linked list may
+ * only be traversed in the forward direction. Singly-linked lists are ideal
+ * for applications with large datasets and few or no removals or for
+ * implementing a LIFO queue.
+ *
+ * A singly-linked tail queue is headed by a pair of pointers, one to the
+ * head of the list and the other to the tail of the list. The elements are
+ * singly linked for minimum space and pointer manipulation overhead at the
+ * expense of O(n) removal for arbitrary elements. New elements can be added
+ * to the list after an existing element, at the head of the list, or at the
+ * end of the list. Elements being removed from the head of the tail queue
+ * should use the explicit macro for this purpose for optimum efficiency.
+ * A singly-linked tail queue may only be traversed in the forward direction.
+ * Singly-linked tail queues are ideal for applications with large datasets
+ * and few or no removals or for implementing a FIFO queue.
+ *
+ * A list is headed by a single forward pointer (or an array of forward
+ * pointers for a hash table header). The elements are doubly linked
+ * so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before
+ * or after an existing element or at the head of the list. A list
+ * may be traversed in either direction.
+ *
+ * A tail queue is headed by a pair of pointers, one to the head of the
+ * list and the other to the tail of the list. The elements are doubly
+ * linked so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before or
+ * after an existing element, at the head of the list, or at the end of
+ * the list. A tail queue may be traversed in either direction.
+ *
+ * For details on the use of these macros, see the queue(3) manual page.
+ *
+ * Below is a summary of implemented functions where:
+ * + means the macro is available
+ * - means the macro is not available
+ * s means the macro is available but is slow (runs in O(n) time)
+ *
+ * SLIST LIST STAILQ TAILQ
+ * _HEAD + + + +
+ * _CLASS_HEAD + + + +
+ * _HEAD_INITIALIZER + + + +
+ * _ENTRY + + + +
+ * _CLASS_ENTRY + + + +
+ * _INIT + + + +
+ * _EMPTY + + + +
+ * _FIRST + + + +
+ * _NEXT + + + +
+ * _PREV - + - +
+ * _LAST - - + +
+ * _LAST_FAST - - - +
+ * _FOREACH + + + +
+ * _FOREACH_FROM + + + +
+ * _FOREACH_SAFE + + + +
+ * _FOREACH_FROM_SAFE + + + +
+ * _FOREACH_REVERSE - - - +
+ * _FOREACH_REVERSE_FROM - - - +
+ * _FOREACH_REVERSE_SAFE - - - +
+ * _FOREACH_REVERSE_FROM_SAFE - - - +
+ * _INSERT_HEAD + + + +
+ * _INSERT_BEFORE - + - +
+ * _INSERT_AFTER + + + +
+ * _INSERT_TAIL - - + +
+ * _CONCAT s s + +
+ * _REMOVE_AFTER + - + -
+ * _REMOVE_HEAD + - + -
+ * _REMOVE s + s +
+ * _SWAP + + + +
+ */
+#ifdef QUEUE_MACRO_DEBUG
+#warn Use QUEUE_MACRO_DEBUG_TRACE and/or QUEUE_MACRO_DEBUG_TRASH
+#define QUEUE_MACRO_DEBUG_TRACE
+#define QUEUE_MACRO_DEBUG_TRASH
+#endif
+
+#ifdef QUEUE_MACRO_DEBUG_TRACE
+/* Store the last 2 places the queue element or head was altered */
+struct qm_trace {
+ unsigned long lastline;
+ unsigned long prevline;
+ const char *lastfile;
+ const char *prevfile;
+};
+
+#define TRACEBUF struct qm_trace trace;
+#define TRACEBUF_INITIALIZER { __LINE__, 0, __FILE__, NULL } ,
+
+#define QMD_TRACE_HEAD(head) do { \
+ (head)->trace.prevline = (head)->trace.lastline; \
+ (head)->trace.prevfile = (head)->trace.lastfile; \
+ (head)->trace.lastline = __LINE__; \
+ (head)->trace.lastfile = __FILE__; \
+} while (0)
+
+#define QMD_TRACE_ELEM(elem) do { \
+ (elem)->trace.prevline = (elem)->trace.lastline; \
+ (elem)->trace.prevfile = (elem)->trace.lastfile; \
+ (elem)->trace.lastline = __LINE__; \
+ (elem)->trace.lastfile = __FILE__; \
+} while (0)
+
+#else /* !QUEUE_MACRO_DEBUG_TRACE */
+#define QMD_TRACE_ELEM(elem)
+#define QMD_TRACE_HEAD(head)
+#define TRACEBUF
+#define TRACEBUF_INITIALIZER
+#endif /* QUEUE_MACRO_DEBUG_TRACE */
+
+#ifdef QUEUE_MACRO_DEBUG_TRASH
+#define QMD_SAVELINK(name, link) void **name = (void *)&(link)
+#define TRASHIT(x) do {(x) = (void *)-1;} while (0)
+#define QMD_IS_TRASHED(x) ((x) == (void *)(intptr_t)-1)
+#else /* !QUEUE_MACRO_DEBUG_TRASH */
+#define QMD_SAVELINK(name, link)
+#define TRASHIT(x)
+#define QMD_IS_TRASHED(x) 0
+#endif /* QUEUE_MACRO_DEBUG_TRASH */
+
+#ifdef __cplusplus
+/*
+ * In C++ there can be structure lists and class lists:
+ */
+#define QUEUE_TYPEOF(type) type
+#else
+#define QUEUE_TYPEOF(type) struct type
+#endif
+
+/*
+ * Singly-linked List declarations.
+ */
+#define SLIST_HEAD(name, type) \
+struct name { \
+ struct type *slh_first; /* first element */ \
+}
+
+#define SLIST_CLASS_HEAD(name, type) \
+struct name { \
+ class type *slh_first; /* first element */ \
+}
+
+#define SLIST_HEAD_INITIALIZER(head) \
+ { NULL }
+
+#define SLIST_ENTRY(type) \
+struct { \
+ struct type *sle_next; /* next element */ \
+}
+
+#define SLIST_CLASS_ENTRY(type) \
+struct { \
+ class type *sle_next; /* next element */ \
+}
+
+/*
+ * Singly-linked List functions.
+ */
+#if (defined(_KERNEL) && defined(INVARIANTS))
+#define QMD_SLIST_CHECK_PREVPTR(prevp, elm) do { \
+ if (*(prevp) != (elm)) \
+ panic("Bad prevptr *(%p) == %p != %p", \
+ (prevp), *(prevp), (elm)); \
+} while (0)
+#else
+#define QMD_SLIST_CHECK_PREVPTR(prevp, elm)
+#endif
+
+#define SLIST_CONCAT(head1, head2, type, field) do { \
+ QUEUE_TYPEOF(type) *curelm = SLIST_FIRST(head1); \
+ if (curelm == NULL) { \
+ if ((SLIST_FIRST(head1) = SLIST_FIRST(head2)) != NULL) \
+ SLIST_INIT(head2); \
+ } else if (SLIST_FIRST(head2) != NULL) { \
+ while (SLIST_NEXT(curelm, field) != NULL) \
+ curelm = SLIST_NEXT(curelm, field); \
+ SLIST_NEXT(curelm, field) = SLIST_FIRST(head2); \
+ SLIST_INIT(head2); \
+ } \
+} while (0)
+
+#define SLIST_EMPTY(head) ((head)->slh_first == NULL)
+
+#define SLIST_FIRST(head) ((head)->slh_first)
+
+#define SLIST_FOREACH(var, head, field) \
+ for ((var) = SLIST_FIRST((head)); \
+ (var); \
+ (var) = SLIST_NEXT((var), field))
+
+#define SLIST_FOREACH_FROM(var, head, field) \
+ for ((var) = ((var) ? (var) : SLIST_FIRST((head))); \
+ (var); \
+ (var) = SLIST_NEXT((var), field))
+
+#define SLIST_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = SLIST_FIRST((head)); \
+ (var) && ((tvar) = SLIST_NEXT((var), field), 1); \
+ (var) = (tvar))
+
+#define SLIST_FOREACH_FROM_SAFE(var, head, field, tvar) \
+ for ((var) = ((var) ? (var) : SLIST_FIRST((head))); \
+ (var) && ((tvar) = SLIST_NEXT((var), field), 1); \
+ (var) = (tvar))
+
+#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \
+ for ((varp) = &SLIST_FIRST((head)); \
+ ((var) = *(varp)) != NULL; \
+ (varp) = &SLIST_NEXT((var), field))
+
+#define SLIST_INIT(head) do { \
+ SLIST_FIRST((head)) = NULL; \
+} while (0)
+
+#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \
+ SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field); \
+ SLIST_NEXT((slistelm), field) = (elm); \
+} while (0)
+
+#define SLIST_INSERT_HEAD(head, elm, field) do { \
+ SLIST_NEXT((elm), field) = SLIST_FIRST((head)); \
+ SLIST_FIRST((head)) = (elm); \
+} while (0)
+
+#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)
+
+#define SLIST_REMOVE(head, elm, type, field) do { \
+ QMD_SAVELINK(oldnext, (elm)->field.sle_next); \
+ if (SLIST_FIRST((head)) == (elm)) { \
+ SLIST_REMOVE_HEAD((head), field); \
+ } \
+ else { \
+ QUEUE_TYPEOF(type) *curelm = SLIST_FIRST(head); \
+ while (SLIST_NEXT(curelm, field) != (elm)) \
+ curelm = SLIST_NEXT(curelm, field); \
+ SLIST_REMOVE_AFTER(curelm, field); \
+ } \
+ TRASHIT(*oldnext); \
+} while (0)
+
+#define SLIST_REMOVE_AFTER(elm, field) do { \
+ SLIST_NEXT(elm, field) = \
+ SLIST_NEXT(SLIST_NEXT(elm, field), field); \
+} while (0)
+
+#define SLIST_REMOVE_HEAD(head, field) do { \
+ SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \
+} while (0)
+
+#define SLIST_REMOVE_PREVPTR(prevp, elm, field) do { \
+ QMD_SLIST_CHECK_PREVPTR(prevp, elm); \
+ *(prevp) = SLIST_NEXT(elm, field); \
+ TRASHIT((elm)->field.sle_next); \
+} while (0)
+
+#define SLIST_SWAP(head1, head2, type) do { \
+ QUEUE_TYPEOF(type) *swap_first = SLIST_FIRST(head1); \
+ SLIST_FIRST(head1) = SLIST_FIRST(head2); \
+ SLIST_FIRST(head2) = swap_first; \
+} while (0)
+
+/*
+ * Singly-linked Tail queue declarations.
+ */
+#define STAILQ_HEAD(name, type) \
+struct name { \
+ struct type *stqh_first;/* first element */ \
+ struct type **stqh_last;/* addr of last next element */ \
+}
+
+#define STAILQ_CLASS_HEAD(name, type) \
+struct name { \
+ class type *stqh_first; /* first element */ \
+ class type **stqh_last; /* addr of last next element */ \
+}
+
+#define STAILQ_HEAD_INITIALIZER(head) \
+ { NULL, &(head).stqh_first }
+
+#define STAILQ_ENTRY(type) \
+struct { \
+ struct type *stqe_next; /* next element */ \
+}
+
+#define STAILQ_CLASS_ENTRY(type) \
+struct { \
+ class type *stqe_next; /* next element */ \
+}
+
+/*
+ * Singly-linked Tail queue functions.
+ */
+#define STAILQ_CONCAT(head1, head2) do { \
+ if (!STAILQ_EMPTY((head2))) { \
+ *(head1)->stqh_last = (head2)->stqh_first; \
+ (head1)->stqh_last = (head2)->stqh_last; \
+ STAILQ_INIT((head2)); \
+ } \
+} while (0)
+
+#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL)
+
+#define STAILQ_FIRST(head) ((head)->stqh_first)
+
+#define STAILQ_FOREACH(var, head, field) \
+ for((var) = STAILQ_FIRST((head)); \
+ (var); \
+ (var) = STAILQ_NEXT((var), field))
+
+#define STAILQ_FOREACH_FROM(var, head, field) \
+ for ((var) = ((var) ? (var) : STAILQ_FIRST((head))); \
+ (var); \
+ (var) = STAILQ_NEXT((var), field))
+
+#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = STAILQ_FIRST((head)); \
+ (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
+ (var) = (tvar))
+
+#define STAILQ_FOREACH_FROM_SAFE(var, head, field, tvar) \
+ for ((var) = ((var) ? (var) : STAILQ_FIRST((head))); \
+ (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
+ (var) = (tvar))
+
+#define STAILQ_INIT(head) do { \
+ STAILQ_FIRST((head)) = NULL; \
+ (head)->stqh_last = &STAILQ_FIRST((head)); \
+} while (0)
+
+#define STAILQ_INSERT_AFTER(head, tqelm, elm, field) do { \
+ if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\
+ (head)->stqh_last = &STAILQ_NEXT((elm), field); \
+ STAILQ_NEXT((tqelm), field) = (elm); \
+} while (0)
+
+#define STAILQ_INSERT_HEAD(head, elm, field) do { \
+ if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \
+ (head)->stqh_last = &STAILQ_NEXT((elm), field); \
+ STAILQ_FIRST((head)) = (elm); \
+} while (0)
+
+#define STAILQ_INSERT_TAIL(head, elm, field) do { \
+ STAILQ_NEXT((elm), field) = NULL; \
+ *(head)->stqh_last = (elm); \
+ (head)->stqh_last = &STAILQ_NEXT((elm), field); \
+} while (0)
+
+#define STAILQ_LAST(head, type, field) \
+ (STAILQ_EMPTY((head)) ? NULL : \
+ __containerof((head)->stqh_last, \
+ QUEUE_TYPEOF(type), field.stqe_next))
+
+#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next)
+
+#define STAILQ_REMOVE(head, elm, type, field) do { \
+ QMD_SAVELINK(oldnext, (elm)->field.stqe_next); \
+ if (STAILQ_FIRST((head)) == (elm)) { \
+ STAILQ_REMOVE_HEAD((head), field); \
+ } \
+ else { \
+ QUEUE_TYPEOF(type) *curelm = STAILQ_FIRST(head); \
+ while (STAILQ_NEXT(curelm, field) != (elm)) \
+ curelm = STAILQ_NEXT(curelm, field); \
+ STAILQ_REMOVE_AFTER(head, curelm, field); \
+ } \
+ TRASHIT(*oldnext); \
+} while (0)
+
+#define STAILQ_REMOVE_AFTER(head, elm, field) do { \
+ if ((STAILQ_NEXT(elm, field) = \
+ STAILQ_NEXT(STAILQ_NEXT(elm, field), field)) == NULL) \
+ (head)->stqh_last = &STAILQ_NEXT((elm), field); \
+} while (0)
+
+#define STAILQ_REMOVE_HEAD(head, field) do { \
+ if ((STAILQ_FIRST((head)) = \
+ STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \
+ (head)->stqh_last = &STAILQ_FIRST((head)); \
+} while (0)
+
+#define STAILQ_SWAP(head1, head2, type) do { \
+ QUEUE_TYPEOF(type) *swap_first = STAILQ_FIRST(head1); \
+ QUEUE_TYPEOF(type) **swap_last = (head1)->stqh_last; \
+ STAILQ_FIRST(head1) = STAILQ_FIRST(head2); \
+ (head1)->stqh_last = (head2)->stqh_last; \
+ STAILQ_FIRST(head2) = swap_first; \
+ (head2)->stqh_last = swap_last; \
+ if (STAILQ_EMPTY(head1)) \
+ (head1)->stqh_last = &STAILQ_FIRST(head1); \
+ if (STAILQ_EMPTY(head2)) \
+ (head2)->stqh_last = &STAILQ_FIRST(head2); \
+} while (0)
+
+
+/*
+ * List declarations.
+ */
+#define LIST_HEAD(name, type) \
+struct name { \
+ struct type *lh_first; /* first element */ \
+}
+
+#define LIST_CLASS_HEAD(name, type) \
+struct name { \
+ class type *lh_first; /* first element */ \
+}
+
+#define LIST_HEAD_INITIALIZER(head) \
+ { NULL }
+
+#define LIST_ENTRY(type) \
+struct { \
+ struct type *le_next; /* next element */ \
+ struct type **le_prev; /* address of previous next element */ \
+}
+
+#define LIST_CLASS_ENTRY(type) \
+struct { \
+ class type *le_next; /* next element */ \
+ class type **le_prev; /* address of previous next element */ \
+}
+
+/*
+ * List functions.
+ */
+
+#if (defined(_KERNEL) && defined(INVARIANTS))
+/*
+ * QMD_LIST_CHECK_HEAD(LIST_HEAD *head, LIST_ENTRY NAME)
+ *
+ * If the list is non-empty, validates that the first element of the list
+ * points back at 'head.'
+ */
+#define QMD_LIST_CHECK_HEAD(head, field) do { \
+ if (LIST_FIRST((head)) != NULL && \
+ LIST_FIRST((head))->field.le_prev != \
+ &LIST_FIRST((head))) \
+ panic("Bad list head %p first->prev != head", (head)); \
+} while (0)
+
+/*
+ * QMD_LIST_CHECK_NEXT(TYPE *elm, LIST_ENTRY NAME)
+ *
+ * If an element follows 'elm' in the list, validates that the next element
+ * points back at 'elm.'
+ */
+#define QMD_LIST_CHECK_NEXT(elm, field) do { \
+ if (LIST_NEXT((elm), field) != NULL && \
+ LIST_NEXT((elm), field)->field.le_prev != \
+ &((elm)->field.le_next)) \
+ panic("Bad link elm %p next->prev != elm", (elm)); \
+} while (0)
+
+/*
+ * QMD_LIST_CHECK_PREV(TYPE *elm, LIST_ENTRY NAME)
+ *
+ * Validates that the previous element (or head of the list) points to 'elm.'
+ */
+#define QMD_LIST_CHECK_PREV(elm, field) do { \
+ if (*(elm)->field.le_prev != (elm)) \
+ panic("Bad link elm %p prev->next != elm", (elm)); \
+} while (0)
+#else
+#define QMD_LIST_CHECK_HEAD(head, field)
+#define QMD_LIST_CHECK_NEXT(elm, field)
+#define QMD_LIST_CHECK_PREV(elm, field)
+#endif /* (_KERNEL && INVARIANTS) */
+
+#define LIST_CONCAT(head1, head2, type, field) do { \
+ QUEUE_TYPEOF(type) *curelm = LIST_FIRST(head1); \
+ if (curelm == NULL) { \
+ if ((LIST_FIRST(head1) = LIST_FIRST(head2)) != NULL) { \
+ LIST_FIRST(head2)->field.le_prev = \
+ &LIST_FIRST((head1)); \
+ LIST_INIT(head2); \
+ } \
+ } else if (LIST_FIRST(head2) != NULL) { \
+ while (LIST_NEXT(curelm, field) != NULL) \
+ curelm = LIST_NEXT(curelm, field); \
+ LIST_NEXT(curelm, field) = LIST_FIRST(head2); \
+ LIST_FIRST(head2)->field.le_prev = &LIST_NEXT(curelm, field); \
+ LIST_INIT(head2); \
+ } \
+} while (0)
+
+#define LIST_EMPTY(head) ((head)->lh_first == NULL)
+
+#define LIST_FIRST(head) ((head)->lh_first)
+
+#define LIST_FOREACH(var, head, field) \
+ for ((var) = LIST_FIRST((head)); \
+ (var); \
+ (var) = LIST_NEXT((var), field))
+
+#define LIST_FOREACH_FROM(var, head, field) \
+ for ((var) = ((var) ? (var) : LIST_FIRST((head))); \
+ (var); \
+ (var) = LIST_NEXT((var), field))
+
+#define LIST_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = LIST_FIRST((head)); \
+ (var) && ((tvar) = LIST_NEXT((var), field), 1); \
+ (var) = (tvar))
+
+#define LIST_FOREACH_FROM_SAFE(var, head, field, tvar) \
+ for ((var) = ((var) ? (var) : LIST_FIRST((head))); \
+ (var) && ((tvar) = LIST_NEXT((var), field), 1); \
+ (var) = (tvar))
+
+#define LIST_INIT(head) do { \
+ LIST_FIRST((head)) = NULL; \
+} while (0)
+
+#define LIST_INSERT_AFTER(listelm, elm, field) do { \
+ QMD_LIST_CHECK_NEXT(listelm, field); \
+ if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\
+ LIST_NEXT((listelm), field)->field.le_prev = \
+ &LIST_NEXT((elm), field); \
+ LIST_NEXT((listelm), field) = (elm); \
+ (elm)->field.le_prev = &LIST_NEXT((listelm), field); \
+} while (0)
+
+#define LIST_INSERT_BEFORE(listelm, elm, field) do { \
+ QMD_LIST_CHECK_PREV(listelm, field); \
+ (elm)->field.le_prev = (listelm)->field.le_prev; \
+ LIST_NEXT((elm), field) = (listelm); \
+ *(listelm)->field.le_prev = (elm); \
+ (listelm)->field.le_prev = &LIST_NEXT((elm), field); \
+} while (0)
+
+#define LIST_INSERT_HEAD(head, elm, field) do { \
+ QMD_LIST_CHECK_HEAD((head), field); \
+ if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL) \
+ LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\
+ LIST_FIRST((head)) = (elm); \
+ (elm)->field.le_prev = &LIST_FIRST((head)); \
+} while (0)
+
+#define LIST_NEXT(elm, field) ((elm)->field.le_next)
+
+#define LIST_PREV(elm, head, type, field) \
+ ((elm)->field.le_prev == &LIST_FIRST((head)) ? NULL : \
+ __containerof((elm)->field.le_prev, \
+ QUEUE_TYPEOF(type), field.le_next))
+
+#define LIST_REMOVE(elm, field) do { \
+ QMD_SAVELINK(oldnext, (elm)->field.le_next); \
+ QMD_SAVELINK(oldprev, (elm)->field.le_prev); \
+ QMD_LIST_CHECK_NEXT(elm, field); \
+ QMD_LIST_CHECK_PREV(elm, field); \
+ if (LIST_NEXT((elm), field) != NULL) \
+ LIST_NEXT((elm), field)->field.le_prev = \
+ (elm)->field.le_prev; \
+ *(elm)->field.le_prev = LIST_NEXT((elm), field); \
+ TRASHIT(*oldnext); \
+ TRASHIT(*oldprev); \
+} while (0)
+
+#define LIST_SWAP(head1, head2, type, field) do { \
+ QUEUE_TYPEOF(type) *swap_tmp = LIST_FIRST(head1); \
+ LIST_FIRST((head1)) = LIST_FIRST((head2)); \
+ LIST_FIRST((head2)) = swap_tmp; \
+ if ((swap_tmp = LIST_FIRST((head1))) != NULL) \
+ swap_tmp->field.le_prev = &LIST_FIRST((head1)); \
+ if ((swap_tmp = LIST_FIRST((head2))) != NULL) \
+ swap_tmp->field.le_prev = &LIST_FIRST((head2)); \
+} while (0)
+
+/*
+ * Tail queue declarations.
+ */
+#define TAILQ_HEAD(name, type) \
+struct name { \
+ struct type *tqh_first; /* first element */ \
+ struct type **tqh_last; /* addr of last next element */ \
+ TRACEBUF \
+}
+
+#define TAILQ_CLASS_HEAD(name, type) \
+struct name { \
+ class type *tqh_first; /* first element */ \
+ class type **tqh_last; /* addr of last next element */ \
+ TRACEBUF \
+}
+
+#define TAILQ_HEAD_INITIALIZER(head) \
+ { NULL, &(head).tqh_first, TRACEBUF_INITIALIZER }
+
+#define TAILQ_ENTRY(type) \
+struct { \
+ struct type *tqe_next; /* next element */ \
+ struct type **tqe_prev; /* address of previous next element */ \
+ TRACEBUF \
+}
+
+#define TAILQ_CLASS_ENTRY(type) \
+struct { \
+ class type *tqe_next; /* next element */ \
+ class type **tqe_prev; /* address of previous next element */ \
+ TRACEBUF \
+}
+
+/*
+ * Tail queue functions.
+ */
+#if (defined(_KERNEL) && defined(INVARIANTS))
+/*
+ * QMD_TAILQ_CHECK_HEAD(TAILQ_HEAD *head, TAILQ_ENTRY NAME)
+ *
+ * If the tailq is non-empty, validates that the first element of the tailq
+ * points back at 'head.'
+ */
+#define QMD_TAILQ_CHECK_HEAD(head, field) do { \
+ if (!TAILQ_EMPTY(head) && \
+ TAILQ_FIRST((head))->field.tqe_prev != \
+ &TAILQ_FIRST((head))) \
+ panic("Bad tailq head %p first->prev != head", (head)); \
+} while (0)
+
+/*
+ * QMD_TAILQ_CHECK_TAIL(TAILQ_HEAD *head, TAILQ_ENTRY NAME)
+ *
+ * Validates that the tail of the tailq is a pointer to pointer to NULL.
+ */
+#define QMD_TAILQ_CHECK_TAIL(head, field) do { \
+ if (*(head)->tqh_last != NULL) \
+ panic("Bad tailq NEXT(%p->tqh_last) != NULL", (head)); \
+} while (0)
+
+/*
+ * QMD_TAILQ_CHECK_NEXT(TYPE *elm, TAILQ_ENTRY NAME)
+ *
+ * If an element follows 'elm' in the tailq, validates that the next element
+ * points back at 'elm.'
+ */
+#define QMD_TAILQ_CHECK_NEXT(elm, field) do { \
+ if (TAILQ_NEXT((elm), field) != NULL && \
+ TAILQ_NEXT((elm), field)->field.tqe_prev != \
+ &((elm)->field.tqe_next)) \
+ panic("Bad link elm %p next->prev != elm", (elm)); \
+} while (0)
+
+/*
+ * QMD_TAILQ_CHECK_PREV(TYPE *elm, TAILQ_ENTRY NAME)
+ *
+ * Validates that the previous element (or head of the tailq) points to 'elm.'
+ */
+#define QMD_TAILQ_CHECK_PREV(elm, field) do { \
+ if (*(elm)->field.tqe_prev != (elm)) \
+ panic("Bad link elm %p prev->next != elm", (elm)); \
+} while (0)
+#else
+#define QMD_TAILQ_CHECK_HEAD(head, field)
+#define QMD_TAILQ_CHECK_TAIL(head, headname)
+#define QMD_TAILQ_CHECK_NEXT(elm, field)
+#define QMD_TAILQ_CHECK_PREV(elm, field)
+#endif /* (_KERNEL && INVARIANTS) */
+
+#define TAILQ_CONCAT(head1, head2, field) do { \
+ if (!TAILQ_EMPTY(head2)) { \
+ *(head1)->tqh_last = (head2)->tqh_first; \
+ (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
+ (head1)->tqh_last = (head2)->tqh_last; \
+ TAILQ_INIT((head2)); \
+ QMD_TRACE_HEAD(head1); \
+ QMD_TRACE_HEAD(head2); \
+ } \
+} while (0)
+
+#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL)
+
+#define TAILQ_FIRST(head) ((head)->tqh_first)
+
+#define TAILQ_FOREACH(var, head, field) \
+ for ((var) = TAILQ_FIRST((head)); \
+ (var); \
+ (var) = TAILQ_NEXT((var), field))
+
+#define TAILQ_FOREACH_FROM(var, head, field) \
+ for ((var) = ((var) ? (var) : TAILQ_FIRST((head))); \
+ (var); \
+ (var) = TAILQ_NEXT((var), field))
+
+#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = TAILQ_FIRST((head)); \
+ (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
+ (var) = (tvar))
+
+#define TAILQ_FOREACH_FROM_SAFE(var, head, field, tvar) \
+ for ((var) = ((var) ? (var) : TAILQ_FIRST((head))); \
+ (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
+ (var) = (tvar))
+
+#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \
+ for ((var) = TAILQ_LAST((head), headname); \
+ (var); \
+ (var) = TAILQ_PREV((var), headname, field))
+
+#define TAILQ_FOREACH_REVERSE_FROM(var, head, headname, field) \
+ for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname)); \
+ (var); \
+ (var) = TAILQ_PREV((var), headname, field))
+
+#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \
+ for ((var) = TAILQ_LAST((head), headname); \
+ (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \
+ (var) = (tvar))
+
+#define TAILQ_FOREACH_REVERSE_FROM_SAFE(var, head, headname, field, tvar) \
+ for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname)); \
+ (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \
+ (var) = (tvar))
+
+#define TAILQ_INIT(head) do { \
+ TAILQ_FIRST((head)) = NULL; \
+ (head)->tqh_last = &TAILQ_FIRST((head)); \
+ QMD_TRACE_HEAD(head); \
+} while (0)
+
+#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
+ QMD_TAILQ_CHECK_NEXT(listelm, field); \
+ if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\
+ TAILQ_NEXT((elm), field)->field.tqe_prev = \
+ &TAILQ_NEXT((elm), field); \
+ else { \
+ (head)->tqh_last = &TAILQ_NEXT((elm), field); \
+ QMD_TRACE_HEAD(head); \
+ } \
+ TAILQ_NEXT((listelm), field) = (elm); \
+ (elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field); \
+ QMD_TRACE_ELEM(&(elm)->field); \
+ QMD_TRACE_ELEM(&(listelm)->field); \
+} while (0)
+
+#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \
+ QMD_TAILQ_CHECK_PREV(listelm, field); \
+ (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \
+ TAILQ_NEXT((elm), field) = (listelm); \
+ *(listelm)->field.tqe_prev = (elm); \
+ (listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field); \
+ QMD_TRACE_ELEM(&(elm)->field); \
+ QMD_TRACE_ELEM(&(listelm)->field); \
+} while (0)
+
+#define TAILQ_INSERT_HEAD(head, elm, field) do { \
+ QMD_TAILQ_CHECK_HEAD(head, field); \
+ if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL) \
+ TAILQ_FIRST((head))->field.tqe_prev = \
+ &TAILQ_NEXT((elm), field); \
+ else \
+ (head)->tqh_last = &TAILQ_NEXT((elm), field); \
+ TAILQ_FIRST((head)) = (elm); \
+ (elm)->field.tqe_prev = &TAILQ_FIRST((head)); \
+ QMD_TRACE_HEAD(head); \
+ QMD_TRACE_ELEM(&(elm)->field); \
+} while (0)
+
+#define TAILQ_INSERT_TAIL(head, elm, field) do { \
+ QMD_TAILQ_CHECK_TAIL(head, field); \
+ TAILQ_NEXT((elm), field) = NULL; \
+ (elm)->field.tqe_prev = (head)->tqh_last; \
+ *(head)->tqh_last = (elm); \
+ (head)->tqh_last = &TAILQ_NEXT((elm), field); \
+ QMD_TRACE_HEAD(head); \
+ QMD_TRACE_ELEM(&(elm)->field); \
+} while (0)
+
+#define TAILQ_LAST(head, headname) \
+ (*(((struct headname *)((head)->tqh_last))->tqh_last))
+
+/*
+ * The FAST function is fast in that it causes no data access other
+ * then the access to the head. The standard LAST function above
+ * will cause a data access of both the element you want and
+ * the previous element. FAST is very useful for instances when
+ * you may want to prefetch the last data element.
+ */
+#define TAILQ_LAST_FAST(head, type, field) \
+ (TAILQ_EMPTY(head) ? NULL : __containerof((head)->tqh_last, QUEUE_TYPEOF(type), field.tqe_next))
+
+#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
+
+#define TAILQ_PREV(elm, headname, field) \
+ (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
+
+#define TAILQ_PREV_FAST(elm, head, type, field) \
+ ((elm)->field.tqe_prev == &(head)->tqh_first ? NULL : \
+ __containerof((elm)->field.tqe_prev, QUEUE_TYPEOF(type), field.tqe_next))
+
+#define TAILQ_REMOVE(head, elm, field) do { \
+ QMD_SAVELINK(oldnext, (elm)->field.tqe_next); \
+ QMD_SAVELINK(oldprev, (elm)->field.tqe_prev); \
+ QMD_TAILQ_CHECK_NEXT(elm, field); \
+ QMD_TAILQ_CHECK_PREV(elm, field); \
+ if ((TAILQ_NEXT((elm), field)) != NULL) \
+ TAILQ_NEXT((elm), field)->field.tqe_prev = \
+ (elm)->field.tqe_prev; \
+ else { \
+ (head)->tqh_last = (elm)->field.tqe_prev; \
+ QMD_TRACE_HEAD(head); \
+ } \
+ *(elm)->field.tqe_prev = TAILQ_NEXT((elm), field); \
+ TRASHIT(*oldnext); \
+ TRASHIT(*oldprev); \
+ QMD_TRACE_ELEM(&(elm)->field); \
+} while (0)
+
+#define TAILQ_SWAP(head1, head2, type, field) do { \
+ QUEUE_TYPEOF(type) *swap_first = (head1)->tqh_first; \
+ QUEUE_TYPEOF(type) **swap_last = (head1)->tqh_last; \
+ (head1)->tqh_first = (head2)->tqh_first; \
+ (head1)->tqh_last = (head2)->tqh_last; \
+ (head2)->tqh_first = swap_first; \
+ (head2)->tqh_last = swap_last; \
+ if ((swap_first = (head1)->tqh_first) != NULL) \
+ swap_first->field.tqe_prev = &(head1)->tqh_first; \
+ else \
+ (head1)->tqh_last = &(head1)->tqh_first; \
+ if ((swap_first = (head2)->tqh_first) != NULL) \
+ swap_first->field.tqe_prev = &(head2)->tqh_first; \
+ else \
+ (head2)->tqh_last = &(head2)->tqh_first; \
+} while (0)
+
+#endif /* !_SYS_QUEUE_H_ */
diff --git a/contrib/libarchive/unzip/test/test.h b/contrib/libarchive/unzip/test/test.h
new file mode 100644
index 000000000000..822c3f08133f
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test.h
@@ -0,0 +1,38 @@
+/*
+ * 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. */
+
+#define KNOWNREF "test_basic.zip.uu"
+#define ENVBASE "BSDUNZIP" /* Prefix for environment variables. */
+#define PROGRAM "bsdunzip" /* Name of program being tested. */
+#define PROGRAM_ALIAS "unzip" /* Generic alias for program */
+#undef LIBRARY /* Not testing a library. */
+#undef EXTRA_DUMP /* How to dump extra data */
+#undef EXTRA_ERRNO /* How to dump errno */
+/* How to generate extra version info. */
+#define EXTRA_VERSION (systemf("%s --version", testprog) ? "" : "")
+
+#include "test_common.h"
diff --git a/contrib/libarchive/unzip/test/test_0.c b/contrib/libarchive/unzip/test/test_0.c
new file mode 100644
index 000000000000..41279d388b1f
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_0.c
@@ -0,0 +1,58 @@
+/*-
+ * 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"
+
+/*
+ * This first test does basic sanity checks on the environment. For
+ * most of these, we just exit on failure.
+ */
+#if !defined(_WIN32) || defined(__CYGWIN__)
+#define DEV_NULL "/dev/null"
+#else
+#define DEV_NULL "NUL"
+#endif
+
+DEFINE_TEST(test_0)
+{
+ struct stat st;
+
+ failure("File %s does not exist?!", testprog);
+ if (!assertEqualInt(0, stat(testprogfile, &st))) {
+ fprintf(stderr,
+ "\nFile %s does not exist; aborting test.\n\n",
+ testprog);
+ exit(1);
+ }
+
+ failure("%s is not executable?!", testprog);
+ if (!assert((st.st_mode & 0111) != 0)) {
+ fprintf(stderr,
+ "\nFile %s not executable; aborting test.\n\n",
+ testprog);
+ exit(1);
+ }
+
+ /* TODO: Ensure that our reference files are available. */
+}
diff --git a/contrib/libarchive/unzip/test/test_C.c b/contrib/libarchive/unzip/test/test_C.c
new file mode 100644
index 000000000000..fc11b970c2f3
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_C.c
@@ -0,0 +1,41 @@
+/*
+ * 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 C arg - match case-insensitive */
+DEFINE_TEST(test_C)
+{
+ const char *reffile = "test_basic.zip";
+ int r;
+
+ extract_reference_file(reffile);
+ r = systemf("%s -C %s test_basic/caps >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertNonEmptyFile("test.out");
+ assertEmptyFile("test.err");
+
+ assertTextFileContents("contents CAPS\n", "test_basic/CAPS");
+}
diff --git a/contrib/libarchive/unzip/test/test_I.c b/contrib/libarchive/unzip/test/test_I.c
new file mode 100644
index 000000000000..5d31ce8d1611
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_I.c
@@ -0,0 +1,54 @@
+/*
+ * 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"
+
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
+
+/* Test I arg - file name encoding */
+DEFINE_TEST(test_I)
+{
+ const char *reffile = "test_I.zip";
+ int r;
+
+#if HAVE_SETLOCALE
+ if (NULL == setlocale(LC_ALL, "en_US.UTF-8")) {
+ skipping("en_US.UTF-8 locale not available on this system.");
+ return;
+ }
+#else
+ skipping("setlocale() not available on this system.");
+#endif
+
+ extract_reference_file(reffile);
+ r = systemf("%s -I UTF-8 %s >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertNonEmptyFile("test.out");
+ assertEmptyFile("test.err");
+
+ assertTextFileContents("Hello, World!\n", "Γειά σου Κόσμε.txt");
+}
diff --git a/contrib/libarchive/unzip/test/test_I.zip.uu b/contrib/libarchive/unzip/test/test_I.zip.uu
new file mode 100644
index 000000000000..8a1e7afa5b92
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_I.zip.uu
@@ -0,0 +1,8 @@
+begin 644 test_I.zip
+M4$L#!`H```@``&@)AU>$GNBT#@````X````>`!P`SI/.M<ZYSJP@SX/.O\^%
+M(,Z:SXS/@\Z\SK4N='AT550)``,#8G%E"6)Q975X"P`!!.@#```$Z`,``$AE
+M;&QO+"!7;W)L9"$*4$L!`AX#"@``"```:`F'5X2>Z+0.````#@```!X`&```
+M`````````*2!`````,Z3SK7.N<ZL(,^#SK_/A2#.FL^,SX/.O,ZU+G1X=%54
+L!0`#`V)Q975X"P`!!.@#```$Z`,``%!+!08``````0`!`&0```!F````````
+`
+end
diff --git a/contrib/libarchive/unzip/test/test_L.c b/contrib/libarchive/unzip/test/test_L.c
new file mode 100644
index 000000000000..4815cb2b139d
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_L.c
@@ -0,0 +1,44 @@
+/*
+ * 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 L arg - make names lowercase */
+DEFINE_TEST(test_L)
+{
+ const char *reffile = "test_basic.zip";
+ int r;
+
+ extract_reference_file(reffile);
+ r = systemf("%s -L %s >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertNonEmptyFile("test.out");
+ assertEmptyFile("test.err");
+
+ assertTextFileContents("contents a\n", "test_basic/a");
+ assertTextFileContents("contents b\n", "test_basic/b");
+ assertTextFileContents("contents c\n", "test_basic/c");
+ assertTextFileContents("contents CAPS\n", "test_basic/caps");
+}
diff --git a/contrib/libarchive/unzip/test/test_P_encryption.c b/contrib/libarchive/unzip/test/test_P_encryption.c
new file mode 100644
index 000000000000..beabbaa646ee
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_P_encryption.c
@@ -0,0 +1,41 @@
+/*
+ * 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)
+{
+ const char *reffile = "test_encrypted.zip";
+ int r;
+
+ extract_reference_file(reffile);
+ r = systemf("%s -P password %s >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertNonEmptyFile("test.out");
+ assertEmptyFile("test.err");
+
+ assertTextFileContents("plaintext\n", "encrypted/file.txt");
+}
diff --git a/contrib/libarchive/unzip/test/test_Z1.c b/contrib/libarchive/unzip/test/test_Z1.c
new file mode 100644
index 000000000000..58dc750030dd
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_Z1.c
@@ -0,0 +1,40 @@
+/*
+ * 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 -Z1 arg - List filenames */
+DEFINE_TEST(test_Z1)
+{
+ const char *reffile = "test_basic.zip";
+ int r;
+
+ extract_reference_file(reffile);
+ r = systemf("%s -Z1 %s >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertNonEmptyFile("test.out");
+ assertTextFileContents("test_basic/\ntest_basic/a\ntest_basic/b\ntest_basic/c\ntest_basic/CAPS\n", "test.out");
+ assertEmptyFile("test.err");
+}
diff --git a/contrib/libarchive/unzip/test/test_basic.c b/contrib/libarchive/unzip/test/test_basic.c
new file mode 100644
index 000000000000..e997755e7e57
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_basic.c
@@ -0,0 +1,44 @@
+/*
+ * 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"
+
+/* This test just does a basic zip decompression */
+DEFINE_TEST(test_basic)
+{
+ const char *reffile = "test_basic.zip";
+ int r;
+
+ extract_reference_file(reffile);
+ r = systemf("%s %s >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertNonEmptyFile("test.out");
+ assertEmptyFile("test.err");
+
+ assertTextFileContents("contents a\n", "test_basic/a");
+ assertTextFileContents("contents b\n", "test_basic/b");
+ assertTextFileContents("contents c\n", "test_basic/c");
+ assertTextFileContents("contents CAPS\n", "test_basic/CAPS");
+}
diff --git a/contrib/libarchive/unzip/test/test_basic.zip.uu b/contrib/libarchive/unzip/test/test_basic.zip.uu
new file mode 100644
index 000000000000..b55aca950327
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_basic.zip.uu
@@ -0,0 +1,25 @@
+begin 644 test_basic.zip
+M4$L#!!0``````,J0MU8````````````````+`"``=&5S=%]B87-I8R]55`T`
+M!]PX;63U.6UDW#AM9'5X"P`!!.@#```$Z`,``%!+`P04``@`"``)C;=6````
+M```````+````#``@`'1E<W1?8F%S:6,O8554#0`'PS)M9/HY;603.&UD=7@+
+M``$$Z`,```3H`P``2\[/*TG-*RE62.0"`%!+!PAY:C`$#0````L```!02P,$
+M%``(``@`#HVW5@``````````"P````P`(`!T97-T7V)A<VEC+V)55`T`!\TR
+M;63Z.6UD.SAM9'5X"P`!!.@#```$Z`,``$O.SRM)S2LI5DCB`@!02P<(NCD=
+M+PT````+````4$L#!!0`"``(`%*-MU8```````````L````,`"``=&5S=%]B
+M87-I8R]C550-``=,,VUDTSAM9,\X;61U>`L``03H`P``!.@#``!+SL\K2<TK
+M*59(Y@(`4$L'"/L(!C8-````"P```%!+`P04``@`"`#*D+=6```````````.
+M````#P`@`'1E<W1?8F%S:6,O0T%04U54#0`'W#AM9/HY;63<.&UD=7@+``$$
+MZ`,```3H`P``2\[/*TG-*RE6<'8,".8"`%!+!P@I4T'W$`````X```!02P$"
+M%`,4``````#*D+=6````````````````"P`@````````````[4$`````=&5S
+M=%]B87-I8R]55`T`!]PX;63U.6UDW#AM9'5X"P`!!.@#```$Z`,``%!+`0(4
+M`Q0`"``(``F-MU9Y:C`$#0````L````,`"````````````"D@4D```!T97-T
+M7V)A<VEC+V%55`T`!\,R;63Z.6UD$SAM9'5X"P`!!.@#```$Z`,``%!+`0(4
+M`Q0`"``(``Z-MU:Z.1TO#0````L````,`"````````````"D@;````!T97-T
+M7V)A<VEC+V)55`T`!\TR;63Z.6UD.SAM9'5X"P`!!.@#```$Z`,``%!+`0(4
+M`Q0`"``(`%*-MU;["`8V#0````L````,`"````````````"D@1<!``!T97-T
+M7V)A<VEC+V-55`T`!TPS;633.&UDSSAM9'5X"P`!!.@#```$Z`,``%!+`0(4
+M`Q0`"``(`,J0MU8I4T'W$`````X````/`"````````````"D@7X!``!T97-T
+M7V)A<VEC+T-!4%-55`T`!]PX;63Z.6UDW#AM9'5X"P`!!.@#```$Z`,``%!+
+4!08`````!0`%`,0!``#K`0``````
+`
+end
diff --git a/contrib/libarchive/unzip/test/test_d.c b/contrib/libarchive/unzip/test/test_d.c
new file mode 100644
index 000000000000..01ab9b8caaa3
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_d.c
@@ -0,0 +1,62 @@
+/*
+ * 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 d arg - extract to target dir - before zipfile argument */
+DEFINE_TEST(test_d_before_zipfile)
+{
+ const char *reffile = "test_basic.zip";
+ int r;
+
+ extract_reference_file(reffile);
+ r = systemf("%s -d foobar %s >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertNonEmptyFile("test.out");
+ assertEmptyFile("test.err");
+
+ assertTextFileContents("contents a\n", "foobar/test_basic/a");
+ assertTextFileContents("contents b\n", "foobar/test_basic/b");
+ assertTextFileContents("contents c\n", "foobar/test_basic/c");
+ assertTextFileContents("contents CAPS\n", "foobar/test_basic/CAPS");
+}
+
+/* Test d arg - extract to target dir - after zipfile argument */
+DEFINE_TEST(test_d_after_zipfile)
+{
+ const char *reffile = "test_basic.zip";
+ int r;
+
+ extract_reference_file(reffile);
+ r = systemf("%s %s -d foobar >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertNonEmptyFile("test.out");
+ assertEmptyFile("test.err");
+
+ assertTextFileContents("contents a\n", "foobar/test_basic/a");
+ assertTextFileContents("contents b\n", "foobar/test_basic/b");
+ assertTextFileContents("contents c\n", "foobar/test_basic/c");
+ assertTextFileContents("contents CAPS\n", "foobar/test_basic/CAPS");
+}
diff --git a/contrib/libarchive/unzip/test/test_doubledash.c b/contrib/libarchive/unzip/test/test_doubledash.c
new file mode 100644
index 000000000000..eb7d34e4f6cc
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_doubledash.c
@@ -0,0 +1,44 @@
+/*
+ * 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 double dash arg - swallow "--" and use next argument as file name */
+DEFINE_TEST(test_doubledash)
+{
+ const char *reffile = "test_basic.zip";
+ int r;
+
+ extract_reference_file(reffile);
+ r = systemf("%s -- %s >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertNonEmptyFile("test.out");
+ assertEmptyFile("test.err");
+
+ assertTextFileContents("contents a\n", "test_basic/a");
+ assertTextFileContents("contents b\n", "test_basic/b");
+ assertTextFileContents("contents c\n", "test_basic/c");
+ assertTextFileContents("contents CAPS\n", "test_basic/CAPS");
+}
diff --git a/contrib/libarchive/unzip/test/test_encrypted.zip.uu b/contrib/libarchive/unzip/test/test_encrypted.zip.uu
new file mode 100644
index 000000000000..6aabeb9f5786
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_encrypted.zip.uu
@@ -0,0 +1,13 @@
+begin 644 test_encrypted.zip
+M4$L#!!0``````'*1MU8````````````````*`"``96YC<GEP=&5D+U54#0`'
+M&#IM9!LZ;608.FUD=7@+``$$Z`,```3H`P``4$L#!!0`"0!C`'*1MU8`````
+M``````H````2`"L`96YC<GEP=&5D+V9I;&4N='AT550-``<8.FUD&#IM9!@Z
+M;61U>`L``03H`P``!.@#```!F0<``@!!10,(`*_-)-RYPDYFJ$Q9+L<I#-><
+M'#C?XVBR9/=H?7U\LC!A^8<6[&CO#PM02P<(`````"@````*````4$L!`A0#
+M%```````<I&W5@````````````````H`(````````````.U!`````&5N8W)Y
+M<'1E9"]55`T`!Q@Z;60;.FUD&#IM9'5X"P`!!.@#```$Z`,``%!+`0(4`Q0`
+M"0!C`'*1MU8`````*`````H````2`"L```````````"D@4@```!E;F-R>7!T
+M960O9FEL92YT>'155`T`!Q@Z;608.FUD&#IM9'5X"P`!!.@#```$Z`,```&9
+?!P`"`$%%`P@`4$L%!@`````"``(`PP```-L`````````
+`
+end
diff --git a/contrib/libarchive/unzip/test/test_glob.c b/contrib/libarchive/unzip/test/test_glob.c
new file mode 100644
index 000000000000..b334ce4bd37d
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_glob.c
@@ -0,0 +1,44 @@
+/*
+ * 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 that the glob works */
+DEFINE_TEST(test_glob)
+{
+ const char *reffile = "test_basic.zip";
+ int r;
+
+ extract_reference_file(reffile);
+ r = systemf("%s %s test_*/[ab] >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertNonEmptyFile("test.out");
+ assertEmptyFile("test.err");
+
+ assertTextFileContents("contents a\n", "test_basic/a");
+ assertTextFileContents("contents b\n", "test_basic/b");
+ assertFileNotExists("test_basic/c");
+ assertFileNotExists("test_basic/CAPS");
+}
diff --git a/contrib/libarchive/unzip/test/test_j.c b/contrib/libarchive/unzip/test/test_j.c
new file mode 100644
index 000000000000..a449e02644b5
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_j.c
@@ -0,0 +1,44 @@
+/*
+ * 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 j arg - don't make directories */
+DEFINE_TEST(test_j)
+{
+ const char *reffile = "test_basic.zip";
+ int r;
+
+ extract_reference_file(reffile);
+ r = systemf("%s -j %s >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertNonEmptyFile("test.out");
+ assertEmptyFile("test.err");
+
+ assertTextFileContents("contents a\n", "a");
+ assertTextFileContents("contents b\n", "b");
+ assertTextFileContents("contents c\n", "c");
+ assertTextFileContents("contents CAPS\n", "CAPS");
+}
diff --git a/contrib/libarchive/unzip/test/test_n.c b/contrib/libarchive/unzip/test/test_n.c
new file mode 100644
index 000000000000..4e893f04b7ae
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_n.c
@@ -0,0 +1,48 @@
+/*
+ * 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 */
+DEFINE_TEST(test_n)
+{
+ const char *reffile = "test_basic.zip";
+ int r;
+
+ assertMakeDir("test_basic", 0755);
+ assertMakeFile("test_basic/a", 0644, "orig a\n");
+ assertMakeFile("test_basic/b", 0644, "orig b\n");
+
+ extract_reference_file(reffile);
+ r = systemf("%s -n %s >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertNonEmptyFile("test.out");
+ assertEmptyFile("test.err");
+
+ assertTextFileContents("orig a\n", "test_basic/a");
+ assertTextFileContents("orig b\n", "test_basic/b");
+ assertTextFileContents("contents c\n", "test_basic/c");
+ assertTextFileContents("contents CAPS\n", "test_basic/CAPS");
+}
diff --git a/contrib/libarchive/unzip/test/test_not_exist.c b/contrib/libarchive/unzip/test/test_not_exist.c
new file mode 100644
index 000000000000..aa660dc646e5
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_not_exist.c
@@ -0,0 +1,36 @@
+/*
+ * 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 */
+DEFINE_TEST(test_not_exist)
+{
+ int r;
+ r = systemf("%s nonexist.zip >test.out 2>test.err", testprog);
+ assert(r != 0);
+ assertEmptyFile("test.out");
+ assertNonEmptyFile("test.err");
+}
diff --git a/contrib/libarchive/unzip/test/test_o.c b/contrib/libarchive/unzip/test/test_o.c
new file mode 100644
index 000000000000..af0c4128686f
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_o.c
@@ -0,0 +1,47 @@
+/*
+ * 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 */
+DEFINE_TEST(test_o)
+{
+ const char *reffile = "test_basic.zip";
+ int r;
+
+ assertMakeDir("test_basic", 0755);
+ assertMakeFile("test_basic/a", 0644, "orig a\n");
+ assertMakeFile("test_basic/b", 0644, "orig b\n");
+
+ extract_reference_file(reffile);
+ r = systemf("%s -o %s >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertEmptyFile("test.err");
+
+ assertTextFileContents("contents a\n", "test_basic/a");
+ assertTextFileContents("contents b\n", "test_basic/b");
+ assertTextFileContents("contents c\n", "test_basic/c");
+ assertTextFileContents("contents CAPS\n", "test_basic/CAPS");
+}
diff --git a/contrib/libarchive/unzip/test/test_p.c b/contrib/libarchive/unzip/test/test_p.c
new file mode 100644
index 000000000000..f34a5eae8e13
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_p.c
@@ -0,0 +1,39 @@
+/*
+ * 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 - Print to stdout */
+DEFINE_TEST(test_p)
+{
+ const char *reffile = "test_basic.zip";
+ int r;
+
+ extract_reference_file(reffile);
+ r = systemf("%s -p %s >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertTextFileContents("contents a\ncontents b\ncontents c\ncontents CAPS\n", "test.out");
+ assertEmptyFile("test.err");
+}
diff --git a/contrib/libarchive/unzip/test/test_q.c b/contrib/libarchive/unzip/test/test_q.c
new file mode 100644
index 000000000000..9a532c888366
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_q.c
@@ -0,0 +1,44 @@
+/*
+ * 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 q arg - Quiet */
+DEFINE_TEST(test_q)
+{
+ const char *reffile = "test_basic.zip";
+ int r;
+
+ extract_reference_file(reffile);
+ r = systemf("%s -q %s >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertEmptyFile("test.out");
+ assertEmptyFile("test.err");
+
+ assertTextFileContents("contents a\n", "test_basic/a");
+ assertTextFileContents("contents b\n", "test_basic/b");
+ assertTextFileContents("contents c\n", "test_basic/c");
+ assertTextFileContents("contents CAPS\n", "test_basic/CAPS");
+}
diff --git a/contrib/libarchive/unzip/test/test_singlefile.c b/contrib/libarchive/unzip/test/test_singlefile.c
new file mode 100644
index 000000000000..70c376eb3932
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_singlefile.c
@@ -0,0 +1,41 @@
+/*
+ * 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"
+
+/* Ensure single-file zips work */
+DEFINE_TEST(test_singlefile)
+{
+ const char *reffile = "test_singlefile.zip";
+ int r;
+
+ extract_reference_file(reffile);
+ r = systemf("%s %s >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertNonEmptyFile("test.out");
+ assertEmptyFile("test.err");
+
+ assertTextFileContents("hello\n", "file.txt");
+}
diff --git a/contrib/libarchive/unzip/test/test_singlefile.zip.uu b/contrib/libarchive/unzip/test/test_singlefile.zip.uu
new file mode 100644
index 000000000000..589e08f12396
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_singlefile.zip.uu
@@ -0,0 +1,8 @@
+begin 644 test_singlefile.zip
+M4$L#!!0`"``(`&"6MU8```````````8````(`"``9FEL92YT>'155`T`!U1#
+M;6140VUD5$-M9'5X"P`!!.@#```$Z`,``,M(S<G)YP(`4$L'""`P.C8(````
+M!@```%!+`0(4`Q0`"``(`&"6MU8@,#HV"`````8````(`"````````````"D
+M@0````!F:6QE+G1X=%54#0`'5$-M9%1#;6140VUD=7@+``$$Z`,```3H`P``
+64$L%!@`````!``$`5@```%X`````````
+`
+end
diff --git a/contrib/libarchive/unzip/test/test_t.c b/contrib/libarchive/unzip/test/test_t.c
new file mode 100644
index 000000000000..40d8d39e54d5
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_t.c
@@ -0,0 +1,39 @@
+/*
+ * 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 t arg - Test zip contents */
+DEFINE_TEST(test_t)
+{
+ const char *reffile = "test_basic.zip";
+ int r;
+
+ extract_reference_file(reffile);
+ r = systemf("%s -t %s >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertNonEmptyFile("test.out");
+ assertEmptyFile("test.err");
+}
diff --git a/contrib/libarchive/unzip/test/test_t_bad.c b/contrib/libarchive/unzip/test/test_t_bad.c
new file mode 100644
index 000000000000..f9afbb40dae2
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_t_bad.c
@@ -0,0 +1,39 @@
+/*
+ * 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 t arg - Test zip contents, but fail! */
+DEFINE_TEST(test_t_bad)
+{
+ const char *reffile = "test_t_bad.zip";
+ int r;
+
+ extract_reference_file(reffile);
+ r = systemf("%s -t %s >test.out 2>test.err", testprog, reffile);
+ assert(r != 0);
+ assertNonEmptyFile("test.out");
+ assertNonEmptyFile("test.err");
+}
diff --git a/contrib/libarchive/unzip/test/test_t_bad.zip.uu b/contrib/libarchive/unzip/test/test_t_bad.zip.uu
new file mode 100644
index 000000000000..ae6ad07925e6
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_t_bad.zip.uu
@@ -0,0 +1,25 @@
+begin 644 test_t_bad.zip
+M4$L#!!0``````,J0MU8````````````````+`"``=&5S=%]B87-I8R]55`T`
+M!]PX;63U.6UDW#AM9'5X"P`!!.@#```$Z`,``%!+`P04``@`"``)C;=6````
+M```````+````#``@`'1E<W1?8F%S:6,O85546``'PS)M9/HY;603.&UD=7@+
+M``$$Z`,```3H`P``2\[/*TG-*RE62.0"`%!+!PAY:C`$#0````L```!02P,$
+M%&$(``@`#HVW5@``````````"P````P`(`!T97-T7V)A<VEC+V)55`T`!\TR
+M;63Z.6UD.SAM9'5X"P`!!.@#```$Z`,``$O.SRM)S2LI5DCB`@!02P<(NCD=
+M+PT````+````4$L#!!0`"``(`%*-MU8```````````L````,`"``=&5S=%]B
+M87-I8R]C550-``=,,VUDTSAM9,\X;61U>`L``03H`P``!.@#``!+SL\K2<TK
+M*59(Y@(`4$L'"/L(!C8-````"P```%!+`P04``@`"`#*D+=6```````````.
+M````#P`@`'1E<W1?8F%S:6,O0T%04U54#0`'W#AM9/HY;63<.&UD=7@+``$$
+MZ`,```3H`P``2\[/*TG-*RE6<'8,".8"`%!+!P@I4T'W$`````X```!02P$"
+M%`,4``````#*D+=6````````````````"P`@````````````[4(`````=&5S
+M=%]B87-I8R]55`T`!]PX;63U.6UDW#AM9'5X"P`!!.@#```$Z`,``%!+`0(4
+M`Q0`"``(``F-MU9Y:C`$#0````L````,`"````````````"D@4D```!T97-T
+M7V)A<VEC+V%55`T`!\,R;63Z.6UD$SAM9'5X"P`!!.@#```$Z`,``%!+`0(4
+M`Q0`"``(``Z-MU:Z.1TO#0````L````,`"````````````"D@;````!T97-T
+M7V)A<VEC+V)55`T`!\TR;63Z.6UD.SAM9'5X"P`!!.@#```$Z`,``%!+`0(4
+M`Q0`"``(`%*-MU;["`8V#0````L````,`"````````````"D@1<!``!T97-T
+M7V)A<VEC+V-55`T`!TPS;633.&UDSSAM9'5X"P`!!.@#```$Z`,``%!+`0(4
+M`Q0`"``(`,J0MU8I4T'W$`````X````/`"````````````"D@7X!``!T97-T
+M7V)A<VEC+T-!4%-55`T`!]PX;63Z.6UDW#AM9'5X"P`!!.@#```$Z`,``%!+
+5!08`````!0`%`,0!``#K`0`````*
+`
+end
diff --git a/contrib/libarchive/unzip/test/test_version.c b/contrib/libarchive/unzip/test/test_version.c
new file mode 100644
index 000000000000..efa797982d57
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_version.c
@@ -0,0 +1,34 @@
+/*-
+ * 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"
+
+/*
+ * Test that --version option works and generates reasonable output.
+ */
+
+DEFINE_TEST(test_version)
+{
+ assertVersion(testprog, "bsdunzip");
+}
diff --git a/contrib/libarchive/unzip/test/test_x.c b/contrib/libarchive/unzip/test/test_x.c
new file mode 100644
index 000000000000..d55376849ce9
--- /dev/null
+++ b/contrib/libarchive/unzip/test/test_x.c
@@ -0,0 +1,80 @@
+/*
+ * 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 x arg with single exclude path */
+DEFINE_TEST(test_x_single)
+{
+ const char *reffile = "test_basic.zip";
+ int r;
+
+ extract_reference_file(reffile);
+ r = systemf("%s %s -x test_basic/c >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertNonEmptyFile("test.out");
+ assertEmptyFile("test.err");
+
+ assertTextFileContents("contents a\n", "test_basic/a");
+ assertTextFileContents("contents b\n", "test_basic/b");
+ assertFileNotExists("test_basic/c");
+ assertTextFileContents("contents CAPS\n", "test_basic/CAPS");
+}
+
+/* Test x arg with multiple exclude paths */
+DEFINE_TEST(test_x_multiple)
+{
+ const char *reffile = "test_basic.zip";
+ int r;
+
+ extract_reference_file(reffile);
+ r = systemf("%s %s -x test_basic/c test_basic/b >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertNonEmptyFile("test.out");
+ assertEmptyFile("test.err");
+
+ assertTextFileContents("contents a\n", "test_basic/a");
+ assertFileNotExists("test_basic/b");
+ assertFileNotExists("test_basic/c");
+ assertTextFileContents("contents CAPS\n", "test_basic/CAPS");
+}
+
+/* Test x arg with multiple exclude paths and a d arg afterwards */
+DEFINE_TEST(test_x_multiple_with_d)
+{
+ const char *reffile = "test_basic.zip";
+ int r;
+
+ extract_reference_file(reffile);
+ r = systemf("%s %s -x test_basic/c test_basic/b -d foobar >test.out 2>test.err", testprog, reffile);
+ assertEqualInt(0, r);
+ assertNonEmptyFile("test.out");
+ assertEmptyFile("test.err");
+
+ assertTextFileContents("contents a\n", "foobar/test_basic/a");
+ assertFileNotExists("foobar/test_basic/b");
+ assertFileNotExists("foobar/test_basic/c");
+ assertTextFileContents("contents CAPS\n", "foobar/test_basic/CAPS");
+}