summaryrefslogtreecommitdiffstats
path: root/lib/libarchive
Commit message (Collapse)AuthorAgeFilesLines
* If a Zip entry has the "length at end" flag set, then just ignorekientzle2007-12-041-1/+2
| | | | | | | a length field of zero; it does not mean the body is empty. Thanks to: Lapo Luchini for sending me a JAR archive that demonstrated this bug MFC after: 3 days
* When skipping input data, don't overflow a 32-bit size_t.kientzle2007-10-271-1/+1
| | | | | | | | | | | | | | This can only happen on 32-bit systems when you're reading an uncompressed archive and the skip request is an exact multiple of 4G (e.g., skipping a tar entry with an 8G body). The symptom is that the read_ahead() ends up returning zero bytes, and the extraction stops with a premature end-of-file. Using '1' here is more correct anyway, as it allows read_ahead() to function opportunistically and minimize copying. MFC after: 5 days
* Fix reading of files that use pax 'size' attribute to store size.kientzle2007-10-241-7/+21
| | | | | | | In particular, bsdtar uses the pax 'size' attribute for any file over 8G. MFC after: 3 days
* Correct the cpio writers to not accept data for non-regular files.kientzle2007-10-123-3/+41
| | | | | | | | | In particular, the previous code led to archives that had non-empty bodies following directory entries. Not a fatal problem, as bsdtar and GNU cpio are both happy to just skip this bogus data, but it still shouldn't be there. MFC after: 3 days
* Correct the return values of the final zero-length block at EOF.kientzle2007-10-121-0/+7
| | | | | | | | Return EOF immediately if an entry in a ZIP archive has no body. In particular, the latter issue was causing bsdtar to emit spurious warnings when extracting directory entries from ZIP archives. MFC after: 3 days
* Fix the archive_write_data() function so it always returnskientzle2007-09-212-4/+86
| | | | | | | | | | | | | number of bytes written, even when used to write files to disk. Extend the test suite to verify the correct return values for archive_write_data() and archive_write_data_block(). Thanks to: Bruce Mah, for stepping in promptly to back out the earlier broken version of this fix Thanks to: Colin Percival, for pointing out the correct fix MFC after: 5 days Approved by: re (ksmith) Pointy hat: \me
* Fill in a missing 'e'kientzle2007-09-191-1/+1
| | | | | | Thanks to: Kai Wang, for pointing this out Approved by: re (bmah) MFC after: 3 days
* Revert the last commit to libarchive. It introduced some regresssions,bmah2007-09-182-33/+5
| | | | | | | | | | | most noticably the incorrect extraction of files by bsdtar. This commit reverts: src/lib/libarchive/archive_write_disk.c 1.15 src/lib/libarchive/test/test_write_disk.c 1.4 Approved by: re (implicitly)
* Correct the return value from archive_write_data()kientzle2007-09-182-5/+33
| | | | | | | | | | | (when used to restore files to disk) to match: * The documentation * The return values of this function when used to write files into an archive. Approved by: re (bmah) Pointy hat: \me MFC after: 5 days
* This commit updates libarchive to be compatible withkientzle2007-08-182-183/+600
| | | | | | | | | | | | | | | | | | | | | | | | | GNU tar 1.17's implementation of --posix --sparse, at the cost of losing compatibility with GNU tar 1.16. Fortunately, the 1.17 implementation actually makes sense, so the libarchive code is now a bit more straightforward than before. Background: GNU tar 1.16 defined a new way to store sparse files in --posix archives. Unfortunately, the implementation incorrectly inserted several blocks of null padding after each such entry. As a result, non-GNU tar implementations saw the archive as truncated after any sparse entry. This was fixed in GNU tar 1.17 at the cost of losing compatibility with GNU tar 1.16 for this new format (which is not the default, so hopefully rarely used). Libarchive recently gained support for reading the GNU tar 1.16 formats; this commit updates it to read the GNU tar 1.17 variant instead. Approved by: re (ksmith for libarchive portion) Approved by: re (blanket for libarchive_test portion) MFC after: 5 days
* Make suid/sgid restore be "opportunistic" ifkientzle2007-08-122-16/+82
| | | | | | | | | | | | | | | | | | | | | | | | owner restore is not requested. If you ask for permissions to be restored but not owner, you will now get no error if suid/sgid bits cannot be set. (It's a security hole to restore suid/sgid bits if the owner/group aren't restored.) This fixes an obscure problem where a simple "tar -xf" with no other options will sometimes fail gratuitously because of suid/sgid bits. This is causing occasional problems for people using bsdtar as a drop-in replacement for "that other tar program." ;-) Note: If you do ask for owner restore, then suid/sgid restore failures still issue an error. This only suppresses the error in the case where an suid/sgid bit restore fails because of an owner mismatch and owner restore was not requested. Approved by: re (bmah) MFC after: 7 days
* Update the tests for reading the various GNU tar sparse formats.kientzle2007-08-121-75/+267
| | | | | | | | | | | | | | | In particular: * Include a second entry in all of the test archives (to catch errors with intermediate padding) * Test the GNU tar 1.17 version of "posix sparse format 1.0" instead of the GNU tar 1.16 version (the latter is no longer supported by GNU tar). Right now, libarchive fails this test because I originally implemented the GNU tar 1.16 version of "posix sparse format 1.0". I'll fix libarchive shortly. Approved by: re (blanket, libarchive testing)
* Two minor nits:kientzle2007-07-311-0/+7
| | | | | | | | * Allow libarchive_test to compile on Interix again. * Track the test name (not just line number) when counting skipped tests. Thanks to: Joerg Sonnenberger Approved by: re (blanket; libarchive testing)
* Fix a strict aliasing warning from GCC 4.1.kientzle2007-07-201-1/+4
| | | | | | Thanks to: Joerg Sonnenberger Approved by: re (hrs) MFC after: 3 days
* archive_string_ensure() used to call exit(3) if itkientzle2007-07-155-10/+27
| | | | | | | | | | couldn't allocate more memory for a string. Change this so it returns NULL in that case, and update all of its callers to handle the error. Some of those callers can now return errors back to the client instead of calling exit(3). Approved by: re (bmah)
* Add archive_entry_copy_gname() and archive_entry_copy_uname()kientzle2007-07-154-0/+22
| | | | | | | functions. Approved by: re (bmah) MFC after: 3 days
* Clarify one test.kientzle2007-07-151-1/+1
| | | | Approved by: re (blanket, libarchive testing)
* Use an uncompressed test archive for gtar sparse format 1.0 format,kientzle2007-07-141-20/+6
| | | | | | | as that better exercises some internal read-combining logic than the compressed archive. Approved by: re (blanket, libarchive testing)
* Report each failed test once, but keep a count and report that countkientzle2007-07-143-22/+111
| | | | | | | if there was more than one. In particular, this simplifies test_tar_filenames.c, which has a tendency to be very noisy otherwise. Approved by: re (blanket, libarchive testing)
* Restore the 'break' that was inadvertently removed in 1.57 of this file.kientzle2007-07-141-0/+1
| | | | | | | Without this, hardlinks get returned as symlinks. Approved by: re (Ken Smith) MFC after: 2 days
* Extend the basic tar reading test to exercise most types ofkientzle2007-07-141-49/+388
| | | | | | entries. This doesn't cover everything yet, but it's a big improvement. Approved by: re (blanket, libarchive testing)
* Make the test for reading gtar sparse entries more robust;kientzle2007-07-131-35/+198
| | | | | | | | it now verifies that the returned blocks have the correct data at the correct file offsets, ignoring any null padding that may exist. Approved by: re (blanket, libarchive test suite)
* New test suite test_read_pax_truncated probes libarchivekientzle2007-07-132-0/+282
| | | | | | | behavior with truncated or damaged pax archives. This tests most of the cases covered by the recent security advisory. Approved by: re (blanket, libarchive test suite)
* New file "read_open_memory.c" is a custom variant ofkientzle2007-07-133-1/+153
| | | | | | | | | archive_read_open_memory.c that tries to test border cases. In particular, it copies over each returned block so that formats or decompressors that read past the end of a returned block will break. Approved by: re (blanket, libarchive test suite)
* Fix running individual tests via "libarchive_test <number> <number> ..."kientzle2007-07-131-1/+2
| | | | Approved by: re (blanket)
* Correct multiple security issues in how libarchive handles corruptcperciva2007-07-122-41/+104
| | | | | | | | tar archives, including a potentially exploitable buffer overflow. Approved by: re (kensmith, security blanket) Reviewed by: kientzle Security: FreeBSD-SA-07:05.libarchive
* Fix installworld: /usr/bin/printf isn't available then,kientzle2007-07-071-1/+3
| | | | | | | so use awk's printf for the formatting here instead. Pointy hat: Yours Truly Approved by: re
* Make test suite work with libarchive 1.3.1: Take advantage ofkientzle2007-07-0617-25/+289
| | | | | | | | | | | | | ARCHIVE_VERSION_STAMP to selectively disable tests that don't apply to that version; new "skipping()" function reports skipped tests; modify final summary to report component test failures and skips. Note: I don't currently intend to MFC the test suite itself; anyone interested should just checkout and use this version of the test suite, which should work for any library version. Approved by: re (Ken Smith, blanket)
* New "version stamp" simplifies determining the exact versionkientzle2007-07-064-23/+70
| | | | | | | | of libarchive being used. I've been taking advantage of this with a recent round of updates to libarchive_test so that it can test older and newer versions of the library. Approved by: re (Ken Smith)
* Fix 'bsdtar -t' on tape drives. Libarchive uses thekientzle2007-06-263-12/+45
| | | | | | | | | | | | | skip() callback to skip over data when reading uncompressed archives. This gets invoked, for example, during tar -t or tar -x with a filename argument. The revised code only calls [lf]seek() on regular files, instead of depending on the kernel to return an error. Thanks to: bde for explaining the implementation of lseek() Thanks to: Daniel O'Connor for testing Approved by: re (Ken Smith) MFC after: 5 days
* Ouch. I partially screwed up the last commit bykientzle2007-06-221-1/+0
| | | | | | | enabling a test that's not ready yet. <sigh> Pointy hat: /me Approved by: re@
* Support for writing the 'newc' cpio format, plus a minimal test harnesskientzle2007-06-227-0/+393
| | | | | | | for the cpio formats. Thanks to: Rudolf Marek Approved by: re@
* Track whether the current read stream supports seek(). For now, wekientzle2007-06-182-0/+22
| | | | | | | assume yes unless seek has previously failed, but I fear I'll have to avoid seeks under other circumstances. (For instance, tape drives on FreeBSD seem to return garbage from lseek().) Also, optimize away zero-byte skips.
* Make 'ar' write test a tad more portable.kientzle2007-06-131-3/+3
|
* Read support for the new GNU tar sparse formats added in gtar 1.15 andkientzle2007-06-133-84/+570
| | | | gtar 1.16.
* Add some options to libarchive_test:kientzle2007-06-131-12/+50
| | | | | -k: like make -k, try to keep going after errors. -q: quiet
* Fix a broken function declaration.kientzle2007-06-131-1/+1
|
* Options spring cleanup:sepotvin2007-06-131-1/+0
| | | | | | | | | | - Add and document the KVM and KVM_SUPPORT options that are needed for the ifmcstats(3) makefile - Garbage collect unused variables - Add missing inclusion of bsd.own.mk where needed Approved by: kan (mentor) Reviewed by: ru
* Don't lose leading '/' for pathnames exactly 101 bytes long.kientzle2007-06-112-8/+25
| | | | Also, update the test harness to exercise this case.
* libarchive 2.2.3kientzle2007-05-2973-1372/+3889
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | * "compression_program" support uses an external program * Portability: no longer uses "struct stat" as a primary data interchange structure internally * Part of the above: refactor archive_entry to separate out copy_stat() and stat() functions * More complete tests for archive_entry * Finish archive_entry_clone() * Isolate major()/minor()/makedev() in archive_entry; remove these from everywhere else. * Bug fix: properly handle decompression look-ahead at end-of-data * Bug fixes to 'ar' support * Fix memory leak in ZIP reader * Portability: better timegm() emulation in iso9660 reader * New write_disk flags to suppress auto dir creation and not overwrite newer files (for future cpio front-end) * Simplify trailing-'/' fixup when writing tar and pax * Test enhancements: fix various compiler warnings, improve portability, add lots of new tests. * Documentation: document new functions, first draft of libarchive_internals.3 MFC after: 14 days Thanks to: Joerg Sonnenberger (compression_program) Thanks to: Kai Wang (ar) Thanks to: Colin Percival (many small fixes) Thanks to: Many others who sent me various patches and problem reports.
* Replace "sizeof(struct bucket[cache_size])" withcperciva2007-05-221-4/+4
| | | | | | | | "cache_size * sizeof(struct bucket)". The former is valid in C99 but can confuse earlier compilers, while the latter is a standard idiom which all C compilers understand. Approved by: kientzle
* Don't test for NULL when it is both unnecessary (the pointer is checkedcperciva2007-05-211-1/+1
| | | | | | | | against NULL when it is first allocated) and pointless (we've already dereferenced the pointer several times). Found by: Coverity Prevent(tm) CID: 3204
* Remove pointless code: Don't assign a value to a variable when we'recperciva2007-05-211-1/+0
| | | | | | | | | | | going to overwrite it with a new value a few lines later. Visual inspection of the surrounding code indicates that the code does what it's supposed to do; i.e., the pointless code wasn't supposed to be doing something other than what it was doing. CID: 3323 Found by: Coverity Prevent(tm)
* Don't forget to free a string allocated by strdup where necessary.cperciva2007-05-191-2/+9
| | | | | Found by: Coverity Prevent Coverity ID: CID 3132
* s/@VERSION@/@ARCHIVE_VERSION@/cperciva2007-05-022-3/+3
| | | | | | | This is a no-op as far as FreeBSD is concerned, but makes libarchive more autoconf-friendly. Approved by: kientzle
* Fix a memory leak in the uname/gname lookup cache.kientzle2007-04-201-11/+11
| | | | Thanks to: VMiklos
* In libarchive: Downgrade ARCHIVE_FATAL and ARCHIVE_FAILED errors whichcperciva2007-04-161-0/+6
| | | | | | | | | | | | | | | | occur on the write side of extracting a file to ARCHIVE_WARN errors when returning them from archive_read_extract. In bsdtar: Use the return code from archive_read_data_into_fd and archive_read_extract to determine whether we should continue trying to extract an archive after one of the entries fails. This commit makes extracting a truncated tarball complain once about the archive being truncated, instead of complaining twice (once when trying to extract an entry, and once when trying to seek to the next entry). Discussed with: kientzle
* Properly cleanup the UID/GID lookup data.kientzle2007-04-151-0/+4
|
* Don't free a NULL pointer.kientzle2007-04-151-1/+2
|
* Clean up a lot of memory leaks in the libarchive test harness.kientzle2007-04-1512-0/+29
|
OpenPOWER on IntegriCloud