1.5	kraih Tue Jul 22 14:30:00 CEST 2026
  - Fixed non-portable tests failing.

1.4	kraih Tue Jul 22 14:00:00 CEST 2026
  - Improved service restart handling.

1.3	kraih Tue Jul 16 14:00:00 CEST 2026
  - Improved handling of malicious archives.

1.2	kraih Tue May 22 14:00:00 CEST 2026
  - Fixed a race condition that could create invalid JSON files.

1.1	kraih Tue Apr 28 17:00:00 CEST 2026
  - Fixed a problem where temporary archives created during unpacking were not cleaned up.

1.0	kraih Mon Dec 01 15:00:00 CEST 2023
  - Forked File::Unpack to start File::Unpack2.
	- Applied all openSUSE patches.

0.69	jw Mon Jul 21 17:21:13 CEST 2014
	- fixed https://github.com/jnweiger/perl-File-Unpack/issues/2

0.67	jw Mon Jul 21 16:14:49 CEST 2014
	- Semantics change of file_unpack.pl:
	  Default to one_shot unless $0 contains 'deep'. New --deep option to also switch this one.
	  This is a move towards least surprise. No other unpacker has this deep feature.

	- Fixed builtin helper for application=x-lzip to conform to IPC::Run::run() semantics.
	- Added an example how to write a mime helper script to the documentation.
	- Fixed diagnostics in case a helper script fails.
	- Several smallish doku improvements.
	- Updated test suite to accept encoding 'unknown' as a synonym to 'binary'.

0.66	jw Mon Jan 27 18:57:16 CET 2014
	- harmful filename test removed, fixing bnc#860561. 
	  The name may not match, when symlinking back. Readlink is the only thing that counts.
	- _run_mime_helper() now returns diagnostics even when 'successful' so that we 
	  can see reasoning for 'passed'.
	- added t/08-survive-corrupt.t to define behavoiur for good10.pdf and bad34.pdf
	- registered the two new test files with t/02-mime.t and t/07-cmdline.t

0.65	jw Tue Aug  6 11:23:43 CEST 2013
	- CPAN no longer fails with  'Using $< in a non-suffix rule context is
	  a GNUmake idiom'

0.64	jw Mon Jul 29 20:54:55 CEST 2013
        - assert writable dirs in _run_mime_helper while disassembling jail.
	  needed for ksh/ast-base.2012-08-01.tar.bz2/src/cmd/pax/data/ro.dat
	- all rename()s in _run_mime_helper() equipped with or die.
	- DESTROY() now handles more cases: Adding the epilog when missing is paramount.

0.63	jw Fri Jun 14 12:08:25 CEST 2013
	- added check for lzip, please test with
	  /space/legaldb_nfs/sha256/pu/fF/6EtJ9m+nlIZ_aDn2nL2QiBahLsFUhJxKcLAv3zA

0.62	jw Tue May  7 20:04:15 CEST 2013
	- support mac pax files. They are gzipped cpio:
	  'ASCII cpio archive (pre-SVR4 or odc)' and are reported by flm
	  as application/octet-stream. 
	  
	(0.61 had a defunct testsuite)

0.60    jw, Mon Apr 29 16:22:33 CEST 2013
        - report text/x-application-xml instead of application/xml

0.59    jw, Tue Mar 26 22:53:51 CET 2013
        - helping upx to survive symlinks. "%{lsrc}s" format added.
        - POD fixes from from anirvan/patch-1
        - application/msword helper added. Using antiword.
	- helper diagnostics improved: first line of stderr is captured in 
	  the log.
	- {verbose} control improved.

0.58	jw, Fri Feb  8 11:15:33 CET 2013
	- bugfix: {inside_archives} was not decremented after leaving an
	  archive.

0.57	jw, Thu Feb  7 19:01:36 CET 2013
	- fixed -f to really allow crawling symlinks.
	  * the logfile will contain the link name, not the link target.
	  * it thus preserves the illusion that all is inside the destination
	    tree.
	- The following command can now be used to recreate the logfile (and
	  retry more unpacking) in $DIR:
	  file_unpack -D $DIR -f -L $DIR.unpack.log $DIR
	- _run_mime_helper(): cleanup $jail_base added when cmd fails to run. 
	  Helper failure may still may result in missing files.
	- t/07-cmdline.t added.

0.56	jw, Tue Feb  5 18:58:06 CET 2013
	- guard _my_shell_quote against undef. 
	- no 'running as root warning' when !{verbose}
	- Relax testsuite on test.mht
	- relax DESTROY to not start a logfile, when none is requested.
	- testsuite really silent now.

0.55	jw, Fri Jan 25 22:09:04 CET 2013
	- option --follow-file-symlinks or new(follow_file_symlinks => $yes) added;
	  where $yes is 0, 1, or 2.
	  We may want to use '1', if we are e.g. inside a legaldb_unpacked 
	  tree, where everything is a symlink. This usage is experimental.
	  A value of '2' is hideous and requires studying perldoc Unpack2.pm
	  first.
	- tracking $self->{inside_archives} added. Also experimental.

0.54    jw, Fri Mar  9 17:13:48 CET 2012
        - no longer add special files like fifos, sockets, dev nodes to the logfile.
	- loggable_pathname adds {srcdir => 'input'} if path is in
	  $self->{input}

0.53	jw, Thu Feb 16 22:26:06 UTC 2012
	- new parameter -A and new(archive_name_as_dir=>1) added.
	- new(log_type => 'PLAIN') added, used unless -L

0.52	jw, Wed Feb  1 00:35:47 UTC 2012
	- logfile: input menitoned on 'passed' items.
	- Makefile.PL now actually installs file_unpack (rt#73670).
	  Man page is a hack. Sorry.
	- file_unpack can now unpack multiple archives on the command line.
	- helper/handler wording now consistently speaks of helpers.

0.51  	jw, Wed Jan 25 20:23:22 CET 2012
	- input archives that do not exist in destdir (because they were
	  unpacked)
          now show up in the log prefixed with './input/./' unless fullpath.
	- added loggable_pathname()

0.50    jw, Tue Jan 24 18:43:01 CET 2012
	- made testsuite survive on SLE11_SP1, put IO::Handle::tell() inside
	  eval to survive SLES11_SP1

0.49	jw, Mon Jan 23 19:12:44 CET 2012
	- made survive ntop, in{file} must not modify, so that reopen inside
	  mime() works.

0.48	jw, Tue Nov 29 11:23:30 UTC 2011
	- fixed Use of qw(...) as parentheses. This is deprecated with newer
	  perl.

0.47	jw, Wed Oct  5 00:58:11 CEST 2011
	- fixed rt#70885, new(logfile => \$log); now works as advertised.
	- somewhat experimental code: we now assert there is no utf8 in the log.

0.46	jw, Wed Sep  7 16:08:45 CEST 2011
    	- No more uninitialized value in printf line 780.
        - Incompatible change: unpacked filenames are now relative to destdir
	  unless -F or ->new(log_fullname => 1)
	- New parameter -P or ->new(log_params => {}) to feed params into the 
	  logfile.

0.45	jw, Fri May 27 13:10:16 CEST 2011
	Added option world_readable=>1, to assert 0755/0444 modes for
	dirs/files.

0.44	jw, Fri May 20 12:47:27 CEST 2011
	converted log to use syswrite() attempt to catch write errors...

0.43 	jw, Thu May 12 13:22:02 CEST 2011
	Implemented no_op option in _run_mime_helper().

0.42 	jw, Thu Apr 21 15:56:27 CEST 2011
	Unexpected DESTROY handler closes json logfile properly with an {error}
	message, if any.

0.41	jw, Mon Apr 18 14:55:45 CEST 2011
	Statistics in logfile about skipped (exclude and symlink) files.

0.40	jw, Fri Apr 15 15:31:54 CEST 2011
	less verbose with differing destnames...
	Survive crashes in run(). 
	logfile json syntax preserved, even when terminating error message. No
	more trailing dummy "/":{}

0.39    jw, Wed Apr  6 18:25:26 CEST 2011
	Try /._\d?/ name suffixes on collisions to avoid _fu_* directories if
	possible.  Added _chmod_add() to help creating readable files and
	executable directories.  Raised default maxfilesize from 100M to 2.5G,
	honors FILE_UNPACK_MAXFILESIZE too.

0.38	Both File::LibMagic and File::MimeInfo::Magic fail on .info files.
	We now ask perl -T and return application/x-text-mixed in that case.
	Fixed comparison with RLIM_INFINITY, silencing false warnings.

0.37	Fixed setrlimit() calls, to not explode, when the limit is already lower.
	Minor cleanup.

0.36	removed dependency on lsof, in favour of /proc and builtin
	_children_fuser(). tick-tick now shows the percentage of the fastest
	moving fd.

0.35	tick-tick now shows file offsets via crude lsof.
	tested with gcc-ejc, parsing lsof output with $u->run() during
	$u->run(). Yeah!

0.34	jw, Thu Mar 24 09:24:42 CET 2011
	Libmagic perl module explodes with malformed utf8, assert LC_ALL=C. 

0.33	jw, Fri Mar 11 18:04:09 CET 2011
	run() untaint argv0. needed for running helpers under -T
	Empty file is text/x-empty now. not application/x-empty.

0.32	jw, Thu Mar 10 01:52:53 CET 2011
	Fixed setlimit code, to be more robust.
	Fixed logfile JSON syntax, with a dummy Element in the epilog.
	Added 06-logfile.t to test the logfile syntax.

0.31	jw, Wed Mar  9 00:01:50 CET 2011
	Added list() method.
	Spellchecked pod.

0.30 	jw, Fri Nov 19 19:13:53 CET 2010
	Run through perlcritic.
        Switch back to gz to help smoke testers
        (walde.christian@googlemail.com)

0.29	jw, Tue Dec 14 23:19:02 CET 2010
	Mention /usr/bin/file_unpack in perldoc

0.28	jw, Fri Oct 22 14:29:09 CEST 2010
	Look only at files and dirs, ignore special files.
	Reading a pipe could block us endlessly.

0.27	jw, Sat Sep 11 22:01:49 CEST 2010
	new feature in mime(): attempt full file access
	not only if flm reports currupt, but also when it reports
	a/octet-stream. this helps to recognize a/x-iso9660-image
	Added .iso by including my old unpack_iso.pl as a helper.
	Added .lha

0.26	jw, Thu Sep  9 19:26:21 CEST 2010
	Added .upx; we are testing all application/*-executable for upx to get
	the mime type.  Fixed test results on SLE-11, 02-mime.t now can match
	regexp too.

0.25	jw, Wed Sep  8 21:44:37 CEST 2010
	Added .cpio, .deb, .cab, .7z
	Removed stupid debug die in helper.
	Removed done_testing() for the sake of old Test::More on 11.1

0.23	jw, Wed Sep  1 23:17:52 CEST 2010
	Added option one_shot, to new() and file_unpack.pl
	Added unpacking of: application/pdf, %tar+lzma, %rar, %uuencode
	Added '# Requires: ....' comments with the builtin handlers to document 
	the non-perlish dependencies. 
	Fixed recognition of .xls -- File::LibMagic said corrupt, with only a
	short buffer.  Swapped 2nd and 3rd parameter of _run_mime_helper():
	mime helpers have now their suggested destname as second parameter.
	mime(): added suffix rules for 'text/plain' and
	'application/octet-stream', to harvest even the least trusted source of
	information, in the absence of anything else.
	Implemented first draft of helper/text/=x-shellscript: tested embedded
	gzip.
	Added -L option to file_unpack.pl; 
	_run_mime_helper() now untaints its argv. run() errors are now
	propagated.
	t/04-subdir.t now does a real-life unzip test, if unzip is available.
	Lowered $RECURSION_LIMIT to 200. 1000 takes ages with big files.
	Call bunzip2 with -f, but don't call xz with -f.
	Fixed unpack() to not hit 256 char limit per filename so easily.
	Tested mime_handler_dir(), now it actually works. Introduced a default
	directory /usr/share/File-Unpack/helper.
	Preparing env variable PERL5LIB for helpers.
	mime(): Fixed usage of LZMA alone decoder: count as positive, only of
	output appeared.
	text/x-shellscript: uudecode and shar support tested; works now.

0.22	jw, Sun Aug 29 23:27:59 CEST 2010
	Fixed descending of destdir into subdirs of subdirs
	Added t/04-subdir.t, 
	Added first support for running unpack() under -T
	Replaced MANIFEST.SKIP with a filter in t/manifest.t
	Fixed t/02-mime.t to survive missing shared-mime-info.
	(Makefile.PL cannot require non-perl packages, can it?)

0.21	jw, Wed Aug 25 22:15:48 CEST 2010
        Added 'nothing-to-do' semantic for mime-helpers: Point back by symlink.
   	Added helper/text=x-shellscript to demonstrate this.
	Made external mime-helpers work: registering, calling.
	Remember absolut path, call mime_type() correctly.
	Started to propagate errors from _run_mime_helper() to unpack().
	mime(): In SLES11 we get 'text/plain charset=utf-8' without semicolon.

0.20	jw, Tue Aug 24 21:15:49 CEST 2010
	POD polishing. Synopsis now has some illustrative code.

0.19	jw, Tue Aug 24 15:42:49 CEST 2010
	Added _finalize_argvv() to call _locate_*() functions only if 
	find_mime_handler() needs it. Added _locate_tar() and _locate_cpio_i;
	Converted sub _builtin_mime_handlers back into @builtin_mime_handlers;
	Debugged run(); piping was broken. Made new(jail_chmod0 => 1) optional.

0.18	jw, Tue Aug 24 02:13:47 CEST 2010
	Added handlers for x-tar+bzip2, x-tar+gzip, x-rpm;
	Converted @builtin_mime_handlers into sub _builtin_mime_handlers;
	Converted system() tests of tar options to run() tests. Added tests for 
	cpio too. Secured pump inside eval {}. 
	Added fmt_run_shellcmd() to the API; thus fixed file_unpac.pl -m ...

0.17	jw, Mon Aug 23 11:36:04 CEST 2010
	Made the test suite run again with -t

0.16	jw, Mon Aug 23 01:28:09 CEST 2010
	added tar handler. debugged dir unpacking, copy-in, 
	destdir=jail, and def_mime_handler_fmt.

0.15	jw, Mon Aug 16 01:08:32 CEST 2010
	destroyed unpack(): recreated subdir code. To be completed.

0.14	jw, Thu Aug 12 00:14:00 CEST 2010
	Using Text::Sprintf::Named for parsing builtin_mime_handlers.
	Added _fmt_run_shellcmd(). Tested _run_mime_helper. Finished.

0.13	jw, Wed Aug 11 10:30:49 CEST 2010
	regression fixed: application/oasis.*.text no longer had +zip suffix.

0.12	jw, Fri Aug  6 01:38:50 CEST 2010
	Possibly finalized _run_mime_helper(), needs testing.

0.11    jw, Tue Aug  3 20:15:04 CEST 2010
	Reporting @missing_unpacker in log.

0.10	jw, Tue Aug  3 00:30:25 CEST 2010
	File::Unppack::run() finished. Oops, IPC::Run opens all redirects
	before init.  Jail construction done in _run_mime_helper(). Jail
	destruction TBD.
	@builtin_mime_handlers now reflects the harness structure, knows which
	suffixes to remove, and uses words in curly braces as templates, to
	make it less ugly.  Delayed template substitution into
	_run_mime_helper(), as extra array-refs are no good idea in a harness.

0.09    jw, Sun Aug  1 23:42:19 CEST 2010
	Added self->{done}, to protect against re-unpacking; enabled recursion
	in unpack.  More consistent use of C<...> in POD. _run_mime_helper()
	prepared for IPC::Run.  Changed use_mime_handler() to parse an array,
	rather than a format string.

0.08	jw, Mon Jul 12 00:54:09 CEST 2010
	Added mime handler methods: use_mime_handler_dir(), use_mime_handler(),
	find_mime_handler() using $self->{mime_orcish};
	Added builtin handlers to new(), using "%{destdir} ..." format string
	syntax Added _prep_configdir(), shell and json support.
	Continued unpack() to dispatch into mime handlers.
	Started _run_mime_helper()

0.07    jw, Fri Jul  9 01:19:19 CEST 2010
	Added support for stacked compressions recognition without looking 
	at file suffixes at all:
	mime(file => '.tar.gz.lzma') says: "application/x-tar+gzip+lzma"
	Hack to make tar.bz2 appear as "application/x-tar+bzip2"
	tar.bz2.lzma does not work, that is why I call bz2 support a hack.
	Now we can work on efficient unpack helpers.

0.06	jw, Thu Jul  8 00:31:24 CEST 2010
	using Compress::Raw::Lzma::AloneDecoder instead  of lzcat.

0.05	jw, Wed Jun 30 01:35:17 CEST 2010
	started unpack(), added _not_excluded(),
	added file_unpack.pl for testing.

0.04	jw, Mon Jun 28 21:38:31 CEST 2010
	added exclude(), with tests & docs.
	added _fs_check() and _fs_warn() logic.
	added and used _bytes_unit().

0.03	jw, Sun Jun 27 03:09:21 CEST 2010
	new() completed, private log(), logf() added.

0.02	jw, Sat Jun 26 21:55:12 CEST 2010
	mime() documented, implemented, tested.

0.01    jw, Sat Jun 26 12:45:63 CEST 2010
        First version, skeleton drafted.
