bsdtar / libarchive bug?

Dan Nelson dnelson at allantgroup.com
Thu Dec 8 15:46:39 PST 2005


In the last episode (Dec 08), Brian Fundakowski Feldman said:
> On Thu, Dec 08, 2005 at 05:29:06PM -0000, Steven Hartland wrote:
> > It seems bsdtar can create files it cant read. i.e. it will happily create
> > empty tar.gz files but when it comes to read them the following error
> > is output:
> > tar: Unrecognized archive format: Inappropriate file type or format
> > 
> > Having a look at libarchive shows the following code:
> >    /* An empty archive is a serious error. */
> >    if (bytes_read == 0) {
> >        archive_set_error(a, ARCHIVE_ERRNO_FILE_FORMAT,
> >            "Empty input file");
> >        return (ARCHIVE_FATAL);
> >    }
> > 
> > Which is where I expect the issue is, why would an empty archive
> > be fatal? I can see any reason for this, yes its strange but there's
> > nothing fatal about it imo.
> 
> I don't think it will "happily create empty tar.gz files", even where
> by empty you mean the tar itself inside of the gz.
> 
> {"/home/green" green at green}$ tar cfv x.tar
> tar: no files or directories specified
> {"/home/green" green at green}$ tar cfvz x.tar.gz
> tar: no files or directories specified
> {"/home/green" green at green}$ ls -l x.ta*
> ls: x.ta*: No such file or directory

I managed to make it create 0-byte files:

$ touch a
$ tar cvf b.tar --exclude a a
$ tar zcvf b.tar.gz --exclude a a
$ ls -la b.tar*
-rw-r--r--  1 dan  wheel   0 Dec  8 17:37 b.tar
-rw-r--r--  1 dan  wheel  20 Dec  8 17:37 b.tar.gz
$ gunzip -vl b.tar.gz
method  crc     date  time  compressed  uncompr. ratio uncompressed_name
defla 00000000 Dec  8 17:37        20         0   0.0% b.tar

This works because at the time tar creates the output file, it doesn't
know that I have excluded all the listed files.

I am leaning towards an empty archive being legal, though, since it
makes scripting easier.  There may be cases where you are archiving
files generated daily, and you want to distinguish "no data today" from
"the archiver didn't run".  At worst it should print a warning.

-- 
	Dan Nelson
	dnelson at allantgroup.com


More information about the freebsd-stable mailing list