libarchive-static 1.0.6 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/extconf.rb +2 -9
- data/ext/libarchive-0.1.1/ext/archive_read_support_compression.c +6 -6
- data/ext/libarchive-0.1.1/ext/archive_read_support_compression.o +0 -0
- data/ext/libarchive-0.1.1/ext/archive_read_support_format.o +0 -0
- data/ext/libarchive-0.1.1/ext/archive_write_open_rb_str.c +1 -1
- data/ext/libarchive-0.1.1/ext/archive_write_open_rb_str.o +0 -0
- data/ext/libarchive-0.1.1/ext/archive_write_set_compression.c +5 -5
- data/ext/libarchive-0.1.1/ext/archive_write_set_compression.o +0 -0
- data/ext/libarchive-0.1.1/ext/config.h +23 -0
- data/ext/libarchive-0.1.1/ext/config.log +230 -0
- data/ext/libarchive-0.1.1/ext/config.status +671 -0
- data/ext/libarchive-0.1.1/ext/libarchive.c +1 -1
- data/ext/libarchive-0.1.1/ext/libarchive.o +0 -0
- data/ext/libarchive-0.1.1/ext/libarchive_archive.c +7 -7
- data/ext/libarchive-0.1.1/ext/libarchive_archive.o +0 -0
- data/ext/libarchive-0.1.1/ext/libarchive_entry.c +6 -0
- data/ext/libarchive-0.1.1/ext/libarchive_entry.o +0 -0
- data/ext/libarchive-0.1.1/ext/libarchive_reader.c +6 -4
- data/ext/libarchive-0.1.1/ext/libarchive_reader.o +0 -0
- data/ext/libarchive-0.1.1/ext/libarchive_ruby.so +0 -0
- data/ext/libarchive-0.1.1/ext/libarchive_win32.h +1 -1
- data/ext/libarchive-0.1.1/ext/libarchive_writer.c +2 -2
- data/ext/libarchive-0.1.1/ext/libarchive_writer.o +0 -0
- data/ext/libarchive-3.6.2/Makefile.in +16892 -0
- data/ext/libarchive-3.6.2/build/autoconf/ax_append_compile_flags.m4 +67 -0
- data/ext/libarchive-3.6.2/build/autoconf/ax_append_flag.m4 +71 -0
- data/ext/libarchive-3.6.2/build/autoconf/ax_check_compile_flag.m4 +74 -0
- data/ext/libarchive-3.6.2/build/autoconf/ax_require_defined.m4 +37 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/build/autoconf/check_stdcall_func.m4 +0 -0
- data/ext/libarchive-3.6.2/build/autoconf/compile +348 -0
- data/ext/libarchive-3.6.2/build/autoconf/config.guess +1754 -0
- data/ext/libarchive-3.6.2/build/autoconf/config.rpath +696 -0
- data/ext/libarchive-3.6.2/build/autoconf/config.sub +1890 -0
- data/ext/libarchive-3.6.2/build/autoconf/depcomp +791 -0
- data/ext/libarchive-3.6.2/build/autoconf/iconv.m4 +271 -0
- data/ext/libarchive-3.6.2/build/autoconf/install-sh +541 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/build/autoconf/la_uid_t.m4 +0 -0
- data/ext/libarchive-3.6.2/build/autoconf/lib-ld.m4 +109 -0
- data/ext/libarchive-3.6.2/build/autoconf/lib-link.m4 +777 -0
- data/ext/libarchive-3.6.2/build/autoconf/lib-prefix.m4 +224 -0
- data/ext/libarchive-3.6.2/build/autoconf/ltmain.sh +11251 -0
- data/ext/libarchive-3.6.2/build/autoconf/m4_ax_compile_check_sizeof.m4 +115 -0
- data/ext/libarchive-3.6.2/build/autoconf/missing +215 -0
- data/ext/libarchive-3.6.2/build/autoconf/test-driver +153 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/build/pkgconfig/libarchive.pc.in +4 -1
- data/ext/libarchive-3.6.2/config.h.in +1504 -0
- data/ext/libarchive-3.6.2/configure +25558 -0
- data/ext/libarchive-3.6.2/libarchive/archive.h +1212 -0
- data/ext/libarchive-3.6.2/libarchive/archive_acl.c +2097 -0
- data/ext/libarchive-3.6.2/libarchive/archive_acl_private.h +83 -0
- data/ext/libarchive-3.6.2/libarchive/archive_blake2.h +197 -0
- data/ext/libarchive-3.6.2/libarchive/archive_blake2_impl.h +161 -0
- data/ext/libarchive-3.6.2/libarchive/archive_blake2s_ref.c +369 -0
- data/ext/libarchive-3.6.2/libarchive/archive_blake2sp_ref.c +361 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_check_magic.c +63 -22
- data/ext/libarchive-3.6.2/libarchive/archive_cmdline.c +227 -0
- data/ext/libarchive-3.6.2/libarchive/archive_cmdline_private.h +47 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_crc32.h +17 -0
- data/ext/libarchive-3.6.2/libarchive/archive_cryptor.c +534 -0
- data/ext/libarchive-3.6.2/libarchive/archive_cryptor_private.h +188 -0
- data/ext/libarchive-3.6.2/libarchive/archive_digest.c +1505 -0
- data/ext/libarchive-3.6.2/libarchive/archive_digest_private.h +416 -0
- data/ext/libarchive-3.6.2/libarchive/archive_disk_acl_darwin.c +559 -0
- data/ext/libarchive-3.6.2/libarchive/archive_disk_acl_freebsd.c +712 -0
- data/ext/libarchive-3.6.2/libarchive/archive_disk_acl_linux.c +760 -0
- data/ext/libarchive-3.6.2/libarchive/archive_disk_acl_sunos.c +824 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_endian.h +48 -15
- data/ext/libarchive-3.6.2/libarchive/archive_entry.c +2149 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry.h +305 -106
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_copy_bhfi.c +5 -4
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_copy_stat.c +9 -3
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_link_resolver.c +104 -62
- data/ext/libarchive-3.6.2/libarchive/archive_entry_locale.h +92 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_private.h +65 -49
- data/ext/libarchive-3.6.2/libarchive/archive_entry_sparse.c +156 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_stat.c +6 -6
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_strmode.c +1 -1
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_entry_xattr.c +4 -6
- data/ext/libarchive-3.6.2/libarchive/archive_getdate.c +1165 -0
- data/ext/libarchive-3.6.2/libarchive/archive_getdate.h +39 -0
- data/ext/libarchive-3.6.2/libarchive/archive_hmac.c +334 -0
- data/ext/libarchive-3.6.2/libarchive/archive_hmac_private.h +117 -0
- data/ext/libarchive-3.6.2/libarchive/archive_match.c +1875 -0
- data/ext/libarchive-3.6.2/libarchive/archive_openssl_evp_private.h +53 -0
- data/ext/libarchive-3.6.2/libarchive/archive_openssl_hmac_private.h +54 -0
- data/ext/libarchive-3.6.2/libarchive/archive_options.c +218 -0
- data/ext/libarchive-3.6.2/libarchive/archive_options_private.h +51 -0
- data/ext/libarchive-3.6.2/libarchive/archive_pack_dev.c +337 -0
- data/ext/libarchive-3.6.2/libarchive/archive_pack_dev.h +49 -0
- data/ext/libarchive-3.6.2/libarchive/archive_pathmatch.c +463 -0
- data/ext/libarchive-3.6.2/libarchive/archive_pathmatch.h +52 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_platform.h +77 -9
- data/ext/libarchive-3.6.2/libarchive/archive_platform_acl.h +55 -0
- data/ext/libarchive-3.6.2/libarchive/archive_platform_xattr.h +47 -0
- data/ext/libarchive-3.6.2/libarchive/archive_ppmd7.c +1168 -0
- data/ext/libarchive-3.6.2/libarchive/archive_ppmd7_private.h +119 -0
- data/ext/libarchive-3.6.2/libarchive/archive_ppmd8.c +1287 -0
- data/ext/libarchive-3.6.2/libarchive/archive_ppmd8_private.h +148 -0
- data/ext/libarchive-3.6.2/libarchive/archive_ppmd_private.h +151 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_private.h +74 -18
- data/ext/libarchive-3.6.2/libarchive/archive_random.c +272 -0
- data/ext/libarchive-3.6.2/libarchive/archive_random_private.h +36 -0
- data/ext/libarchive-3.6.2/libarchive/archive_rb.c +709 -0
- data/ext/libarchive-3.6.2/libarchive/archive_rb.h +113 -0
- data/ext/libarchive-3.6.2/libarchive/archive_read.c +1756 -0
- data/ext/libarchive-3.6.2/libarchive/archive_read_add_passphrase.c +190 -0
- data/ext/libarchive-3.6.2/libarchive/archive_read_append_filter.c +204 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_data_into_fd.c +64 -18
- data/ext/libarchive-3.6.2/libarchive/archive_read_disk_entry_from_file.c +1086 -0
- data/ext/libarchive-3.6.2/libarchive/archive_read_disk_posix.c +2732 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_disk_private.h +40 -4
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_disk_set_standard_lookup.c +21 -11
- data/ext/libarchive-3.6.2/libarchive/archive_read_disk_windows.c +2479 -0
- data/ext/libarchive-3.6.2/libarchive/archive_read_extract.c +60 -0
- data/ext/{libarchive-2.8.4/libarchive/archive_read_extract.c → libarchive-3.6.2/libarchive/archive_read_extract2.c} +34 -61
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_open_fd.c +70 -49
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_open_file.c +38 -23
- data/ext/libarchive-3.6.2/libarchive/archive_read_open_filename.c +586 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_open_memory.c +58 -28
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_private.h +127 -59
- data/ext/libarchive-3.6.2/libarchive/archive_read_set_format.c +117 -0
- data/ext/libarchive-3.6.2/libarchive/archive_read_set_options.c +133 -0
- data/ext/{libarchive-2.8.4/libarchive/archive_read_support_compression_all.c → libarchive-3.6.2/libarchive/archive_read_support_filter_all.c} +35 -10
- data/ext/libarchive-3.6.2/libarchive/archive_read_support_filter_by_code.c +83 -0
- data/ext/{libarchive-2.8.4/libarchive/archive_read_support_compression_bzip2.c → libarchive-3.6.2/libarchive/archive_read_support_filter_bzip2.c} +38 -26
- data/ext/{libarchive-2.8.4/libarchive/archive_read_support_compression_compress.c → libarchive-3.6.2/libarchive/archive_read_support_filter_compress.c} +52 -44
- data/ext/libarchive-3.6.2/libarchive/archive_read_support_filter_grzip.c +112 -0
- data/ext/{libarchive-2.8.4/libarchive/archive_read_support_compression_gzip.c → libarchive-3.6.2/libarchive/archive_read_support_filter_gzip.c} +108 -37
- data/ext/libarchive-3.6.2/libarchive/archive_read_support_filter_lrzip.c +122 -0
- data/ext/libarchive-3.6.2/libarchive/archive_read_support_filter_lz4.c +742 -0
- data/ext/libarchive-3.6.2/libarchive/archive_read_support_filter_lzop.c +499 -0
- data/ext/{libarchive-2.8.4/libarchive/archive_read_support_compression_none.c → libarchive-3.6.2/libarchive/archive_read_support_filter_none.c} +15 -3
- data/ext/{libarchive-2.8.4/libarchive/archive_read_support_compression_program.c → libarchive-3.6.2/libarchive/archive_read_support_filter_program.c} +114 -77
- data/ext/{libarchive-2.8.4/libarchive/archive_read_support_compression_rpm.c → libarchive-3.6.2/libarchive/archive_read_support_filter_rpm.c} +31 -31
- data/ext/{libarchive-2.8.4/libarchive/archive_read_support_compression_uu.c → libarchive-3.6.2/libarchive/archive_read_support_filter_uu.c} +141 -85
- data/ext/{libarchive-2.8.4/libarchive/archive_read_support_compression_xz.c → libarchive-3.6.2/libarchive/archive_read_support_filter_xz.c} +369 -284
- data/ext/libarchive-3.6.2/libarchive/archive_read_support_filter_zstd.c +297 -0
- data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_7zip.c +3900 -0
- data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_all.c +89 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_support_format_ar.c +126 -72
- data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_by_code.c +92 -0
- data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_cab.c +3228 -0
- data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_cpio.c +1104 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_support_format_empty.c +14 -11
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_support_format_iso9660.c +990 -541
- data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_lha.c +2916 -0
- data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_mtree.c +2150 -0
- data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_rar.c +3797 -0
- data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_rar5.c +4251 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_support_format_raw.c +38 -31
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_support_format_tar.c +1157 -629
- data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_warc.c +848 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_read_support_format_xar.c +439 -258
- data/ext/libarchive-3.6.2/libarchive/archive_read_support_format_zip.c +4270 -0
- data/ext/libarchive-3.6.2/libarchive/archive_string.c +4240 -0
- data/ext/libarchive-3.6.2/libarchive/archive_string.h +243 -0
- data/ext/libarchive-3.6.2/libarchive/archive_string_composition.h +2292 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_string_sprintf.c +44 -16
- data/ext/libarchive-3.6.2/libarchive/archive_util.c +655 -0
- data/ext/libarchive-3.6.2/libarchive/archive_version_details.c +151 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_virtual.c +85 -16
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_windows.c +214 -541
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_windows.h +74 -106
- data/ext/libarchive-3.6.2/libarchive/archive_write.c +828 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter.c +72 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_b64encode.c +304 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_by_name.c +77 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_bzip2.c +401 -0
- data/ext/{libarchive-2.8.4/libarchive/archive_write_set_compression_compress.c → libarchive-3.6.2/libarchive/archive_write_add_filter_compress.c} +86 -131
- data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_grzip.c +135 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_gzip.c +442 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_lrzip.c +197 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_lz4.c +700 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_lzop.c +478 -0
- data/ext/{libarchive-2.8.4/libarchive/archive_read_support_format_all.c → libarchive-3.6.2/libarchive/archive_write_add_filter_none.c} +11 -11
- data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_program.c +391 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_uuencode.c +295 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_xz.c +545 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_add_filter_zstd.c +418 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_disk_posix.c +4711 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_disk_private.h +9 -2
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_disk_set_standard_lookup.c +30 -29
- data/ext/libarchive-3.6.2/libarchive/archive_write_disk_windows.c +2842 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_open_fd.c +15 -10
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_open_file.c +15 -9
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_open_filename.c +128 -20
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_open_memory.c +7 -18
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_private.h +72 -29
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_set_format.c +56 -3
- data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_7zip.c +2322 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_set_format_ar.c +54 -34
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_set_format_by_name.c +20 -2
- data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_cpio.c +11 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_cpio_binary.c +610 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_cpio_newc.c +457 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_cpio_odc.c +500 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_filter_by_ext.c +142 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_gnutar.c +755 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_iso9660.c +8165 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_mtree.c +2217 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_set_format_pax.c +1049 -387
- data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_private.h +42 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_raw.c +125 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_set_format_shar.c +62 -47
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/archive_write_set_format_ustar.c +279 -108
- data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_v7tar.c +638 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_warc.c +453 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_xar.c +3259 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_set_format_zip.c +1704 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_set_options.c +130 -0
- data/ext/libarchive-3.6.2/libarchive/archive_write_set_passphrase.c +95 -0
- data/ext/libarchive-3.6.2/libarchive/archive_xxhash.h +48 -0
- data/ext/libarchive-3.6.2/libarchive/config_freebsd.h +271 -0
- data/ext/{libarchive-2.8.4 → libarchive-3.6.2}/libarchive/filter_fork.h +10 -5
- data/ext/{libarchive-2.8.4/libarchive/filter_fork.c → libarchive-3.6.2/libarchive/filter_fork_posix.c} +98 -19
- data/ext/libarchive-3.6.2/libarchive/filter_fork_windows.c +236 -0
- data/ext/libarchive-3.6.2/libarchive/xxhash.c +525 -0
- data/ext/libarchive-static-makefile +144 -80
- data/ext/libarchive-static-wrapper-makefile +1 -1
- data/ext/zlib-1.2.13/Makefile.in +404 -0
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/adler32.c +51 -34
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/compress.c +27 -21
- data/ext/zlib-1.2.13/configure +922 -0
- data/ext/zlib-1.2.13/crc32.c +1125 -0
- data/ext/zlib-1.2.13/crc32.h +9446 -0
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/deflate.c +842 -459
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/deflate.h +37 -33
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/gzclose.c +0 -0
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/gzguts.h +103 -16
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/gzlib.c +155 -53
- data/ext/zlib-1.2.13/gzread.c +650 -0
- data/ext/zlib-1.2.13/gzwrite.c +677 -0
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/infback.c +24 -12
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/inffast.c +49 -66
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/inffast.h +0 -0
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/inffixed.h +3 -3
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/inflate.c +209 -94
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/inflate.h +9 -5
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/inftrees.c +24 -50
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/inftrees.h +1 -1
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/trees.c +135 -198
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/trees.h +0 -0
- data/ext/zlib-1.2.13/uncompr.c +93 -0
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/zconf.h +182 -63
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/zlib.h +617 -295
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/zutil.c +50 -41
- data/ext/{zlib-1.2.5 → zlib-1.2.13}/zutil.h +83 -82
- metadata +241 -133
- data/ext/libarchive-0.1.1/libarchive.c +0 -1762
- data/ext/libarchive-2.8.4/Makefile.in +0 -7076
- data/ext/libarchive-2.8.4/build/autoconf/compile +0 -143
- data/ext/libarchive-2.8.4/build/autoconf/config.guess +0 -1502
- data/ext/libarchive-2.8.4/build/autoconf/config.sub +0 -1708
- data/ext/libarchive-2.8.4/build/autoconf/depcomp +0 -630
- data/ext/libarchive-2.8.4/build/autoconf/install-sh +0 -291
- data/ext/libarchive-2.8.4/build/autoconf/ltmain.sh +0 -8406
- data/ext/libarchive-2.8.4/build/autoconf/missing +0 -376
- data/ext/libarchive-2.8.4/config.h.in +0 -772
- data/ext/libarchive-2.8.4/configure +0 -17916
- data/ext/libarchive-2.8.4/libarchive/archive.h +0 -741
- data/ext/libarchive-2.8.4/libarchive/archive_entry.c +0 -2202
- data/ext/libarchive-2.8.4/libarchive/archive_hash.h +0 -281
- data/ext/libarchive-2.8.4/libarchive/archive_read.c +0 -1249
- data/ext/libarchive-2.8.4/libarchive/archive_read_disk.c +0 -198
- data/ext/libarchive-2.8.4/libarchive/archive_read_disk_entry_from_file.c +0 -570
- data/ext/libarchive-2.8.4/libarchive/archive_read_open_filename.c +0 -272
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_cpio.c +0 -777
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_mtree.c +0 -1304
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_zip.c +0 -903
- data/ext/libarchive-2.8.4/libarchive/archive_string.c +0 -453
- data/ext/libarchive-2.8.4/libarchive/archive_string.h +0 -148
- data/ext/libarchive-2.8.4/libarchive/archive_util.c +0 -391
- data/ext/libarchive-2.8.4/libarchive/archive_write.c +0 -466
- data/ext/libarchive-2.8.4/libarchive/archive_write_disk.c +0 -2628
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_bzip2.c +0 -408
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_gzip.c +0 -477
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_none.c +0 -257
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_program.c +0 -347
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_xz.c +0 -438
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_cpio.c +0 -344
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_cpio_newc.c +0 -295
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_mtree.c +0 -1050
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_zip.c +0 -667
- data/ext/libarchive-2.8.4/libarchive/config_freebsd.h +0 -154
- data/ext/libarchive-2.8.4/libarchive/filter_fork_windows.c +0 -113
- data/ext/zlib-1.2.5/Makefile.in +0 -257
- data/ext/zlib-1.2.5/configure +0 -596
- data/ext/zlib-1.2.5/crc32.c +0 -442
- data/ext/zlib-1.2.5/crc32.h +0 -441
- data/ext/zlib-1.2.5/example.c +0 -565
- data/ext/zlib-1.2.5/gzread.c +0 -653
- data/ext/zlib-1.2.5/gzwrite.c +0 -531
- data/ext/zlib-1.2.5/minigzip.c +0 -440
- data/ext/zlib-1.2.5/uncompr.c +0 -59
|
@@ -28,7 +28,6 @@ __FBSDID("$FreeBSD$");
|
|
|
28
28
|
#ifdef HAVE_ERRNO_H
|
|
29
29
|
#include <errno.h>
|
|
30
30
|
#endif
|
|
31
|
-
#include <stdio.h>
|
|
32
31
|
#ifdef HAVE_STDLIB_H
|
|
33
32
|
#include <stdlib.h>
|
|
34
33
|
#endif
|
|
@@ -44,17 +43,16 @@ __FBSDID("$FreeBSD$");
|
|
|
44
43
|
#endif
|
|
45
44
|
#if HAVE_LZMA_H
|
|
46
45
|
#include <lzma.h>
|
|
47
|
-
#elif HAVE_LZMADEC_H
|
|
48
|
-
#include <lzmadec.h>
|
|
49
46
|
#endif
|
|
50
47
|
#ifdef HAVE_ZLIB_H
|
|
51
48
|
#include <zlib.h>
|
|
52
49
|
#endif
|
|
53
50
|
|
|
54
51
|
#include "archive.h"
|
|
52
|
+
#include "archive_digest_private.h"
|
|
55
53
|
#include "archive_endian.h"
|
|
56
54
|
#include "archive_entry.h"
|
|
57
|
-
#include "
|
|
55
|
+
#include "archive_entry_locale.h"
|
|
58
56
|
#include "archive_private.h"
|
|
59
57
|
#include "archive_read_private.h"
|
|
60
58
|
|
|
@@ -74,6 +72,8 @@ int
|
|
|
74
72
|
archive_read_support_format_xar(struct archive *_a)
|
|
75
73
|
{
|
|
76
74
|
struct archive_read *a = (struct archive_read *)_a;
|
|
75
|
+
archive_check_magic(_a, ARCHIVE_READ_MAGIC,
|
|
76
|
+
ARCHIVE_STATE_NEW, "archive_read_support_format_xar");
|
|
77
77
|
|
|
78
78
|
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
|
|
79
79
|
"Xar not supported on this platform");
|
|
@@ -82,8 +82,8 @@ archive_read_support_format_xar(struct archive *_a)
|
|
|
82
82
|
|
|
83
83
|
#else /* Support xar format */
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
/* #define DEBUG 1 */
|
|
86
|
+
/* #define DEBUG_PRINT_TOC 1 */
|
|
87
87
|
#if DEBUG_PRINT_TOC
|
|
88
88
|
#define PRINT_TOC(d, outbytes) do { \
|
|
89
89
|
unsigned char *x = (unsigned char *)(uintptr_t)d; \
|
|
@@ -167,6 +167,9 @@ struct xar_file {
|
|
|
167
167
|
#define HAS_FFLAGS 0x01000
|
|
168
168
|
#define HAS_XATTR 0x02000
|
|
169
169
|
#define HAS_ACL 0x04000
|
|
170
|
+
#define HAS_CTIME 0x08000
|
|
171
|
+
#define HAS_MTIME 0x10000
|
|
172
|
+
#define HAS_ATIME 0x20000
|
|
170
173
|
|
|
171
174
|
uint64_t id;
|
|
172
175
|
uint64_t length;
|
|
@@ -181,9 +184,9 @@ struct xar_file {
|
|
|
181
184
|
time_t mtime;
|
|
182
185
|
time_t atime;
|
|
183
186
|
struct archive_string uname;
|
|
184
|
-
|
|
187
|
+
int64_t uid;
|
|
185
188
|
struct archive_string gname;
|
|
186
|
-
|
|
189
|
+
int64_t gid;
|
|
187
190
|
mode_t mode;
|
|
188
191
|
dev_t dev;
|
|
189
192
|
dev_t devmajor;
|
|
@@ -303,7 +306,8 @@ struct xar {
|
|
|
303
306
|
int64_t total;
|
|
304
307
|
uint64_t h_base;
|
|
305
308
|
int end_of_file;
|
|
306
|
-
|
|
309
|
+
#define OUTBUFF_SIZE (1024 * 64)
|
|
310
|
+
unsigned char *outbuff;
|
|
307
311
|
|
|
308
312
|
enum xmlstatus xmlsts;
|
|
309
313
|
enum xmlstatus xmlsts_unknown;
|
|
@@ -331,9 +335,6 @@ struct xar {
|
|
|
331
335
|
#if HAVE_LZMA_H && HAVE_LIBLZMA
|
|
332
336
|
lzma_stream lzstream;
|
|
333
337
|
int lzstream_valid;
|
|
334
|
-
#elif HAVE_LZMADEC_H && HAVE_LIBLZMADEC
|
|
335
|
-
lzmadec_stream lzstream;
|
|
336
|
-
int lzstream_valid;
|
|
337
338
|
#endif
|
|
338
339
|
/*
|
|
339
340
|
* For Checksum data.
|
|
@@ -350,10 +351,13 @@ struct xar {
|
|
|
350
351
|
int entry_init;
|
|
351
352
|
uint64_t entry_total;
|
|
352
353
|
uint64_t entry_remaining;
|
|
354
|
+
size_t entry_unconsumed;
|
|
353
355
|
uint64_t entry_size;
|
|
354
356
|
enum enctype entry_encoding;
|
|
355
357
|
struct chksumval entry_a_sum;
|
|
356
358
|
struct chksumval entry_e_sum;
|
|
359
|
+
|
|
360
|
+
struct archive_string_conv *sconv;
|
|
357
361
|
};
|
|
358
362
|
|
|
359
363
|
struct xmlattr {
|
|
@@ -367,11 +371,11 @@ struct xmlattr_list {
|
|
|
367
371
|
struct xmlattr **last;
|
|
368
372
|
};
|
|
369
373
|
|
|
370
|
-
static int xar_bid(struct archive_read
|
|
374
|
+
static int xar_bid(struct archive_read *, int);
|
|
371
375
|
static int xar_read_header(struct archive_read *,
|
|
372
376
|
struct archive_entry *);
|
|
373
377
|
static int xar_read_data(struct archive_read *,
|
|
374
|
-
const void **, size_t *,
|
|
378
|
+
const void **, size_t *, int64_t *);
|
|
375
379
|
static int xar_read_data_skip(struct archive_read *);
|
|
376
380
|
static int xar_cleanup(struct archive_read *);
|
|
377
381
|
static int move_reading_point(struct archive_read *, uint64_t);
|
|
@@ -383,41 +387,54 @@ static uint64_t atol10(const char *, size_t);
|
|
|
383
387
|
static int64_t atol8(const char *, size_t);
|
|
384
388
|
static size_t atohex(unsigned char *, size_t, const char *, size_t);
|
|
385
389
|
static time_t parse_time(const char *p, size_t n);
|
|
386
|
-
static
|
|
390
|
+
static int heap_add_entry(struct archive_read *a,
|
|
391
|
+
struct heap_queue *, struct xar_file *);
|
|
387
392
|
static struct xar_file *heap_get_entry(struct heap_queue *);
|
|
388
|
-
static
|
|
393
|
+
static int add_link(struct archive_read *,
|
|
394
|
+
struct xar *, struct xar_file *);
|
|
389
395
|
static void checksum_init(struct archive_read *, int, int);
|
|
390
396
|
static void checksum_update(struct archive_read *, const void *,
|
|
391
397
|
size_t, const void *, size_t);
|
|
392
398
|
static int checksum_final(struct archive_read *, const void *,
|
|
393
399
|
size_t, const void *, size_t);
|
|
400
|
+
static void checksum_cleanup(struct archive_read *);
|
|
394
401
|
static int decompression_init(struct archive_read *, enum enctype);
|
|
395
402
|
static int decompress(struct archive_read *, const void **,
|
|
396
403
|
size_t *, const void *, size_t *);
|
|
397
404
|
static int decompression_cleanup(struct archive_read *);
|
|
398
405
|
static void xmlattr_cleanup(struct xmlattr_list *);
|
|
399
|
-
static
|
|
406
|
+
static int file_new(struct archive_read *,
|
|
407
|
+
struct xar *, struct xmlattr_list *);
|
|
400
408
|
static void file_free(struct xar_file *);
|
|
401
|
-
static
|
|
409
|
+
static int xattr_new(struct archive_read *,
|
|
410
|
+
struct xar *, struct xmlattr_list *);
|
|
402
411
|
static void xattr_free(struct xattr *);
|
|
403
412
|
static int getencoding(struct xmlattr_list *);
|
|
404
413
|
static int getsumalgorithm(struct xmlattr_list *);
|
|
405
|
-
static
|
|
414
|
+
static int unknowntag_start(struct archive_read *,
|
|
415
|
+
struct xar *, const char *);
|
|
406
416
|
static void unknowntag_end(struct xar *, const char *);
|
|
407
|
-
static
|
|
417
|
+
static int xml_start(struct archive_read *,
|
|
418
|
+
const char *, struct xmlattr_list *);
|
|
408
419
|
static void xml_end(void *, const char *);
|
|
409
420
|
static void xml_data(void *, const char *, int);
|
|
410
421
|
static int xml_parse_file_flags(struct xar *, const char *);
|
|
411
422
|
static int xml_parse_file_ext2(struct xar *, const char *);
|
|
412
423
|
#if defined(HAVE_LIBXML_XMLREADER_H)
|
|
413
|
-
static int xml2_xmlattr_setup(struct
|
|
424
|
+
static int xml2_xmlattr_setup(struct archive_read *,
|
|
425
|
+
struct xmlattr_list *, xmlTextReaderPtr);
|
|
414
426
|
static int xml2_read_cb(void *, char *, int);
|
|
415
427
|
static int xml2_close_cb(void *);
|
|
416
428
|
static void xml2_error_hdr(void *, const char *, xmlParserSeverities,
|
|
417
429
|
xmlTextReaderLocatorPtr);
|
|
418
430
|
static int xml2_read_toc(struct archive_read *);
|
|
419
431
|
#elif defined(HAVE_BSDXML_H) || defined(HAVE_EXPAT_H)
|
|
420
|
-
|
|
432
|
+
struct expat_userData {
|
|
433
|
+
int state;
|
|
434
|
+
struct archive_read *archive;
|
|
435
|
+
};
|
|
436
|
+
static int expat_xmlattr_setup(struct archive_read *,
|
|
437
|
+
struct xmlattr_list *, const XML_Char **);
|
|
421
438
|
static void expat_start_cb(void *, const XML_Char *, const XML_Char **);
|
|
422
439
|
static void expat_end_cb(void *, const XML_Char *);
|
|
423
440
|
static void expat_data_cb(void *, const XML_Char *, int);
|
|
@@ -431,6 +448,9 @@ archive_read_support_format_xar(struct archive *_a)
|
|
|
431
448
|
struct archive_read *a = (struct archive_read *)_a;
|
|
432
449
|
int r;
|
|
433
450
|
|
|
451
|
+
archive_check_magic(_a, ARCHIVE_READ_MAGIC,
|
|
452
|
+
ARCHIVE_STATE_NEW, "archive_read_support_format_xar");
|
|
453
|
+
|
|
434
454
|
xar = (struct xar *)calloc(1, sizeof(*xar));
|
|
435
455
|
if (xar == NULL) {
|
|
436
456
|
archive_set_error(&a->archive, ENOMEM,
|
|
@@ -438,6 +458,11 @@ archive_read_support_format_xar(struct archive *_a)
|
|
|
438
458
|
return (ARCHIVE_FATAL);
|
|
439
459
|
}
|
|
440
460
|
|
|
461
|
+
/* initialize xar->file_queue */
|
|
462
|
+
xar->file_queue.allocated = 0;
|
|
463
|
+
xar->file_queue.used = 0;
|
|
464
|
+
xar->file_queue.files = NULL;
|
|
465
|
+
|
|
441
466
|
r = __archive_read_register_format(a,
|
|
442
467
|
xar,
|
|
443
468
|
"xar",
|
|
@@ -446,18 +471,23 @@ archive_read_support_format_xar(struct archive *_a)
|
|
|
446
471
|
xar_read_header,
|
|
447
472
|
xar_read_data,
|
|
448
473
|
xar_read_data_skip,
|
|
449
|
-
|
|
474
|
+
NULL,
|
|
475
|
+
xar_cleanup,
|
|
476
|
+
NULL,
|
|
477
|
+
NULL);
|
|
450
478
|
if (r != ARCHIVE_OK)
|
|
451
479
|
free(xar);
|
|
452
480
|
return (r);
|
|
453
481
|
}
|
|
454
482
|
|
|
455
483
|
static int
|
|
456
|
-
xar_bid(struct archive_read *a)
|
|
484
|
+
xar_bid(struct archive_read *a, int best_bid)
|
|
457
485
|
{
|
|
458
486
|
const unsigned char *b;
|
|
459
487
|
int bid;
|
|
460
488
|
|
|
489
|
+
(void)best_bid; /* UNUSED */
|
|
490
|
+
|
|
461
491
|
b = __archive_read_ahead(a, HEADER_SIZE, NULL);
|
|
462
492
|
if (b == NULL)
|
|
463
493
|
return (-1);
|
|
@@ -579,7 +609,8 @@ read_toc(struct archive_read *a)
|
|
|
579
609
|
r = move_reading_point(a, xar->toc_chksum_offset);
|
|
580
610
|
if (r != ARCHIVE_OK)
|
|
581
611
|
return (r);
|
|
582
|
-
b = __archive_read_ahead(a,
|
|
612
|
+
b = __archive_read_ahead(a,
|
|
613
|
+
(size_t)xar->toc_chksum_size, &bytes);
|
|
583
614
|
if (bytes < 0)
|
|
584
615
|
return ((int)bytes);
|
|
585
616
|
if ((uint64_t)bytes < xar->toc_chksum_size) {
|
|
@@ -588,11 +619,14 @@ read_toc(struct archive_read *a)
|
|
|
588
619
|
"Truncated archive file");
|
|
589
620
|
return (ARCHIVE_FATAL);
|
|
590
621
|
}
|
|
591
|
-
r = checksum_final(a, b,
|
|
622
|
+
r = checksum_final(a, b,
|
|
623
|
+
(size_t)xar->toc_chksum_size, NULL, 0);
|
|
592
624
|
__archive_read_consume(a, xar->toc_chksum_size);
|
|
593
625
|
xar->offset += xar->toc_chksum_size;
|
|
594
626
|
if (r != ARCHIVE_OK)
|
|
627
|
+
#ifndef DONT_FAIL_ON_CRC_ERROR
|
|
595
628
|
return (ARCHIVE_FATAL);
|
|
629
|
+
#endif
|
|
596
630
|
}
|
|
597
631
|
|
|
598
632
|
/*
|
|
@@ -638,8 +672,17 @@ xar_read_header(struct archive_read *a, struct archive_entry *entry)
|
|
|
638
672
|
int r;
|
|
639
673
|
|
|
640
674
|
xar = (struct xar *)(a->format->data);
|
|
675
|
+
r = ARCHIVE_OK;
|
|
641
676
|
|
|
642
677
|
if (xar->offset == 0) {
|
|
678
|
+
/* Create a character conversion object. */
|
|
679
|
+
if (xar->sconv == NULL) {
|
|
680
|
+
xar->sconv = archive_string_conversion_from_charset(
|
|
681
|
+
&(a->archive), "UTF-8", 1);
|
|
682
|
+
if (xar->sconv == NULL)
|
|
683
|
+
return (ARCHIVE_FATAL);
|
|
684
|
+
}
|
|
685
|
+
|
|
643
686
|
/* Read TOC. */
|
|
644
687
|
r = read_toc(a);
|
|
645
688
|
if (r != ARCHIVE_OK)
|
|
@@ -662,19 +705,75 @@ xar_read_header(struct archive_read *a, struct archive_entry *entry)
|
|
|
662
705
|
*/
|
|
663
706
|
file_free(file);
|
|
664
707
|
}
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
708
|
+
if (file->has & HAS_ATIME) {
|
|
709
|
+
archive_entry_set_atime(entry, file->atime, 0);
|
|
710
|
+
}
|
|
711
|
+
if (file->has & HAS_CTIME) {
|
|
712
|
+
archive_entry_set_ctime(entry, file->ctime, 0);
|
|
713
|
+
}
|
|
714
|
+
if (file->has & HAS_MTIME) {
|
|
715
|
+
archive_entry_set_mtime(entry, file->mtime, 0);
|
|
716
|
+
}
|
|
668
717
|
archive_entry_set_gid(entry, file->gid);
|
|
669
|
-
if (file->gname.length > 0
|
|
670
|
-
|
|
718
|
+
if (file->gname.length > 0 &&
|
|
719
|
+
archive_entry_copy_gname_l(entry, file->gname.s,
|
|
720
|
+
archive_strlen(&(file->gname)), xar->sconv) != 0) {
|
|
721
|
+
if (errno == ENOMEM) {
|
|
722
|
+
archive_set_error(&a->archive, ENOMEM,
|
|
723
|
+
"Can't allocate memory for Gname");
|
|
724
|
+
return (ARCHIVE_FATAL);
|
|
725
|
+
}
|
|
726
|
+
archive_set_error(&a->archive,
|
|
727
|
+
ARCHIVE_ERRNO_FILE_FORMAT,
|
|
728
|
+
"Gname cannot be converted from %s to current locale.",
|
|
729
|
+
archive_string_conversion_charset_name(xar->sconv));
|
|
730
|
+
r = ARCHIVE_WARN;
|
|
731
|
+
}
|
|
671
732
|
archive_entry_set_uid(entry, file->uid);
|
|
672
|
-
if (file->uname.length > 0
|
|
673
|
-
|
|
733
|
+
if (file->uname.length > 0 &&
|
|
734
|
+
archive_entry_copy_uname_l(entry, file->uname.s,
|
|
735
|
+
archive_strlen(&(file->uname)), xar->sconv) != 0) {
|
|
736
|
+
if (errno == ENOMEM) {
|
|
737
|
+
archive_set_error(&a->archive, ENOMEM,
|
|
738
|
+
"Can't allocate memory for Uname");
|
|
739
|
+
return (ARCHIVE_FATAL);
|
|
740
|
+
}
|
|
741
|
+
archive_set_error(&a->archive,
|
|
742
|
+
ARCHIVE_ERRNO_FILE_FORMAT,
|
|
743
|
+
"Uname cannot be converted from %s to current locale.",
|
|
744
|
+
archive_string_conversion_charset_name(xar->sconv));
|
|
745
|
+
r = ARCHIVE_WARN;
|
|
746
|
+
}
|
|
674
747
|
archive_entry_set_mode(entry, file->mode);
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
748
|
+
if (archive_entry_copy_pathname_l(entry, file->pathname.s,
|
|
749
|
+
archive_strlen(&(file->pathname)), xar->sconv) != 0) {
|
|
750
|
+
if (errno == ENOMEM) {
|
|
751
|
+
archive_set_error(&a->archive, ENOMEM,
|
|
752
|
+
"Can't allocate memory for Pathname");
|
|
753
|
+
return (ARCHIVE_FATAL);
|
|
754
|
+
}
|
|
755
|
+
archive_set_error(&a->archive,
|
|
756
|
+
ARCHIVE_ERRNO_FILE_FORMAT,
|
|
757
|
+
"Pathname cannot be converted from %s to current locale.",
|
|
758
|
+
archive_string_conversion_charset_name(xar->sconv));
|
|
759
|
+
r = ARCHIVE_WARN;
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
|
|
763
|
+
if (file->symlink.length > 0 &&
|
|
764
|
+
archive_entry_copy_symlink_l(entry, file->symlink.s,
|
|
765
|
+
archive_strlen(&(file->symlink)), xar->sconv) != 0) {
|
|
766
|
+
if (errno == ENOMEM) {
|
|
767
|
+
archive_set_error(&a->archive, ENOMEM,
|
|
768
|
+
"Can't allocate memory for Linkname");
|
|
769
|
+
return (ARCHIVE_FATAL);
|
|
770
|
+
}
|
|
771
|
+
archive_set_error(&a->archive,
|
|
772
|
+
ARCHIVE_ERRNO_FILE_FORMAT,
|
|
773
|
+
"Linkname cannot be converted from %s to current locale.",
|
|
774
|
+
archive_string_conversion_charset_name(xar->sconv));
|
|
775
|
+
r = ARCHIVE_WARN;
|
|
776
|
+
}
|
|
678
777
|
/* Set proper nlink. */
|
|
679
778
|
if ((file->mode & AE_IFMT) == AE_IFDIR)
|
|
680
779
|
archive_entry_set_nlink(entry, file->subdirs + 2);
|
|
@@ -682,8 +781,7 @@ xar_read_header(struct archive_read *a, struct archive_entry *entry)
|
|
|
682
781
|
archive_entry_set_nlink(entry, file->nlink);
|
|
683
782
|
archive_entry_set_size(entry, file->size);
|
|
684
783
|
if (archive_strlen(&(file->hardlink)) > 0)
|
|
685
|
-
|
|
686
|
-
file->hardlink.s);
|
|
784
|
+
archive_entry_set_hardlink(entry, file->hardlink.s);
|
|
687
785
|
archive_entry_set_ino64(entry, file->ino64);
|
|
688
786
|
if (file->has & HAS_DEV)
|
|
689
787
|
archive_entry_set_dev(entry, file->dev);
|
|
@@ -704,11 +802,11 @@ xar_read_header(struct archive_read *a, struct archive_entry *entry)
|
|
|
704
802
|
/*
|
|
705
803
|
* Read extended attributes.
|
|
706
804
|
*/
|
|
707
|
-
r = ARCHIVE_OK;
|
|
708
805
|
xattr = file->xattr_list;
|
|
709
806
|
while (xattr != NULL) {
|
|
710
807
|
const void *d;
|
|
711
|
-
size_t outbytes
|
|
808
|
+
size_t outbytes = 0;
|
|
809
|
+
size_t used = 0;
|
|
712
810
|
|
|
713
811
|
r = move_reading_point(a, xattr->offset);
|
|
714
812
|
if (r != ARCHIVE_OK)
|
|
@@ -730,8 +828,20 @@ xar_read_header(struct archive_read *a, struct archive_entry *entry)
|
|
|
730
828
|
r = checksum_final(a,
|
|
731
829
|
xattr->a_sum.val, xattr->a_sum.len,
|
|
732
830
|
xattr->e_sum.val, xattr->e_sum.len);
|
|
733
|
-
if (r != ARCHIVE_OK)
|
|
831
|
+
if (r != ARCHIVE_OK) {
|
|
832
|
+
#ifndef DONT_FAIL_ON_CRC_ERROR
|
|
833
|
+
archive_set_error(&(a->archive), ARCHIVE_ERRNO_MISC,
|
|
834
|
+
"Xattr checksum error");
|
|
835
|
+
r = ARCHIVE_WARN;
|
|
836
|
+
break;
|
|
837
|
+
#endif
|
|
838
|
+
}
|
|
839
|
+
if (xattr->name.s == NULL) {
|
|
840
|
+
archive_set_error(&(a->archive), ARCHIVE_ERRNO_MISC,
|
|
841
|
+
"Xattr name error");
|
|
842
|
+
r = ARCHIVE_WARN;
|
|
734
843
|
break;
|
|
844
|
+
}
|
|
735
845
|
archive_entry_xattr_add_entry(entry,
|
|
736
846
|
xattr->name.s, d, outbytes);
|
|
737
847
|
xattr = xattr->next;
|
|
@@ -754,13 +864,19 @@ xar_read_header(struct archive_read *a, struct archive_entry *entry)
|
|
|
754
864
|
|
|
755
865
|
static int
|
|
756
866
|
xar_read_data(struct archive_read *a,
|
|
757
|
-
const void **buff, size_t *size,
|
|
867
|
+
const void **buff, size_t *size, int64_t *offset)
|
|
758
868
|
{
|
|
759
869
|
struct xar *xar;
|
|
760
|
-
size_t used;
|
|
870
|
+
size_t used = 0;
|
|
761
871
|
int r;
|
|
762
872
|
|
|
763
873
|
xar = (struct xar *)(a->format->data);
|
|
874
|
+
|
|
875
|
+
if (xar->entry_unconsumed) {
|
|
876
|
+
__archive_read_consume(a, xar->entry_unconsumed);
|
|
877
|
+
xar->entry_unconsumed = 0;
|
|
878
|
+
}
|
|
879
|
+
|
|
764
880
|
if (xar->end_of_file || xar->entry_remaining <= 0) {
|
|
765
881
|
r = ARCHIVE_EOF;
|
|
766
882
|
goto abort_read_data;
|
|
@@ -786,7 +902,7 @@ xar_read_data(struct archive_read *a,
|
|
|
786
902
|
xar->total += *size;
|
|
787
903
|
xar->offset += used;
|
|
788
904
|
xar->entry_remaining -= used;
|
|
789
|
-
|
|
905
|
+
xar->entry_unconsumed = used;
|
|
790
906
|
|
|
791
907
|
if (xar->entry_remaining == 0) {
|
|
792
908
|
if (xar->entry_total != xar->entry_size) {
|
|
@@ -819,10 +935,12 @@ xar_read_data_skip(struct archive_read *a)
|
|
|
819
935
|
xar = (struct xar *)(a->format->data);
|
|
820
936
|
if (xar->end_of_file)
|
|
821
937
|
return (ARCHIVE_EOF);
|
|
822
|
-
bytes_skipped =
|
|
938
|
+
bytes_skipped = __archive_read_consume(a, xar->entry_remaining +
|
|
939
|
+
xar->entry_unconsumed);
|
|
823
940
|
if (bytes_skipped < 0)
|
|
824
941
|
return (ARCHIVE_FATAL);
|
|
825
942
|
xar->offset += bytes_skipped;
|
|
943
|
+
xar->entry_unconsumed = 0;
|
|
826
944
|
return (ARCHIVE_OK);
|
|
827
945
|
}
|
|
828
946
|
|
|
@@ -835,6 +953,7 @@ xar_cleanup(struct archive_read *a)
|
|
|
835
953
|
int r;
|
|
836
954
|
|
|
837
955
|
xar = (struct xar *)(a->format->data);
|
|
956
|
+
checksum_cleanup(a);
|
|
838
957
|
r = decompression_cleanup(a);
|
|
839
958
|
hdlink = xar->hdlink_list;
|
|
840
959
|
while (hdlink != NULL) {
|
|
@@ -845,6 +964,7 @@ xar_cleanup(struct archive_read *a)
|
|
|
845
964
|
}
|
|
846
965
|
for (i = 0; i < xar->file_queue.used; i++)
|
|
847
966
|
file_free(xar->file_queue.files[i]);
|
|
967
|
+
free(xar->file_queue.files);
|
|
848
968
|
while (xar->unknowntags != NULL) {
|
|
849
969
|
struct unknown_tag *tag;
|
|
850
970
|
|
|
@@ -853,6 +973,7 @@ xar_cleanup(struct archive_read *a)
|
|
|
853
973
|
archive_string_free(&(tag->name));
|
|
854
974
|
free(tag);
|
|
855
975
|
}
|
|
976
|
+
free(xar->outbuff);
|
|
856
977
|
free(xar);
|
|
857
978
|
a->format->data = NULL;
|
|
858
979
|
return (r);
|
|
@@ -870,15 +991,19 @@ move_reading_point(struct archive_read *a, uint64_t offset)
|
|
|
870
991
|
|
|
871
992
|
step = offset - (xar->offset - xar->h_base);
|
|
872
993
|
if (step > 0) {
|
|
873
|
-
step =
|
|
994
|
+
step = __archive_read_consume(a, step);
|
|
874
995
|
if (step < 0)
|
|
875
996
|
return ((int)step);
|
|
876
997
|
xar->offset += step;
|
|
877
998
|
} else {
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
999
|
+
int64_t pos = __archive_read_seek(a, xar->h_base + offset, SEEK_SET);
|
|
1000
|
+
if (pos == ARCHIVE_FAILED) {
|
|
1001
|
+
archive_set_error(&(a->archive),
|
|
1002
|
+
ARCHIVE_ERRNO_MISC,
|
|
1003
|
+
"Cannot seek.");
|
|
1004
|
+
return (ARCHIVE_FAILED);
|
|
1005
|
+
}
|
|
1006
|
+
xar->offset = pos;
|
|
882
1007
|
}
|
|
883
1008
|
}
|
|
884
1009
|
return (ARCHIVE_OK);
|
|
@@ -944,6 +1069,9 @@ atol10(const char *p, size_t char_cnt)
|
|
|
944
1069
|
uint64_t l;
|
|
945
1070
|
int digit;
|
|
946
1071
|
|
|
1072
|
+
if (char_cnt == 0)
|
|
1073
|
+
return (0);
|
|
1074
|
+
|
|
947
1075
|
l = 0;
|
|
948
1076
|
digit = *p - '0';
|
|
949
1077
|
while (digit >= 0 && digit < 10 && char_cnt-- > 0) {
|
|
@@ -958,7 +1086,10 @@ atol8(const char *p, size_t char_cnt)
|
|
|
958
1086
|
{
|
|
959
1087
|
int64_t l;
|
|
960
1088
|
int digit;
|
|
961
|
-
|
|
1089
|
+
|
|
1090
|
+
if (char_cnt == 0)
|
|
1091
|
+
return (0);
|
|
1092
|
+
|
|
962
1093
|
l = 0;
|
|
963
1094
|
while (char_cnt-- > 0) {
|
|
964
1095
|
if (*p >= '0' && *p <= '7')
|
|
@@ -1009,18 +1140,23 @@ static time_t
|
|
|
1009
1140
|
time_from_tm(struct tm *t)
|
|
1010
1141
|
{
|
|
1011
1142
|
#if HAVE_TIMEGM
|
|
1012
|
-
|
|
1013
|
-
|
|
1143
|
+
/* Use platform timegm() if available. */
|
|
1144
|
+
return (timegm(t));
|
|
1145
|
+
#elif HAVE__MKGMTIME64
|
|
1146
|
+
return (_mkgmtime64(t));
|
|
1014
1147
|
#else
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1148
|
+
/* Else use direct calculation using POSIX assumptions. */
|
|
1149
|
+
/* First, fix up tm_yday based on the year/month/day. */
|
|
1150
|
+
mktime(t);
|
|
1151
|
+
/* Then we can compute timegm() from first principles. */
|
|
1152
|
+
return (t->tm_sec
|
|
1153
|
+
+ t->tm_min * 60
|
|
1154
|
+
+ t->tm_hour * 3600
|
|
1155
|
+
+ t->tm_yday * 86400
|
|
1156
|
+
+ (t->tm_year - 70) * 31536000
|
|
1157
|
+
+ ((t->tm_year - 69) / 4) * 86400
|
|
1158
|
+
- ((t->tm_year - 1) / 100) * 86400
|
|
1159
|
+
+ ((t->tm_year + 299) / 400) * 86400);
|
|
1024
1160
|
#endif
|
|
1025
1161
|
}
|
|
1026
1162
|
|
|
@@ -1084,8 +1220,9 @@ parse_time(const char *p, size_t n)
|
|
|
1084
1220
|
return (t);
|
|
1085
1221
|
}
|
|
1086
1222
|
|
|
1087
|
-
static
|
|
1088
|
-
heap_add_entry(struct
|
|
1223
|
+
static int
|
|
1224
|
+
heap_add_entry(struct archive_read *a,
|
|
1225
|
+
struct heap_queue *heap, struct xar_file *file)
|
|
1089
1226
|
{
|
|
1090
1227
|
uint64_t file_id, parent_id;
|
|
1091
1228
|
int hole, parent;
|
|
@@ -1093,21 +1230,30 @@ heap_add_entry(struct heap_queue *heap, struct xar_file *file)
|
|
|
1093
1230
|
/* Expand our pending files list as necessary. */
|
|
1094
1231
|
if (heap->used >= heap->allocated) {
|
|
1095
1232
|
struct xar_file **new_pending_files;
|
|
1096
|
-
int new_size
|
|
1233
|
+
int new_size;
|
|
1097
1234
|
|
|
1098
1235
|
if (heap->allocated < 1024)
|
|
1099
1236
|
new_size = 1024;
|
|
1237
|
+
else
|
|
1238
|
+
new_size = heap->allocated * 2;
|
|
1100
1239
|
/* Overflow might keep us from growing the list. */
|
|
1101
|
-
if (new_size <= heap->allocated)
|
|
1102
|
-
|
|
1240
|
+
if (new_size <= heap->allocated) {
|
|
1241
|
+
archive_set_error(&a->archive,
|
|
1242
|
+
ENOMEM, "Out of memory");
|
|
1243
|
+
return (ARCHIVE_FATAL);
|
|
1244
|
+
}
|
|
1103
1245
|
new_pending_files = (struct xar_file **)
|
|
1104
1246
|
malloc(new_size * sizeof(new_pending_files[0]));
|
|
1105
|
-
if (new_pending_files == NULL)
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1247
|
+
if (new_pending_files == NULL) {
|
|
1248
|
+
archive_set_error(&a->archive,
|
|
1249
|
+
ENOMEM, "Out of memory");
|
|
1250
|
+
return (ARCHIVE_FATAL);
|
|
1251
|
+
}
|
|
1252
|
+
if (heap->allocated) {
|
|
1253
|
+
memcpy(new_pending_files, heap->files,
|
|
1254
|
+
heap->allocated * sizeof(new_pending_files[0]));
|
|
1110
1255
|
free(heap->files);
|
|
1256
|
+
}
|
|
1111
1257
|
heap->files = new_pending_files;
|
|
1112
1258
|
heap->allocated = new_size;
|
|
1113
1259
|
}
|
|
@@ -1123,13 +1269,15 @@ heap_add_entry(struct heap_queue *heap, struct xar_file *file)
|
|
|
1123
1269
|
parent_id = heap->files[parent]->id;
|
|
1124
1270
|
if (file_id >= parent_id) {
|
|
1125
1271
|
heap->files[hole] = file;
|
|
1126
|
-
return;
|
|
1272
|
+
return (ARCHIVE_OK);
|
|
1127
1273
|
}
|
|
1128
|
-
|
|
1274
|
+
/* Move parent into hole <==> move hole up tree. */
|
|
1129
1275
|
heap->files[hole] = heap->files[parent];
|
|
1130
1276
|
hole = parent;
|
|
1131
1277
|
}
|
|
1132
1278
|
heap->files[0] = file;
|
|
1279
|
+
|
|
1280
|
+
return (ARCHIVE_OK);
|
|
1133
1281
|
}
|
|
1134
1282
|
|
|
1135
1283
|
static struct xar_file *
|
|
@@ -1155,14 +1303,14 @@ heap_get_entry(struct heap_queue *heap)
|
|
|
1155
1303
|
/*
|
|
1156
1304
|
* Rebalance the heap.
|
|
1157
1305
|
*/
|
|
1158
|
-
a = 0;
|
|
1306
|
+
a = 0; /* Starting element and its heap key */
|
|
1159
1307
|
a_id = heap->files[a]->id;
|
|
1160
1308
|
for (;;) {
|
|
1161
|
-
b = a + a + 1;
|
|
1309
|
+
b = a + a + 1; /* First child */
|
|
1162
1310
|
if (b >= heap->used)
|
|
1163
1311
|
return (r);
|
|
1164
1312
|
b_id = heap->files[b]->id;
|
|
1165
|
-
c = b + 1;
|
|
1313
|
+
c = b + 1; /* Use second child if it is smaller. */
|
|
1166
1314
|
if (c < heap->used) {
|
|
1167
1315
|
c_id = heap->files[c]->id;
|
|
1168
1316
|
if (c_id < b_id) {
|
|
@@ -1179,8 +1327,8 @@ heap_get_entry(struct heap_queue *heap)
|
|
|
1179
1327
|
}
|
|
1180
1328
|
}
|
|
1181
1329
|
|
|
1182
|
-
static
|
|
1183
|
-
add_link(struct xar *xar, struct xar_file *file)
|
|
1330
|
+
static int
|
|
1331
|
+
add_link(struct archive_read *a, struct xar *xar, struct xar_file *file)
|
|
1184
1332
|
{
|
|
1185
1333
|
struct hdlink *hdlink;
|
|
1186
1334
|
|
|
@@ -1189,18 +1337,21 @@ add_link(struct xar *xar, struct xar_file *file)
|
|
|
1189
1337
|
file->hdnext = hdlink->files;
|
|
1190
1338
|
hdlink->cnt++;
|
|
1191
1339
|
hdlink->files = file;
|
|
1192
|
-
return;
|
|
1340
|
+
return (ARCHIVE_OK);
|
|
1193
1341
|
}
|
|
1194
1342
|
}
|
|
1195
1343
|
hdlink = malloc(sizeof(*hdlink));
|
|
1196
|
-
if (hdlink == NULL)
|
|
1197
|
-
|
|
1344
|
+
if (hdlink == NULL) {
|
|
1345
|
+
archive_set_error(&a->archive, ENOMEM, "Out of memory");
|
|
1346
|
+
return (ARCHIVE_FATAL);
|
|
1347
|
+
}
|
|
1198
1348
|
file->hdnext = NULL;
|
|
1199
1349
|
hdlink->id = file->link;
|
|
1200
1350
|
hdlink->cnt = 1;
|
|
1201
1351
|
hdlink->files = file;
|
|
1202
1352
|
hdlink->next = xar->hdlink_list;
|
|
1203
1353
|
xar->hdlink_list = hdlink;
|
|
1354
|
+
return (ARCHIVE_OK);
|
|
1204
1355
|
}
|
|
1205
1356
|
|
|
1206
1357
|
static void
|
|
@@ -1362,6 +1513,13 @@ decompression_init(struct archive_read *a, enum enctype encoding)
|
|
|
1362
1513
|
break;
|
|
1363
1514
|
#endif
|
|
1364
1515
|
#if defined(HAVE_LZMA_H) && defined(HAVE_LIBLZMA)
|
|
1516
|
+
#if LZMA_VERSION_MAJOR >= 5
|
|
1517
|
+
/* Effectively disable the limiter. */
|
|
1518
|
+
#define LZMA_MEMLIMIT UINT64_MAX
|
|
1519
|
+
#else
|
|
1520
|
+
/* NOTE: This needs to check memory size which running system has. */
|
|
1521
|
+
#define LZMA_MEMLIMIT (1U << 30)
|
|
1522
|
+
#endif
|
|
1365
1523
|
case XZ:
|
|
1366
1524
|
case LZMA:
|
|
1367
1525
|
if (xar->lzstream_valid) {
|
|
@@ -1370,11 +1528,11 @@ decompression_init(struct archive_read *a, enum enctype encoding)
|
|
|
1370
1528
|
}
|
|
1371
1529
|
if (xar->entry_encoding == XZ)
|
|
1372
1530
|
r = lzma_stream_decoder(&(xar->lzstream),
|
|
1373
|
-
|
|
1531
|
+
LZMA_MEMLIMIT,/* memlimit */
|
|
1374
1532
|
LZMA_CONCATENATED);
|
|
1375
1533
|
else
|
|
1376
1534
|
r = lzma_alone_decoder(&(xar->lzstream),
|
|
1377
|
-
|
|
1535
|
+
LZMA_MEMLIMIT);/* memlimit */
|
|
1378
1536
|
if (r != LZMA_OK) {
|
|
1379
1537
|
switch (r) {
|
|
1380
1538
|
case LZMA_MEM_ERROR:
|
|
@@ -1404,34 +1562,6 @@ decompression_init(struct archive_read *a, enum enctype encoding)
|
|
|
1404
1562
|
xar->lzstream.total_in = 0;
|
|
1405
1563
|
xar->lzstream.total_out = 0;
|
|
1406
1564
|
break;
|
|
1407
|
-
#elif defined(HAVE_LZMADEC_H) && defined(HAVE_LIBLZMADEC)
|
|
1408
|
-
case LZMA:
|
|
1409
|
-
if (xar->lzstream_valid)
|
|
1410
|
-
lzmadec_end(&(xar->lzstream));
|
|
1411
|
-
r = lzmadec_init(&(xar->lzstream));
|
|
1412
|
-
if (r != LZMADEC_OK) {
|
|
1413
|
-
switch (r) {
|
|
1414
|
-
case LZMADEC_HEADER_ERROR:
|
|
1415
|
-
archive_set_error(&a->archive,
|
|
1416
|
-
ARCHIVE_ERRNO_MISC,
|
|
1417
|
-
"Internal error initializing "
|
|
1418
|
-
"compression library: "
|
|
1419
|
-
"invalid header");
|
|
1420
|
-
break;
|
|
1421
|
-
case LZMADEC_MEM_ERROR:
|
|
1422
|
-
archive_set_error(&a->archive,
|
|
1423
|
-
ENOMEM,
|
|
1424
|
-
"Internal error initializing "
|
|
1425
|
-
"compression library: "
|
|
1426
|
-
"out of memory");
|
|
1427
|
-
break;
|
|
1428
|
-
}
|
|
1429
|
-
return (ARCHIVE_FATAL);
|
|
1430
|
-
}
|
|
1431
|
-
xar->lzstream_valid = 1;
|
|
1432
|
-
xar->lzstream.total_in = 0;
|
|
1433
|
-
xar->lzstream.total_out = 0;
|
|
1434
|
-
break;
|
|
1435
1565
|
#endif
|
|
1436
1566
|
/*
|
|
1437
1567
|
* Unsupported compression.
|
|
@@ -1441,9 +1571,7 @@ decompression_init(struct archive_read *a, enum enctype encoding)
|
|
|
1441
1571
|
case BZIP2:
|
|
1442
1572
|
#endif
|
|
1443
1573
|
#if !defined(HAVE_LZMA_H) || !defined(HAVE_LIBLZMA)
|
|
1444
|
-
#if !defined(HAVE_LZMADEC_H) || !defined(HAVE_LIBLZMADEC)
|
|
1445
1574
|
case LZMA:
|
|
1446
|
-
#endif
|
|
1447
1575
|
case XZ:
|
|
1448
1576
|
#endif
|
|
1449
1577
|
switch (xar->entry_encoding) {
|
|
@@ -1473,9 +1601,17 @@ decompress(struct archive_read *a, const void **buff, size_t *outbytes,
|
|
|
1473
1601
|
avail_in = *used;
|
|
1474
1602
|
outbuff = (void *)(uintptr_t)*buff;
|
|
1475
1603
|
if (outbuff == NULL) {
|
|
1476
|
-
outbuff
|
|
1604
|
+
if (xar->outbuff == NULL) {
|
|
1605
|
+
xar->outbuff = malloc(OUTBUFF_SIZE);
|
|
1606
|
+
if (xar->outbuff == NULL) {
|
|
1607
|
+
archive_set_error(&a->archive, ENOMEM,
|
|
1608
|
+
"Couldn't allocate memory for out buffer");
|
|
1609
|
+
return (ARCHIVE_FATAL);
|
|
1610
|
+
}
|
|
1611
|
+
}
|
|
1612
|
+
outbuff = xar->outbuff;
|
|
1477
1613
|
*buff = outbuff;
|
|
1478
|
-
avail_out =
|
|
1614
|
+
avail_out = OUTBUFF_SIZE;
|
|
1479
1615
|
} else
|
|
1480
1616
|
avail_out = *outbytes;
|
|
1481
1617
|
switch (xar->rd_encoding) {
|
|
@@ -1555,51 +1691,17 @@ decompress(struct archive_read *a, const void **buff, size_t *outbytes,
|
|
|
1555
1691
|
*used = avail_in - xar->lzstream.avail_in;
|
|
1556
1692
|
*outbytes = avail_out - xar->lzstream.avail_out;
|
|
1557
1693
|
break;
|
|
1558
|
-
#elif defined(HAVE_LZMADEC_H) && defined(HAVE_LIBLZMADEC)
|
|
1559
|
-
case LZMA:
|
|
1560
|
-
xar->lzstream.next_in = (unsigned char *)(uintptr_t)b;
|
|
1561
|
-
xar->lzstream.avail_in = avail_in;
|
|
1562
|
-
xar->lzstream.next_out = (unsigned char *)outbuff;
|
|
1563
|
-
xar->lzstream.avail_out = avail_out;
|
|
1564
|
-
r = lzmadec_decode(&(xar->lzstream), 0);
|
|
1565
|
-
switch (r) {
|
|
1566
|
-
case LZMADEC_STREAM_END: /* Found end of stream. */
|
|
1567
|
-
switch (lzmadec_end(&(xar->lzstream))) {
|
|
1568
|
-
case LZMADEC_OK:
|
|
1569
|
-
break;
|
|
1570
|
-
default:
|
|
1571
|
-
archive_set_error(&(a->archive),
|
|
1572
|
-
ARCHIVE_ERRNO_MISC,
|
|
1573
|
-
"Failed to clean up lzmadec decompressor");
|
|
1574
|
-
return (ARCHIVE_FATAL);
|
|
1575
|
-
}
|
|
1576
|
-
xar->lzstream_valid = 0;
|
|
1577
|
-
/* FALLTHROUGH */
|
|
1578
|
-
case LZMADEC_OK: /* Decompressor made some progress. */
|
|
1579
|
-
break;
|
|
1580
|
-
default:
|
|
1581
|
-
archive_set_error(&(a->archive),
|
|
1582
|
-
ARCHIVE_ERRNO_MISC,
|
|
1583
|
-
"lzmadec decompression failed(%d)",
|
|
1584
|
-
r);
|
|
1585
|
-
return (ARCHIVE_FATAL);
|
|
1586
|
-
}
|
|
1587
|
-
*used = avail_in - xar->lzstream.avail_in;
|
|
1588
|
-
*outbytes = avail_out - xar->lzstream.avail_out;
|
|
1589
|
-
break;
|
|
1590
1694
|
#endif
|
|
1591
1695
|
#if !defined(HAVE_BZLIB_H) || !defined(BZ_CONFIG_ERROR)
|
|
1592
1696
|
case BZIP2:
|
|
1593
1697
|
#endif
|
|
1594
1698
|
#if !defined(HAVE_LZMA_H) || !defined(HAVE_LIBLZMA)
|
|
1595
|
-
#if !defined(HAVE_LZMADEC_H) || !defined(HAVE_LIBLZMADEC)
|
|
1596
1699
|
case LZMA:
|
|
1597
|
-
#endif
|
|
1598
1700
|
case XZ:
|
|
1599
1701
|
#endif
|
|
1600
1702
|
case NONE:
|
|
1601
1703
|
default:
|
|
1602
|
-
if (outbuff == xar->
|
|
1704
|
+
if (outbuff == xar->outbuff) {
|
|
1603
1705
|
*buff = b;
|
|
1604
1706
|
*used = avail_in;
|
|
1605
1707
|
*outbytes = avail_in;
|
|
@@ -1657,6 +1759,16 @@ decompression_cleanup(struct archive_read *a)
|
|
|
1657
1759
|
return (r);
|
|
1658
1760
|
}
|
|
1659
1761
|
|
|
1762
|
+
static void
|
|
1763
|
+
checksum_cleanup(struct archive_read *a) {
|
|
1764
|
+
struct xar *xar;
|
|
1765
|
+
|
|
1766
|
+
xar = (struct xar *)(a->format->data);
|
|
1767
|
+
|
|
1768
|
+
_checksum_final(&(xar->a_sumwrk), NULL, 0);
|
|
1769
|
+
_checksum_final(&(xar->e_sumwrk), NULL, 0);
|
|
1770
|
+
}
|
|
1771
|
+
|
|
1660
1772
|
static void
|
|
1661
1773
|
xmlattr_cleanup(struct xmlattr_list *list)
|
|
1662
1774
|
{
|
|
@@ -1674,19 +1786,21 @@ xmlattr_cleanup(struct xmlattr_list *list)
|
|
|
1674
1786
|
list->last = &(list->first);
|
|
1675
1787
|
}
|
|
1676
1788
|
|
|
1677
|
-
static
|
|
1678
|
-
file_new(struct xar *xar, struct xmlattr_list *list)
|
|
1789
|
+
static int
|
|
1790
|
+
file_new(struct archive_read *a, struct xar *xar, struct xmlattr_list *list)
|
|
1679
1791
|
{
|
|
1680
1792
|
struct xar_file *file;
|
|
1681
1793
|
struct xmlattr *attr;
|
|
1682
1794
|
|
|
1683
1795
|
file = calloc(1, sizeof(*file));
|
|
1684
|
-
if (file == NULL)
|
|
1685
|
-
|
|
1796
|
+
if (file == NULL) {
|
|
1797
|
+
archive_set_error(&a->archive, ENOMEM, "Out of memory");
|
|
1798
|
+
return (ARCHIVE_FATAL);
|
|
1799
|
+
}
|
|
1686
1800
|
file->parent = xar->file;
|
|
1687
1801
|
file->mode = 0777 | AE_IFREG;
|
|
1688
|
-
file->atime =
|
|
1689
|
-
file->mtime =
|
|
1802
|
+
file->atime = 0;
|
|
1803
|
+
file->mtime = 0;
|
|
1690
1804
|
xar->file = file;
|
|
1691
1805
|
xar->xattr = NULL;
|
|
1692
1806
|
for (attr = list->first; attr != NULL; attr = attr->next) {
|
|
@@ -1694,7 +1808,9 @@ file_new(struct xar *xar, struct xmlattr_list *list)
|
|
|
1694
1808
|
file->id = atol10(attr->value, strlen(attr->value));
|
|
1695
1809
|
}
|
|
1696
1810
|
file->nlink = 1;
|
|
1697
|
-
heap_add_entry(&(xar->file_queue), file)
|
|
1811
|
+
if (heap_add_entry(a, &(xar->file_queue), file) != ARCHIVE_OK)
|
|
1812
|
+
return (ARCHIVE_FATAL);
|
|
1813
|
+
return (ARCHIVE_OK);
|
|
1698
1814
|
}
|
|
1699
1815
|
|
|
1700
1816
|
static void
|
|
@@ -1719,15 +1835,17 @@ file_free(struct xar_file *file)
|
|
|
1719
1835
|
free(file);
|
|
1720
1836
|
}
|
|
1721
1837
|
|
|
1722
|
-
static
|
|
1723
|
-
xattr_new(struct xar *xar, struct xmlattr_list *list)
|
|
1838
|
+
static int
|
|
1839
|
+
xattr_new(struct archive_read *a, struct xar *xar, struct xmlattr_list *list)
|
|
1724
1840
|
{
|
|
1725
1841
|
struct xattr *xattr, **nx;
|
|
1726
1842
|
struct xmlattr *attr;
|
|
1727
1843
|
|
|
1728
1844
|
xattr = calloc(1, sizeof(*xattr));
|
|
1729
|
-
if (xattr == NULL)
|
|
1730
|
-
|
|
1845
|
+
if (xattr == NULL) {
|
|
1846
|
+
archive_set_error(&a->archive, ENOMEM, "Out of memory");
|
|
1847
|
+
return (ARCHIVE_FATAL);
|
|
1848
|
+
}
|
|
1731
1849
|
xar->xattr = xattr;
|
|
1732
1850
|
for (attr = list->first; attr != NULL; attr = attr->next) {
|
|
1733
1851
|
if (strcmp(attr->name, "id") == 0)
|
|
@@ -1741,6 +1859,8 @@ xattr_new(struct xar *xar, struct xmlattr_list *list)
|
|
|
1741
1859
|
}
|
|
1742
1860
|
xattr->next = *nx;
|
|
1743
1861
|
*nx = xattr;
|
|
1862
|
+
|
|
1863
|
+
return (ARCHIVE_OK);
|
|
1744
1864
|
}
|
|
1745
1865
|
|
|
1746
1866
|
static void
|
|
@@ -1796,25 +1916,28 @@ getsumalgorithm(struct xmlattr_list *list)
|
|
|
1796
1916
|
return (alg);
|
|
1797
1917
|
}
|
|
1798
1918
|
|
|
1799
|
-
static
|
|
1800
|
-
unknowntag_start(struct xar *xar, const char *name)
|
|
1919
|
+
static int
|
|
1920
|
+
unknowntag_start(struct archive_read *a, struct xar *xar, const char *name)
|
|
1801
1921
|
{
|
|
1802
1922
|
struct unknown_tag *tag;
|
|
1803
1923
|
|
|
1804
|
-
#if DEBUG
|
|
1805
|
-
fprintf(stderr, "unknowntag_start:%s\n", name);
|
|
1806
|
-
#endif
|
|
1807
1924
|
tag = malloc(sizeof(*tag));
|
|
1808
|
-
if (tag == NULL)
|
|
1809
|
-
|
|
1925
|
+
if (tag == NULL) {
|
|
1926
|
+
archive_set_error(&a->archive, ENOMEM, "Out of memory");
|
|
1927
|
+
return (ARCHIVE_FATAL);
|
|
1928
|
+
}
|
|
1810
1929
|
tag->next = xar->unknowntags;
|
|
1811
1930
|
archive_string_init(&(tag->name));
|
|
1812
1931
|
archive_strcpy(&(tag->name), name);
|
|
1813
1932
|
if (xar->unknowntags == NULL) {
|
|
1933
|
+
#if DEBUG
|
|
1934
|
+
fprintf(stderr, "UNKNOWNTAG_START:%s\n", name);
|
|
1935
|
+
#endif
|
|
1814
1936
|
xar->xmlsts_unknown = xar->xmlsts;
|
|
1815
1937
|
xar->xmlsts = UNKNOWN;
|
|
1816
1938
|
}
|
|
1817
1939
|
xar->unknowntags = tag;
|
|
1940
|
+
return (ARCHIVE_OK);
|
|
1818
1941
|
}
|
|
1819
1942
|
|
|
1820
1943
|
static void
|
|
@@ -1822,9 +1945,6 @@ unknowntag_end(struct xar *xar, const char *name)
|
|
|
1822
1945
|
{
|
|
1823
1946
|
struct unknown_tag *tag;
|
|
1824
1947
|
|
|
1825
|
-
#if DEBUG
|
|
1826
|
-
fprintf(stderr, "unknowntag_end:%s\n", name);
|
|
1827
|
-
#endif
|
|
1828
1948
|
tag = xar->unknowntags;
|
|
1829
1949
|
if (tag == NULL || name == NULL)
|
|
1830
1950
|
return;
|
|
@@ -1832,19 +1952,21 @@ unknowntag_end(struct xar *xar, const char *name)
|
|
|
1832
1952
|
xar->unknowntags = tag->next;
|
|
1833
1953
|
archive_string_free(&(tag->name));
|
|
1834
1954
|
free(tag);
|
|
1835
|
-
if (xar->unknowntags == NULL)
|
|
1955
|
+
if (xar->unknowntags == NULL) {
|
|
1956
|
+
#if DEBUG
|
|
1957
|
+
fprintf(stderr, "UNKNOWNTAG_END:%s\n", name);
|
|
1958
|
+
#endif
|
|
1836
1959
|
xar->xmlsts = xar->xmlsts_unknown;
|
|
1960
|
+
}
|
|
1837
1961
|
}
|
|
1838
1962
|
}
|
|
1839
1963
|
|
|
1840
|
-
static
|
|
1841
|
-
xml_start(
|
|
1964
|
+
static int
|
|
1965
|
+
xml_start(struct archive_read *a, const char *name, struct xmlattr_list *list)
|
|
1842
1966
|
{
|
|
1843
|
-
struct archive_read *a;
|
|
1844
1967
|
struct xar *xar;
|
|
1845
1968
|
struct xmlattr *attr;
|
|
1846
1969
|
|
|
1847
|
-
a = (struct archive_read *)userData;
|
|
1848
1970
|
xar = (struct xar *)(a->format->data);
|
|
1849
1971
|
|
|
1850
1972
|
#if DEBUG
|
|
@@ -1859,13 +1981,15 @@ xml_start(void *userData, const char *name, struct xmlattr_list *list)
|
|
|
1859
1981
|
if (strcmp(name, "xar") == 0)
|
|
1860
1982
|
xar->xmlsts = XAR;
|
|
1861
1983
|
else
|
|
1862
|
-
unknowntag_start(xar, name)
|
|
1984
|
+
if (unknowntag_start(a, xar, name) != ARCHIVE_OK)
|
|
1985
|
+
return (ARCHIVE_FATAL);
|
|
1863
1986
|
break;
|
|
1864
1987
|
case XAR:
|
|
1865
1988
|
if (strcmp(name, "toc") == 0)
|
|
1866
1989
|
xar->xmlsts = TOC;
|
|
1867
1990
|
else
|
|
1868
|
-
unknowntag_start(xar, name)
|
|
1991
|
+
if (unknowntag_start(a, xar, name) != ARCHIVE_OK)
|
|
1992
|
+
return (ARCHIVE_FATAL);
|
|
1869
1993
|
break;
|
|
1870
1994
|
case TOC:
|
|
1871
1995
|
if (strcmp(name, "creation-time") == 0)
|
|
@@ -1873,11 +1997,13 @@ xml_start(void *userData, const char *name, struct xmlattr_list *list)
|
|
|
1873
1997
|
else if (strcmp(name, "checksum") == 0)
|
|
1874
1998
|
xar->xmlsts = TOC_CHECKSUM;
|
|
1875
1999
|
else if (strcmp(name, "file") == 0) {
|
|
1876
|
-
file_new(xar, list)
|
|
2000
|
+
if (file_new(a, xar, list) != ARCHIVE_OK)
|
|
2001
|
+
return (ARCHIVE_FATAL);
|
|
1877
2002
|
xar->xmlsts = TOC_FILE;
|
|
1878
2003
|
}
|
|
1879
2004
|
else
|
|
1880
|
-
unknowntag_start(xar, name)
|
|
2005
|
+
if (unknowntag_start(a, xar, name) != ARCHIVE_OK)
|
|
2006
|
+
return (ARCHIVE_FATAL);
|
|
1881
2007
|
break;
|
|
1882
2008
|
case TOC_CHECKSUM:
|
|
1883
2009
|
if (strcmp(name, "offset") == 0)
|
|
@@ -1885,16 +2011,19 @@ xml_start(void *userData, const char *name, struct xmlattr_list *list)
|
|
|
1885
2011
|
else if (strcmp(name, "size") == 0)
|
|
1886
2012
|
xar->xmlsts = TOC_CHECKSUM_SIZE;
|
|
1887
2013
|
else
|
|
1888
|
-
unknowntag_start(xar, name)
|
|
2014
|
+
if (unknowntag_start(a, xar, name) != ARCHIVE_OK)
|
|
2015
|
+
return (ARCHIVE_FATAL);
|
|
1889
2016
|
break;
|
|
1890
2017
|
case TOC_FILE:
|
|
1891
2018
|
if (strcmp(name, "file") == 0) {
|
|
1892
|
-
file_new(xar, list)
|
|
2019
|
+
if (file_new(a, xar, list) != ARCHIVE_OK)
|
|
2020
|
+
return (ARCHIVE_FATAL);
|
|
1893
2021
|
}
|
|
1894
2022
|
else if (strcmp(name, "data") == 0)
|
|
1895
2023
|
xar->xmlsts = FILE_DATA;
|
|
1896
2024
|
else if (strcmp(name, "ea") == 0) {
|
|
1897
|
-
xattr_new(xar, list)
|
|
2025
|
+
if (xattr_new(a, xar, list) != ARCHIVE_OK)
|
|
2026
|
+
return (ARCHIVE_FATAL);
|
|
1898
2027
|
xar->xmlsts = FILE_EA;
|
|
1899
2028
|
}
|
|
1900
2029
|
else if (strcmp(name, "ctime") == 0)
|
|
@@ -1931,10 +2060,12 @@ xml_start(void *userData, const char *name, struct xmlattr_list *list)
|
|
|
1931
2060
|
xar->file->hdnext = xar->hdlink_orgs;
|
|
1932
2061
|
xar->hdlink_orgs = xar->file;
|
|
1933
2062
|
} else {
|
|
1934
|
-
xar->file->link = atol10(attr->value,
|
|
2063
|
+
xar->file->link = (unsigned)atol10(attr->value,
|
|
1935
2064
|
strlen(attr->value));
|
|
1936
2065
|
if (xar->file->link > 0)
|
|
1937
|
-
add_link(xar, xar->file)
|
|
2066
|
+
if (add_link(a, xar, xar->file) != ARCHIVE_OK) {
|
|
2067
|
+
return (ARCHIVE_FATAL);
|
|
2068
|
+
};
|
|
1938
2069
|
}
|
|
1939
2070
|
}
|
|
1940
2071
|
}
|
|
@@ -1954,7 +2085,8 @@ xml_start(void *userData, const char *name, struct xmlattr_list *list)
|
|
|
1954
2085
|
else if (strcmp(name, "ext2") == 0)
|
|
1955
2086
|
xar->xmlsts = FILE_EXT2;
|
|
1956
2087
|
else
|
|
1957
|
-
unknowntag_start(xar, name)
|
|
2088
|
+
if (unknowntag_start(a, xar, name) != ARCHIVE_OK)
|
|
2089
|
+
return (ARCHIVE_FATAL);
|
|
1958
2090
|
break;
|
|
1959
2091
|
case FILE_DATA:
|
|
1960
2092
|
if (strcmp(name, "length") == 0)
|
|
@@ -1978,7 +2110,8 @@ xml_start(void *userData, const char *name, struct xmlattr_list *list)
|
|
|
1978
2110
|
else if (strcmp(name, "content") == 0)
|
|
1979
2111
|
xar->xmlsts = FILE_DATA_CONTENT;
|
|
1980
2112
|
else
|
|
1981
|
-
unknowntag_start(xar, name)
|
|
2113
|
+
if (unknowntag_start(a, xar, name) != ARCHIVE_OK)
|
|
2114
|
+
return (ARCHIVE_FATAL);
|
|
1982
2115
|
break;
|
|
1983
2116
|
case FILE_DEVICE:
|
|
1984
2117
|
if (strcmp(name, "major") == 0)
|
|
@@ -1986,10 +2119,12 @@ xml_start(void *userData, const char *name, struct xmlattr_list *list)
|
|
|
1986
2119
|
else if (strcmp(name, "minor") == 0)
|
|
1987
2120
|
xar->xmlsts = FILE_DEVICE_MINOR;
|
|
1988
2121
|
else
|
|
1989
|
-
unknowntag_start(xar, name)
|
|
2122
|
+
if (unknowntag_start(a, xar, name) != ARCHIVE_OK)
|
|
2123
|
+
return (ARCHIVE_FATAL);
|
|
1990
2124
|
break;
|
|
1991
2125
|
case FILE_DATA_CONTENT:
|
|
1992
|
-
unknowntag_start(xar, name)
|
|
2126
|
+
if (unknowntag_start(a, xar, name) != ARCHIVE_OK)
|
|
2127
|
+
return (ARCHIVE_FATAL);
|
|
1993
2128
|
break;
|
|
1994
2129
|
case FILE_EA:
|
|
1995
2130
|
if (strcmp(name, "length") == 0)
|
|
@@ -2010,25 +2145,29 @@ xml_start(void *userData, const char *name, struct xmlattr_list *list)
|
|
|
2010
2145
|
else if (strcmp(name, "fstype") == 0)
|
|
2011
2146
|
xar->xmlsts = FILE_EA_FSTYPE;
|
|
2012
2147
|
else
|
|
2013
|
-
unknowntag_start(xar, name)
|
|
2148
|
+
if (unknowntag_start(a, xar, name) != ARCHIVE_OK)
|
|
2149
|
+
return (ARCHIVE_FATAL);
|
|
2014
2150
|
break;
|
|
2015
2151
|
case FILE_ACL:
|
|
2016
2152
|
if (strcmp(name, "appleextended") == 0)
|
|
2017
2153
|
xar->xmlsts = FILE_ACL_APPLEEXTENDED;
|
|
2018
|
-
if (strcmp(name, "default") == 0)
|
|
2154
|
+
else if (strcmp(name, "default") == 0)
|
|
2019
2155
|
xar->xmlsts = FILE_ACL_DEFAULT;
|
|
2020
2156
|
else if (strcmp(name, "access") == 0)
|
|
2021
2157
|
xar->xmlsts = FILE_ACL_ACCESS;
|
|
2022
2158
|
else
|
|
2023
|
-
unknowntag_start(xar, name)
|
|
2159
|
+
if (unknowntag_start(a, xar, name) != ARCHIVE_OK)
|
|
2160
|
+
return (ARCHIVE_FATAL);
|
|
2024
2161
|
break;
|
|
2025
2162
|
case FILE_FLAGS:
|
|
2026
2163
|
if (!xml_parse_file_flags(xar, name))
|
|
2027
|
-
unknowntag_start(xar, name)
|
|
2164
|
+
if (unknowntag_start(a, xar, name) != ARCHIVE_OK)
|
|
2165
|
+
return (ARCHIVE_FATAL);
|
|
2028
2166
|
break;
|
|
2029
2167
|
case FILE_EXT2:
|
|
2030
2168
|
if (!xml_parse_file_ext2(xar, name))
|
|
2031
|
-
unknowntag_start(xar, name)
|
|
2169
|
+
if (unknowntag_start(a, xar, name) != ARCHIVE_OK)
|
|
2170
|
+
return (ARCHIVE_FATAL);
|
|
2032
2171
|
break;
|
|
2033
2172
|
case TOC_CREATION_TIME:
|
|
2034
2173
|
case TOC_CHECKSUM_OFFSET:
|
|
@@ -2096,9 +2235,11 @@ xml_start(void *userData, const char *name, struct xmlattr_list *list)
|
|
|
2096
2235
|
case FILE_EXT2_TopDir:
|
|
2097
2236
|
case FILE_EXT2_Reserved:
|
|
2098
2237
|
case UNKNOWN:
|
|
2099
|
-
unknowntag_start(xar, name)
|
|
2238
|
+
if (unknowntag_start(a, xar, name) != ARCHIVE_OK)
|
|
2239
|
+
return (ARCHIVE_FATAL);
|
|
2100
2240
|
break;
|
|
2101
2241
|
}
|
|
2242
|
+
return (ARCHIVE_OK);
|
|
2102
2243
|
}
|
|
2103
2244
|
|
|
2104
2245
|
static void
|
|
@@ -2470,28 +2611,29 @@ static const int base64[256] = {
|
|
|
2470
2611
|
};
|
|
2471
2612
|
|
|
2472
2613
|
static void
|
|
2473
|
-
strappend_base64(struct
|
|
2614
|
+
strappend_base64(struct xar *xar,
|
|
2615
|
+
struct archive_string *as, const char *s, size_t l)
|
|
2474
2616
|
{
|
|
2475
2617
|
unsigned char buff[256];
|
|
2476
2618
|
unsigned char *out;
|
|
2477
2619
|
const unsigned char *b;
|
|
2478
2620
|
size_t len;
|
|
2479
2621
|
|
|
2622
|
+
(void)xar; /* UNUSED */
|
|
2480
2623
|
len = 0;
|
|
2481
2624
|
out = buff;
|
|
2482
2625
|
b = (const unsigned char *)s;
|
|
2483
2626
|
while (l > 0) {
|
|
2484
2627
|
int n = 0;
|
|
2485
2628
|
|
|
2486
|
-
if (
|
|
2487
|
-
|
|
2488
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
}
|
|
2629
|
+
if (base64[b[0]] < 0 || base64[b[1]] < 0)
|
|
2630
|
+
break;
|
|
2631
|
+
n = base64[*b++] << 18;
|
|
2632
|
+
n |= base64[*b++] << 12;
|
|
2633
|
+
*out++ = n >> 16;
|
|
2634
|
+
len++;
|
|
2635
|
+
l -= 2;
|
|
2636
|
+
|
|
2495
2637
|
if (l > 0) {
|
|
2496
2638
|
if (base64[*b] < 0)
|
|
2497
2639
|
break;
|
|
@@ -2518,6 +2660,14 @@ strappend_base64(struct archive_string *as, const char *s, size_t l)
|
|
|
2518
2660
|
archive_strncat(as, (const char *)buff, len);
|
|
2519
2661
|
}
|
|
2520
2662
|
|
|
2663
|
+
static int
|
|
2664
|
+
is_string(const char *known, const char *data, size_t len)
|
|
2665
|
+
{
|
|
2666
|
+
if (strlen(known) != len)
|
|
2667
|
+
return -1;
|
|
2668
|
+
return memcmp(data, known, len);
|
|
2669
|
+
}
|
|
2670
|
+
|
|
2521
2671
|
static void
|
|
2522
2672
|
xml_data(void *userData, const char *s, int len)
|
|
2523
2673
|
{
|
|
@@ -2530,9 +2680,9 @@ xml_data(void *userData, const char *s, int len)
|
|
|
2530
2680
|
#if DEBUG
|
|
2531
2681
|
{
|
|
2532
2682
|
char buff[1024];
|
|
2533
|
-
if (len > sizeof(buff)-1)
|
|
2534
|
-
len = sizeof(buff)-1;
|
|
2535
|
-
|
|
2683
|
+
if (len > (int)(sizeof(buff)-1))
|
|
2684
|
+
len = (int)(sizeof(buff)-1);
|
|
2685
|
+
strncpy(buff, s, len);
|
|
2536
2686
|
buff[len] = 0;
|
|
2537
2687
|
fprintf(stderr, "\tlen=%d:\"%s\"\n", len, buff);
|
|
2538
2688
|
}
|
|
@@ -2558,9 +2708,10 @@ xml_data(void *userData, const char *s, int len)
|
|
|
2558
2708
|
archive_strappend_char(&(xar->file->pathname), '/');
|
|
2559
2709
|
}
|
|
2560
2710
|
xar->file->has |= HAS_PATHNAME;
|
|
2561
|
-
if (xar->base64text)
|
|
2562
|
-
strappend_base64(
|
|
2563
|
-
|
|
2711
|
+
if (xar->base64text) {
|
|
2712
|
+
strappend_base64(xar,
|
|
2713
|
+
&(xar->file->pathname), s, len);
|
|
2714
|
+
} else
|
|
2564
2715
|
archive_strncat(&(xar->file->pathname), s, len);
|
|
2565
2716
|
break;
|
|
2566
2717
|
case FILE_LINK:
|
|
@@ -2568,26 +2719,26 @@ xml_data(void *userData, const char *s, int len)
|
|
|
2568
2719
|
archive_strncpy(&(xar->file->symlink), s, len);
|
|
2569
2720
|
break;
|
|
2570
2721
|
case FILE_TYPE:
|
|
2571
|
-
if (
|
|
2572
|
-
|
|
2722
|
+
if (is_string("file", s, len) == 0 ||
|
|
2723
|
+
is_string("hardlink", s, len) == 0)
|
|
2573
2724
|
xar->file->mode =
|
|
2574
2725
|
(xar->file->mode & ~AE_IFMT) | AE_IFREG;
|
|
2575
|
-
if (
|
|
2726
|
+
if (is_string("directory", s, len) == 0)
|
|
2576
2727
|
xar->file->mode =
|
|
2577
2728
|
(xar->file->mode & ~AE_IFMT) | AE_IFDIR;
|
|
2578
|
-
if (
|
|
2729
|
+
if (is_string("symlink", s, len) == 0)
|
|
2579
2730
|
xar->file->mode =
|
|
2580
2731
|
(xar->file->mode & ~AE_IFMT) | AE_IFLNK;
|
|
2581
|
-
if (
|
|
2732
|
+
if (is_string("character special", s, len) == 0)
|
|
2582
2733
|
xar->file->mode =
|
|
2583
2734
|
(xar->file->mode & ~AE_IFMT) | AE_IFCHR;
|
|
2584
|
-
if (
|
|
2735
|
+
if (is_string("block special", s, len) == 0)
|
|
2585
2736
|
xar->file->mode =
|
|
2586
2737
|
(xar->file->mode & ~AE_IFMT) | AE_IFBLK;
|
|
2587
|
-
if (
|
|
2738
|
+
if (is_string("socket", s, len) == 0)
|
|
2588
2739
|
xar->file->mode =
|
|
2589
2740
|
(xar->file->mode & ~AE_IFMT) | AE_IFSOCK;
|
|
2590
|
-
if (
|
|
2741
|
+
if (is_string("fifo", s, len) == 0)
|
|
2591
2742
|
xar->file->mode =
|
|
2592
2743
|
(xar->file->mode & ~AE_IFMT) | AE_IFIFO;
|
|
2593
2744
|
xar->file->has |= HAS_TYPE;
|
|
@@ -2612,7 +2763,7 @@ xml_data(void *userData, const char *s, int len)
|
|
|
2612
2763
|
xar->file->has |= HAS_MODE;
|
|
2613
2764
|
xar->file->mode =
|
|
2614
2765
|
(xar->file->mode & AE_IFMT) |
|
|
2615
|
-
(atol8(s, len) & ~AE_IFMT);
|
|
2766
|
+
((mode_t)(atol8(s, len)) & ~AE_IFMT);
|
|
2616
2767
|
break;
|
|
2617
2768
|
case FILE_GROUP:
|
|
2618
2769
|
xar->file->has |= HAS_GID;
|
|
@@ -2631,15 +2782,15 @@ xml_data(void *userData, const char *s, int len)
|
|
|
2631
2782
|
xar->file->uid = atol10(s, len);
|
|
2632
2783
|
break;
|
|
2633
2784
|
case FILE_CTIME:
|
|
2634
|
-
xar->file->has |= HAS_TIME;
|
|
2785
|
+
xar->file->has |= HAS_TIME | HAS_CTIME;
|
|
2635
2786
|
xar->file->ctime = parse_time(s, len);
|
|
2636
2787
|
break;
|
|
2637
2788
|
case FILE_MTIME:
|
|
2638
|
-
xar->file->has |= HAS_TIME;
|
|
2789
|
+
xar->file->has |= HAS_TIME | HAS_MTIME;
|
|
2639
2790
|
xar->file->mtime = parse_time(s, len);
|
|
2640
2791
|
break;
|
|
2641
2792
|
case FILE_ATIME:
|
|
2642
|
-
xar->file->has |= HAS_TIME;
|
|
2793
|
+
xar->file->has |= HAS_TIME | HAS_ATIME;
|
|
2643
2794
|
xar->file->atime = parse_time(s, len);
|
|
2644
2795
|
break;
|
|
2645
2796
|
case FILE_DATA_LENGTH:
|
|
@@ -2909,7 +3060,8 @@ xml_parse_file_ext2(struct xar *xar, const char *name)
|
|
|
2909
3060
|
#ifdef HAVE_LIBXML_XMLREADER_H
|
|
2910
3061
|
|
|
2911
3062
|
static int
|
|
2912
|
-
xml2_xmlattr_setup(struct
|
|
3063
|
+
xml2_xmlattr_setup(struct archive_read *a,
|
|
3064
|
+
struct xmlattr_list *list, xmlTextReaderPtr reader)
|
|
2913
3065
|
{
|
|
2914
3066
|
struct xmlattr *attr;
|
|
2915
3067
|
int r;
|
|
@@ -2919,16 +3071,25 @@ xml2_xmlattr_setup(struct xmlattr_list *list, xmlTextReaderPtr reader)
|
|
|
2919
3071
|
r = xmlTextReaderMoveToFirstAttribute(reader);
|
|
2920
3072
|
while (r == 1) {
|
|
2921
3073
|
attr = malloc(sizeof*(attr));
|
|
2922
|
-
if (attr == NULL)
|
|
2923
|
-
|
|
3074
|
+
if (attr == NULL) {
|
|
3075
|
+
archive_set_error(&a->archive, ENOMEM, "Out of memory");
|
|
3076
|
+
return (ARCHIVE_FATAL);
|
|
3077
|
+
}
|
|
2924
3078
|
attr->name = strdup(
|
|
2925
3079
|
(const char *)xmlTextReaderConstLocalName(reader));
|
|
2926
|
-
if (attr->name == NULL)
|
|
2927
|
-
|
|
3080
|
+
if (attr->name == NULL) {
|
|
3081
|
+
free(attr);
|
|
3082
|
+
archive_set_error(&a->archive, ENOMEM, "Out of memory");
|
|
3083
|
+
return (ARCHIVE_FATAL);
|
|
3084
|
+
}
|
|
2928
3085
|
attr->value = strdup(
|
|
2929
3086
|
(const char *)xmlTextReaderConstValue(reader));
|
|
2930
|
-
if (attr->value == NULL)
|
|
2931
|
-
|
|
3087
|
+
if (attr->value == NULL) {
|
|
3088
|
+
free(attr->name);
|
|
3089
|
+
free(attr);
|
|
3090
|
+
archive_set_error(&a->archive, ENOMEM, "Out of memory");
|
|
3091
|
+
return (ARCHIVE_FATAL);
|
|
3092
|
+
}
|
|
2932
3093
|
attr->next = NULL;
|
|
2933
3094
|
*list->last = attr;
|
|
2934
3095
|
list->last = &(attr->next);
|
|
@@ -2944,7 +3105,7 @@ xml2_read_cb(void *context, char *buffer, int len)
|
|
|
2944
3105
|
struct xar *xar;
|
|
2945
3106
|
const void *d;
|
|
2946
3107
|
size_t outbytes;
|
|
2947
|
-
size_t used;
|
|
3108
|
+
size_t used = 0;
|
|
2948
3109
|
int r;
|
|
2949
3110
|
|
|
2950
3111
|
a = (struct archive_read *)context;
|
|
@@ -3020,13 +3181,14 @@ xml2_read_toc(struct archive_read *a)
|
|
|
3020
3181
|
switch (type) {
|
|
3021
3182
|
case XML_READER_TYPE_ELEMENT:
|
|
3022
3183
|
empty = xmlTextReaderIsEmptyElement(reader);
|
|
3023
|
-
r = xml2_xmlattr_setup(&list, reader);
|
|
3024
|
-
if (r ==
|
|
3025
|
-
xml_start(a, name, &list);
|
|
3026
|
-
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
|
|
3184
|
+
r = xml2_xmlattr_setup(a, &list, reader);
|
|
3185
|
+
if (r == ARCHIVE_OK)
|
|
3186
|
+
r = xml_start(a, name, &list);
|
|
3187
|
+
xmlattr_cleanup(&list);
|
|
3188
|
+
if (r != ARCHIVE_OK)
|
|
3189
|
+
return (r);
|
|
3190
|
+
if (empty)
|
|
3191
|
+
xml_end(a, name);
|
|
3030
3192
|
break;
|
|
3031
3193
|
case XML_READER_TYPE_END_ELEMENT:
|
|
3032
3194
|
xml_end(a, name);
|
|
@@ -3050,52 +3212,67 @@ xml2_read_toc(struct archive_read *a)
|
|
|
3050
3212
|
|
|
3051
3213
|
#elif defined(HAVE_BSDXML_H) || defined(HAVE_EXPAT_H)
|
|
3052
3214
|
|
|
3053
|
-
static
|
|
3054
|
-
expat_xmlattr_setup(struct
|
|
3215
|
+
static int
|
|
3216
|
+
expat_xmlattr_setup(struct archive_read *a,
|
|
3217
|
+
struct xmlattr_list *list, const XML_Char **atts)
|
|
3055
3218
|
{
|
|
3056
3219
|
struct xmlattr *attr;
|
|
3220
|
+
char *name, *value;
|
|
3057
3221
|
|
|
3058
3222
|
list->first = NULL;
|
|
3059
3223
|
list->last = &(list->first);
|
|
3060
3224
|
if (atts == NULL)
|
|
3061
|
-
return;
|
|
3225
|
+
return (ARCHIVE_OK);
|
|
3062
3226
|
while (atts[0] != NULL && atts[1] != NULL) {
|
|
3063
3227
|
attr = malloc(sizeof*(attr));
|
|
3064
|
-
|
|
3065
|
-
|
|
3066
|
-
attr
|
|
3067
|
-
|
|
3068
|
-
|
|
3069
|
-
|
|
3070
|
-
|
|
3071
|
-
|
|
3228
|
+
name = strdup(atts[0]);
|
|
3229
|
+
value = strdup(atts[1]);
|
|
3230
|
+
if (attr == NULL || name == NULL || value == NULL) {
|
|
3231
|
+
archive_set_error(&a->archive, ENOMEM, "Out of memory");
|
|
3232
|
+
free(attr);
|
|
3233
|
+
free(name);
|
|
3234
|
+
free(value);
|
|
3235
|
+
return (ARCHIVE_FATAL);
|
|
3236
|
+
}
|
|
3237
|
+
attr->name = name;
|
|
3238
|
+
attr->value = value;
|
|
3072
3239
|
attr->next = NULL;
|
|
3073
3240
|
*list->last = attr;
|
|
3074
3241
|
list->last = &(attr->next);
|
|
3075
3242
|
atts += 2;
|
|
3076
3243
|
}
|
|
3244
|
+
return (ARCHIVE_OK);
|
|
3077
3245
|
}
|
|
3078
3246
|
|
|
3079
3247
|
static void
|
|
3080
3248
|
expat_start_cb(void *userData, const XML_Char *name, const XML_Char **atts)
|
|
3081
3249
|
{
|
|
3250
|
+
struct expat_userData *ud = (struct expat_userData *)userData;
|
|
3251
|
+
struct archive_read *a = ud->archive;
|
|
3082
3252
|
struct xmlattr_list list;
|
|
3253
|
+
int r;
|
|
3083
3254
|
|
|
3084
|
-
expat_xmlattr_setup(&list, atts);
|
|
3085
|
-
|
|
3255
|
+
r = expat_xmlattr_setup(a, &list, atts);
|
|
3256
|
+
if (r == ARCHIVE_OK)
|
|
3257
|
+
r = xml_start(a, (const char *)name, &list);
|
|
3086
3258
|
xmlattr_cleanup(&list);
|
|
3259
|
+
ud->state = r;
|
|
3087
3260
|
}
|
|
3088
3261
|
|
|
3089
3262
|
static void
|
|
3090
3263
|
expat_end_cb(void *userData, const XML_Char *name)
|
|
3091
3264
|
{
|
|
3092
|
-
|
|
3265
|
+
struct expat_userData *ud = (struct expat_userData *)userData;
|
|
3266
|
+
|
|
3267
|
+
xml_end(ud->archive, (const char *)name);
|
|
3093
3268
|
}
|
|
3094
3269
|
|
|
3095
3270
|
static void
|
|
3096
3271
|
expat_data_cb(void *userData, const XML_Char *s, int len)
|
|
3097
3272
|
{
|
|
3098
|
-
|
|
3273
|
+
struct expat_userData *ud = (struct expat_userData *)userData;
|
|
3274
|
+
|
|
3275
|
+
xml_data(ud->archive, s, len);
|
|
3099
3276
|
}
|
|
3100
3277
|
|
|
3101
3278
|
static int
|
|
@@ -3103,6 +3280,10 @@ expat_read_toc(struct archive_read *a)
|
|
|
3103
3280
|
{
|
|
3104
3281
|
struct xar *xar;
|
|
3105
3282
|
XML_Parser parser;
|
|
3283
|
+
struct expat_userData ud;
|
|
3284
|
+
|
|
3285
|
+
ud.state = ARCHIVE_OK;
|
|
3286
|
+
ud.archive = a;
|
|
3106
3287
|
|
|
3107
3288
|
xar = (struct xar *)(a->format->data);
|
|
3108
3289
|
|
|
@@ -3113,12 +3294,12 @@ expat_read_toc(struct archive_read *a)
|
|
|
3113
3294
|
"Couldn't allocate memory for xml parser");
|
|
3114
3295
|
return (ARCHIVE_FATAL);
|
|
3115
3296
|
}
|
|
3116
|
-
XML_SetUserData(parser,
|
|
3297
|
+
XML_SetUserData(parser, &ud);
|
|
3117
3298
|
XML_SetElementHandler(parser, expat_start_cb, expat_end_cb);
|
|
3118
3299
|
XML_SetCharacterDataHandler(parser, expat_data_cb);
|
|
3119
3300
|
xar->xmlsts = INIT;
|
|
3120
3301
|
|
|
3121
|
-
while (xar->toc_remaining) {
|
|
3302
|
+
while (xar->toc_remaining && ud.state == ARCHIVE_OK) {
|
|
3122
3303
|
enum XML_Status xr;
|
|
3123
3304
|
const void *d;
|
|
3124
3305
|
size_t outbytes;
|
|
@@ -3129,13 +3310,13 @@ expat_read_toc(struct archive_read *a)
|
|
|
3129
3310
|
r = rd_contents(a, &d, &outbytes, &used, xar->toc_remaining);
|
|
3130
3311
|
if (r != ARCHIVE_OK)
|
|
3131
3312
|
return (r);
|
|
3132
|
-
__archive_read_consume(a, used);
|
|
3133
3313
|
xar->toc_remaining -= used;
|
|
3134
3314
|
xar->offset += used;
|
|
3135
3315
|
xar->toc_total += outbytes;
|
|
3136
3316
|
PRINT_TOC(d, outbytes);
|
|
3137
3317
|
|
|
3138
3318
|
xr = XML_Parse(parser, d, outbytes, xar->toc_remaining == 0);
|
|
3319
|
+
__archive_read_consume(a, used);
|
|
3139
3320
|
if (xr == XML_STATUS_ERROR) {
|
|
3140
3321
|
XML_ParserFree(parser);
|
|
3141
3322
|
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
|
|
@@ -3144,7 +3325,7 @@ expat_read_toc(struct archive_read *a)
|
|
|
3144
3325
|
}
|
|
3145
3326
|
}
|
|
3146
3327
|
XML_ParserFree(parser);
|
|
3147
|
-
return (
|
|
3328
|
+
return (ud.state);
|
|
3148
3329
|
}
|
|
3149
3330
|
#endif /* defined(HAVE_BSDXML_H) || defined(HAVE_EXPAT_H) */
|
|
3150
3331
|
|