2010-10-23 13:15:35 +02:00
|
|
|
|
2011-04-12 10:46:01 +02:00
|
|
|
XZ Utils Release Notes
|
|
|
|
======================
|
|
|
|
|
2022-11-13 18:57:26 +01:00
|
|
|
5.2.8 (2022-11-13)
|
|
|
|
|
|
|
|
* xz:
|
|
|
|
|
|
|
|
- If xz cannot remove an input file when it should, this
|
|
|
|
is now treated as a warning (exit status 2) instead of
|
|
|
|
an error (exit status 1). This matches GNU gzip and it
|
|
|
|
is more logical as at that point the output file has
|
|
|
|
already been successfully closed.
|
|
|
|
|
|
|
|
- Fix handling of .xz files with an unsupported check type.
|
|
|
|
Previously such printed a warning message but then xz
|
|
|
|
behaved as if an error had occurred (didn't decompress,
|
|
|
|
exit status 1). Now a warning is printed, decompression
|
|
|
|
is done anyway, and exit status is 2. This used to work
|
|
|
|
slightly before 5.0.0. In practice this bug matters only
|
|
|
|
if xz has been built with some check types disabled. As
|
|
|
|
instructed in PACKAGERS, such builds should be done in
|
|
|
|
special situations only.
|
|
|
|
|
|
|
|
- Fix "xz -dc --single-stream tests/files/good-0-empty.xz"
|
|
|
|
which failed with "Internal error (bug)". That is,
|
|
|
|
--single-stream was broken if the first .xz stream in
|
|
|
|
the input file didn't contain any uncompressed data.
|
|
|
|
|
|
|
|
- Fix displaying file sizes in the progress indicator when
|
|
|
|
working in passthru mode and there are multiple input files.
|
|
|
|
Just like "gzip -cdf", "xz -cdf" works like "cat" when the
|
|
|
|
input file isn't a supported compressed file format. In
|
|
|
|
this case the file size counters weren't reset between
|
|
|
|
files so with multiple input files the progress indicator
|
|
|
|
displayed an incorrect (too large) value.
|
|
|
|
|
|
|
|
* liblzma:
|
|
|
|
|
|
|
|
- API docs in lzma/container.h:
|
|
|
|
* Update the list of decoder flags in the decoder
|
|
|
|
function docs.
|
|
|
|
* Explain LZMA_CONCATENATED behavior with .lzma files
|
|
|
|
in lzma_auto_decoder() docs.
|
|
|
|
|
|
|
|
- OpenBSD: Use HW_NCPUONLINE to detect the number of
|
|
|
|
available hardware threads in lzma_physmem().
|
|
|
|
|
|
|
|
- Fix use of wrong macro to detect x86 SSE2 support.
|
|
|
|
__SSE2_MATH__ was used with GCC/Clang but the correct
|
|
|
|
one is __SSE2__. The first one means that SSE2 is used
|
|
|
|
for floating point math which is irrelevant here.
|
|
|
|
The affected SSE2 code isn't used on x86-64 so this affects
|
|
|
|
only 32-bit x86 builds that use -msse2 without -mfpmath=sse
|
|
|
|
(there is no runtime detection for SSE2). It improves LZMA
|
|
|
|
compression speed (not decompression).
|
|
|
|
|
|
|
|
- Fix the build with Intel C compiler 2021 (ICC, not ICX)
|
|
|
|
on Linux. It defines __GNUC__ to 10 but doesn't support
|
|
|
|
the __symver__ attribute introduced in GCC 10.
|
|
|
|
|
|
|
|
* Scripts: Ignore warnings from xz by using --quiet --no-warn.
|
|
|
|
This is needed if the input .xz files use an unsupported
|
|
|
|
check type.
|
|
|
|
|
|
|
|
* Translations:
|
|
|
|
|
|
|
|
- Updated Croatian and Turkish translations.
|
|
|
|
|
|
|
|
- One new translations wasn't included because it needed
|
|
|
|
technical fixes. It will be in upcoming 5.4.0. No new
|
|
|
|
translations will be added to the 5.2.x branch anymore.
|
|
|
|
|
|
|
|
- Renamed the French man page translation file from
|
|
|
|
fr_FR.po to fr.po and thus also its install directory
|
|
|
|
(like /usr/share/man/fr_FR -> .../fr).
|
|
|
|
|
|
|
|
- Man page translations for upcoming 5.4.0 are now handled
|
|
|
|
in the Translation Project.
|
|
|
|
|
|
|
|
* Update doc/faq.txt a little so it's less out-of-date.
|
|
|
|
|
|
|
|
|
2022-09-30 15:40:39 +02:00
|
|
|
5.2.7 (2022-09-30)
|
|
|
|
|
|
|
|
* liblzma:
|
|
|
|
|
|
|
|
- Made lzma_filters_copy() to never modify the destination
|
|
|
|
array if an error occurs. lzma_stream_encoder() and
|
|
|
|
lzma_stream_encoder_mt() already assumed this. Before this
|
|
|
|
change, if a tiny memory allocation in lzma_filters_copy()
|
|
|
|
failed it would lead to a crash (invalid free() or invalid
|
|
|
|
memory reads) in the cleanup paths of these two encoder
|
|
|
|
initialization functions.
|
|
|
|
|
|
|
|
- Added missing integer overflow check to lzma_index_append().
|
|
|
|
This affects xz --list and other applications that decode
|
|
|
|
the Index field from .xz files using lzma_index_decoder().
|
|
|
|
Normal decompression of .xz files doesn't call this code
|
|
|
|
and thus most applications using liblzma aren't affected
|
|
|
|
by this bug.
|
|
|
|
|
|
|
|
- Single-threaded .xz decoder (lzma_stream_decoder()): If
|
|
|
|
lzma_code() returns LZMA_MEMLIMIT_ERROR it is now possible
|
|
|
|
to use lzma_memlimit_set() to increase the limit and continue
|
|
|
|
decoding. This was supposed to work from the beginning
|
|
|
|
but there was a bug. With other decoders (.lzma or
|
|
|
|
threaded .xz decoder) this already worked correctly.
|
|
|
|
|
|
|
|
- Fixed accumulation of integrity check type statistics in
|
|
|
|
lzma_index_cat(). This bug made lzma_index_checks() return
|
|
|
|
only the type of the integrity check of the last Stream
|
|
|
|
when multiple lzma_indexes were concatenated. Most
|
|
|
|
applications don't use these APIs but in xz it made
|
|
|
|
xz --list not list all check types from concatenated .xz
|
|
|
|
files. In xz --list --verbose only the per-file "Check:"
|
|
|
|
lines were affected and in xz --robot --list only the "file"
|
|
|
|
line was affected.
|
|
|
|
|
|
|
|
- Added ABI compatibility with executables that were linked
|
|
|
|
against liblzma in RHEL/CentOS 7 or other liblzma builds
|
|
|
|
that had copied the problematic patch from RHEL/CentOS 7
|
|
|
|
(xz-5.2.2-compat-libs.patch). For the details, see the
|
|
|
|
comment at the top of src/liblzma/validate_map.sh.
|
|
|
|
|
|
|
|
WARNING: This uses __symver__ attribute with GCC >= 10.
|
|
|
|
In other cases the traditional __asm__(".symver ...")
|
|
|
|
is used. Using link-time optimization (LTO, -flto) with
|
|
|
|
GCC versions older than 10 can silently result in
|
|
|
|
broken liblzma.so.5 (incorrect symbol versions)! If you
|
|
|
|
want to use -flto with GCC, you must use GCC >= 10.
|
|
|
|
LTO with Clang seems to work even with the traditional
|
|
|
|
__asm__(".symver ...") method.
|
|
|
|
|
|
|
|
* xzgrep: Fixed compatibility with old shells that break if
|
|
|
|
comments inside command substitutions have apostrophes (').
|
|
|
|
This problem was introduced in 5.2.6.
|
|
|
|
|
|
|
|
* Build systems:
|
|
|
|
|
|
|
|
- New #define in config.h: HAVE_SYMBOL_VERSIONS_LINUX
|
|
|
|
|
|
|
|
- Windows: Fixed liblzma.dll build with Visual Studio project
|
|
|
|
files. It broke in 5.2.6 due to a change that was made to
|
|
|
|
improve CMake support.
|
|
|
|
|
|
|
|
- Windows: Building liblzma with UNICODE defined should now
|
|
|
|
work.
|
|
|
|
|
|
|
|
- CMake files are now actually included in the release tarball.
|
|
|
|
They should have been in 5.2.5 already.
|
|
|
|
|
|
|
|
- Minor CMake fixes and improvements.
|
|
|
|
|
|
|
|
* Added a new translation: Turkish
|
|
|
|
|
|
|
|
|
2022-08-12 13:29:28 +02:00
|
|
|
5.2.6 (2022-08-12)
|
|
|
|
|
|
|
|
* xz:
|
|
|
|
|
|
|
|
- The --keep option now accepts symlinks, hardlinks, and
|
|
|
|
setuid, setgid, and sticky files. Previously this required
|
|
|
|
using --force.
|
|
|
|
|
|
|
|
- When copying metadata from the source file to the destination
|
|
|
|
file, don't try to set the group (GID) if it is already set
|
|
|
|
correctly. This avoids a failure on OpenBSD (and possibly on
|
|
|
|
a few other OSes) where files may get created so that their
|
|
|
|
group doesn't belong to the user, and fchown(2) can fail even
|
|
|
|
if it needs to do nothing.
|
|
|
|
|
|
|
|
- Cap --memlimit-compress to 2000 MiB instead of 4020 MiB on
|
|
|
|
MIPS32 because on MIPS32 userspace processes are limited
|
|
|
|
to 2 GiB of address space.
|
|
|
|
|
|
|
|
* liblzma:
|
|
|
|
|
|
|
|
- Fixed a missing error-check in the threaded encoder. If a
|
|
|
|
small memory allocation fails, a .xz file with an invalid
|
|
|
|
Index field would be created. Decompressing such a file would
|
|
|
|
produce the correct output but result in an error at the end.
|
|
|
|
Thus this is a "mild" data corruption bug. Note that while
|
|
|
|
a failed memory allocation can trigger the bug, it cannot
|
|
|
|
cause invalid memory access.
|
|
|
|
|
|
|
|
- The decoder for .lzma files now supports files that have
|
|
|
|
uncompressed size stored in the header and still use the
|
|
|
|
end of payload marker (end of stream marker) at the end
|
|
|
|
of the LZMA stream. Such files are rare but, according to
|
|
|
|
the documentation in LZMA SDK, they are valid.
|
|
|
|
doc/lzma-file-format.txt was updated too.
|
|
|
|
|
|
|
|
- Improved 32-bit x86 assembly files:
|
|
|
|
* Support Intel Control-flow Enforcement Technology (CET)
|
|
|
|
* Use non-executable stack on FreeBSD.
|
|
|
|
|
|
|
|
- Visual Studio: Use non-standard _MSVC_LANG to detect C++
|
|
|
|
standard version in the lzma.h API header. It's used to
|
|
|
|
detect when "noexcept" can be used.
|
|
|
|
|
|
|
|
* xzgrep:
|
|
|
|
|
|
|
|
- Fixed arbitrary command injection via a malicious filename
|
|
|
|
(CVE-2022-1271, ZDI-CAN-16587). A standalone patch for
|
|
|
|
this was released to the public on 2022-04-07. A slight
|
|
|
|
robustness improvement has been made since then and, if
|
|
|
|
using GNU or *BSD grep, a new faster method is now used
|
|
|
|
that doesn't use the old sed-based construct at all. This
|
|
|
|
also fixes bad output with GNU grep >= 3.5 (2020-09-27)
|
|
|
|
when xzgrepping binary files.
|
|
|
|
|
|
|
|
This vulnerability was discovered by:
|
|
|
|
cleemy desu wayo working with Trend Micro Zero Day Initiative
|
|
|
|
|
|
|
|
- Fixed detection of corrupt .bz2 files.
|
|
|
|
|
|
|
|
- Improved error handling to fix exit status in some situations
|
|
|
|
and to fix handling of signals: in some situations a signal
|
|
|
|
didn't make xzgrep exit when it clearly should have. It's
|
|
|
|
possible that the signal handling still isn't quite perfect
|
|
|
|
but hopefully it's good enough.
|
|
|
|
|
|
|
|
- Documented exit statuses on the man page.
|
|
|
|
|
|
|
|
- xzegrep and xzfgrep now use "grep -E" and "grep -F" instead
|
|
|
|
of the deprecated egrep and fgrep commands.
|
|
|
|
|
|
|
|
- Fixed parsing of the options -E, -F, -G, -P, and -X. The
|
|
|
|
problem occurred when multiple options were specied in
|
|
|
|
a single argument, for example,
|
|
|
|
|
|
|
|
echo foo | xzgrep -Fe foo
|
|
|
|
|
|
|
|
treated foo as a filename because -Fe wasn't correctly
|
|
|
|
split into -F -e.
|
|
|
|
|
|
|
|
- Added zstd support.
|
|
|
|
|
|
|
|
* xzdiff/xzcmp:
|
|
|
|
|
|
|
|
- Fixed wrong exit status. Exit status could be 2 when the
|
|
|
|
correct value is 1.
|
|
|
|
|
|
|
|
- Documented on the man page that exit status of 2 is used
|
|
|
|
for decompression errors.
|
|
|
|
|
|
|
|
- Added zstd support.
|
|
|
|
|
|
|
|
* xzless:
|
|
|
|
|
|
|
|
- Fix less(1) version detection. It failed if the version number
|
|
|
|
from "less -V" contained a dot.
|
|
|
|
|
|
|
|
* Translations:
|
|
|
|
|
|
|
|
- Added new translations: Catalan, Croatian, Esperanto,
|
|
|
|
Korean, Portuguese, Romanian, Serbian, Spanish, Swedish,
|
|
|
|
and Ukrainian
|
|
|
|
|
|
|
|
- Updated the Brazilian Portuguese translation.
|
|
|
|
|
|
|
|
- Added French man page translation. This and the existing
|
|
|
|
German translation aren't complete anymore because the
|
|
|
|
English man pages got a few updates and the translators
|
|
|
|
weren't reached so that they could update their work.
|
|
|
|
|
|
|
|
* Build systems:
|
|
|
|
|
|
|
|
- Windows: Fix building of resource files when config.h isn't
|
|
|
|
used. CMake + Visual Studio can now build liblzma.dll.
|
|
|
|
|
|
|
|
- Various fixes to the CMake support. Building static or shared
|
|
|
|
liblzma should work fine in most cases. In contrast, building
|
|
|
|
the command line tools with CMake is still clearly incomplete
|
|
|
|
and experimental and should be used for testing only.
|
|
|
|
|
|
|
|
|
2020-03-17 15:26:04 +01:00
|
|
|
5.2.5 (2020-03-17)
|
|
|
|
|
|
|
|
* liblzma:
|
|
|
|
|
|
|
|
- Fixed several C99/C11 conformance bugs. Now the code is clean
|
|
|
|
under gcc/clang -fsanitize=undefined. Some of these changes
|
|
|
|
might have a negative effect on performance with old GCC
|
|
|
|
versions or compilers other than GCC and Clang. The configure
|
|
|
|
option --enable-unsafe-type-punning can be used to (mostly)
|
|
|
|
restore the old behavior but it shouldn't normally be used.
|
|
|
|
|
|
|
|
- Improved API documentation of lzma_properties_decode().
|
|
|
|
|
|
|
|
- Added a very minor encoder speed optimization.
|
|
|
|
|
|
|
|
* xz:
|
|
|
|
|
|
|
|
- Fixed a crash in "xz -dcfv not_an_xz_file". All four options
|
|
|
|
were required to trigger it. The crash occurred in the
|
|
|
|
progress indicator code when xz was in passthru mode where
|
|
|
|
xz works like "cat".
|
|
|
|
|
|
|
|
- Fixed an integer overflow with 32-bit off_t. It could happen
|
|
|
|
when decompressing a file that has a long run of zero bytes
|
|
|
|
which xz would try to write as a sparse file. Since the build
|
|
|
|
system enables large file support by default, off_t is
|
|
|
|
normally 64-bit even on 32-bit systems.
|
|
|
|
|
|
|
|
- Fixes for --flush-timeout:
|
|
|
|
* Fix semi-busy-waiting.
|
|
|
|
* Avoid unneeded flushes when no new input has arrived
|
|
|
|
since the previous flush was completed.
|
|
|
|
|
|
|
|
- Added a special case for 32-bit xz: If --memlimit-compress is
|
|
|
|
used to specify a limit that exceeds 4020 MiB, the limit will
|
|
|
|
be set to 4020 MiB. The values "0" and "max" aren't affected
|
|
|
|
by this and neither is decompression. This hack can be
|
|
|
|
helpful when a 32-bit xz has access to 4 GiB address space
|
|
|
|
but the specified memlimit exceeds 4 GiB. This can happen
|
|
|
|
e.g. with some scripts.
|
|
|
|
|
|
|
|
- Capsicum sandbox is now enabled by default where available
|
|
|
|
(FreeBSD >= 10). The sandbox debug messages (xz -vv) were
|
|
|
|
removed since they seemed to be more annoying than useful.
|
|
|
|
|
|
|
|
- DOS build now requires DJGPP 2.05 instead of 2.04beta.
|
|
|
|
A workaround for a locale problem with DJGPP 2.05 was added.
|
|
|
|
|
|
|
|
* xzgrep and other scripts:
|
|
|
|
|
|
|
|
- Added a configure option --enable-path-for-scripts=PREFIX.
|
|
|
|
It is disabled by default except on Solaris where the default
|
|
|
|
is /usr/xpg4/bin. See INSTALL for details.
|
|
|
|
|
|
|
|
- Added a workaround for a POSIX shell detection problem on
|
|
|
|
Solaris.
|
|
|
|
|
|
|
|
* Build systems:
|
|
|
|
|
|
|
|
- Added preliminary build instructions for z/OS. See INSTALL
|
|
|
|
section 1.2.9.
|
|
|
|
|
|
|
|
- Experimental CMake support was added. It should work to build
|
|
|
|
static liblzma on a few operating systems. It may or may not
|
|
|
|
work to build shared liblzma. On some platforms it can build
|
|
|
|
xz and xzdec too but those are only for testing. See the
|
|
|
|
comment in the beginning of CMakeLists.txt for details.
|
|
|
|
|
|
|
|
- Visual Studio project files were updated.
|
|
|
|
WindowsTargetPlatformVersion was removed from VS2017 files
|
|
|
|
and set to "10.0" in the added VS2019 files. In the future
|
|
|
|
the VS project files will be removed when CMake support is
|
|
|
|
good enough.
|
|
|
|
|
|
|
|
- New #defines in config.h: HAVE___BUILTIN_ASSUME_ALIGNED,
|
|
|
|
HAVE___BUILTIN_BSWAPXX, and TUKLIB_USE_UNSAFE_TYPE_PUNNING.
|
|
|
|
|
|
|
|
- autogen.sh has a new optional dependency on po4a and a new
|
|
|
|
option --no-po4a to skip that step. This matters only if one
|
|
|
|
wants to remake the build files. po4a is used to update the
|
|
|
|
translated man pages but as long as the man pages haven't
|
|
|
|
been modified, there's nothing to update and one can use
|
|
|
|
--no-po4a to avoid the dependency on po4a.
|
|
|
|
|
|
|
|
* Translations:
|
|
|
|
|
|
|
|
- XZ Utils translations are now handled by the Translation
|
|
|
|
Project: https://translationproject.org/domain/xz.html
|
|
|
|
|
|
|
|
- All man pages are now included in German too.
|
|
|
|
|
|
|
|
- New xz translations: Brazilian Portuguese, Finnish,
|
|
|
|
Hungarian, Chinese (simplified), Chinese (traditional),
|
|
|
|
and Danish (partial translation)
|
|
|
|
|
|
|
|
- Updated xz translations: French, German, Italian, and Polish
|
|
|
|
|
|
|
|
- Unfortunately a few new xz translations weren't included due
|
|
|
|
to technical problems like too long lines in --help output or
|
|
|
|
misaligned column headings in tables. In the future, many of
|
|
|
|
these strings will be split and e.g. the table column
|
|
|
|
alignment will be handled in software. This should make the
|
|
|
|
strings easier to translate.
|
|
|
|
|
|
|
|
|
2018-04-29 17:15:37 +02:00
|
|
|
5.2.4 (2018-04-29)
|
|
|
|
|
|
|
|
* liblzma:
|
|
|
|
|
|
|
|
- Allow 0 as memory usage limit instead of returning
|
|
|
|
LZMA_PROG_ERROR. Now 0 is treated as if 1 byte was specified,
|
|
|
|
which effectively is the same as 0.
|
|
|
|
|
|
|
|
- Use "noexcept" keyword instead of "throw()" in the public
|
|
|
|
headers when a C++11 (or newer standard) compiler is used.
|
|
|
|
|
|
|
|
- Added a portability fix for recent Intel C Compilers.
|
|
|
|
|
|
|
|
- Microsoft Visual Studio build files have been moved under
|
|
|
|
windows/vs2013 and windows/vs2017.
|
|
|
|
|
|
|
|
* xz:
|
|
|
|
|
|
|
|
- Fix "xz --list --robot missing_or_bad_file.xz" which would
|
2019-05-08 07:30:57 +02:00
|
|
|
try to print an uninitialized string and thus produce garbage
|
2018-04-29 17:15:37 +02:00
|
|
|
output. Since the exit status is non-zero, most uses of such
|
|
|
|
a command won't try to interpret the garbage output.
|
|
|
|
|
|
|
|
- "xz --list foo.xz" could print "Internal error (bug)" in a
|
|
|
|
corner case where a specific memory usage limit had been set.
|
|
|
|
|
|
|
|
|
2016-12-30 12:25:10 +01:00
|
|
|
5.2.3 (2016-12-30)
|
|
|
|
|
|
|
|
* xz:
|
|
|
|
|
|
|
|
- Always close a file before trying to delete it to avoid
|
|
|
|
problems on some operating system and file system combinations.
|
|
|
|
|
|
|
|
- Fixed copying of file timestamps on Windows.
|
|
|
|
|
|
|
|
- Added experimental (disabled by default) sandbox support using
|
|
|
|
Capsicum (FreeBSD >= 10). See --enable-sandbox in INSTALL.
|
|
|
|
|
|
|
|
* C99/C11 conformance fixes to liblzma. The issues affected at least
|
|
|
|
some builds using link-time optimizations.
|
|
|
|
|
|
|
|
* Fixed bugs in the rarely-used function lzma_index_dup().
|
|
|
|
|
|
|
|
* Use of external SHA-256 code is now disabled by default.
|
|
|
|
It can still be enabled by passing --enable-external-sha256
|
|
|
|
to configure. The reasons to disable it by default (see INSTALL
|
|
|
|
for more details):
|
|
|
|
|
|
|
|
- Some OS-specific SHA-256 implementations conflict with
|
|
|
|
OpenSSL and cause problems in programs that link against both
|
|
|
|
liblzma and libcrypto. At least FreeBSD 10 and MINIX 3.3.0
|
|
|
|
are affected.
|
|
|
|
|
|
|
|
- The internal SHA-256 is faster than the SHA-256 code in
|
|
|
|
some operating systems.
|
|
|
|
|
|
|
|
* Changed CPU core count detection to use sched_getaffinity() on
|
|
|
|
GNU/Linux and GNU/kFreeBSD.
|
|
|
|
|
|
|
|
* Fixes to the build-system and xz to make xz buildable even when
|
|
|
|
encoders, decoders, or threading have been disabled from libilzma
|
|
|
|
using configure options. These fixes added two new #defines to
|
|
|
|
config.h: HAVE_ENCODERS and HAVE_DECODERS.
|
|
|
|
|
|
|
|
|
2015-09-29 12:57:28 +02:00
|
|
|
5.2.2 (2015-09-29)
|
|
|
|
|
|
|
|
* Fixed bugs in QNX-specific code.
|
|
|
|
|
|
|
|
* Omitted the use of pipe2() even if it is available to avoid
|
|
|
|
portability issues with some old Linux and glibc combinations.
|
|
|
|
|
|
|
|
* Updated German translation.
|
|
|
|
|
|
|
|
* Added project files to build static and shared liblzma (not the
|
|
|
|
whole XZ Utils) with Visual Studio 2013 update 2 or later.
|
|
|
|
|
|
|
|
* Documented that threaded decompression hasn't been implemented
|
|
|
|
yet. A 5.2.0 NEWS entry describing multi-threading support had
|
|
|
|
incorrectly said "decompression" when it should have said
|
|
|
|
"compression".
|
|
|
|
|
|
|
|
|
2015-02-26 12:01:09 +01:00
|
|
|
5.2.1 (2015-02-26)
|
|
|
|
|
|
|
|
* Fixed a compression-ratio regression in fast mode of LZMA1 and
|
|
|
|
LZMA2. The bug is present in 5.1.4beta and 5.2.0 releases.
|
|
|
|
|
|
|
|
* Fixed a portability problem in xz that affected at least OpenBSD.
|
|
|
|
|
|
|
|
* Fixed xzdiff to be compatible with FreeBSD's mktemp which differs
|
|
|
|
from most other mktemp implementations.
|
|
|
|
|
|
|
|
* Changed CPU core count detection to use cpuset_getaffinity() on
|
|
|
|
FreeBSD.
|
|
|
|
|
|
|
|
|
2014-12-21 13:32:33 +01:00
|
|
|
5.2.0 (2014-12-21)
|
|
|
|
|
|
|
|
Since 5.1.4beta:
|
|
|
|
|
|
|
|
* All fixes from 5.0.8
|
|
|
|
|
|
|
|
* liblzma: Fixed lzma_stream_encoder_mt_memusage() when a preset
|
|
|
|
was used.
|
|
|
|
|
|
|
|
* xzdiff: If mktemp isn't installed, mkdir will be used as
|
|
|
|
a fallback to create a temporary directory. Installing mktemp
|
|
|
|
is still recommended.
|
|
|
|
|
|
|
|
* Updated French, German, Italian, Polish, and Vietnamese
|
|
|
|
translations.
|
|
|
|
|
|
|
|
Summary of fixes and new features added in the 5.1.x development
|
|
|
|
releases:
|
|
|
|
|
|
|
|
* liblzma:
|
|
|
|
|
|
|
|
- Added support for multi-threaded compression. See the
|
|
|
|
lzma_mt structure, lzma_stream_encoder_mt(), and
|
|
|
|
lzma_stream_encoder_mt_memusage() in <lzma/container.h>,
|
|
|
|
lzma_get_progress() in <lzma/base.h>, and lzma_cputhreads()
|
|
|
|
in <lzma/hardware.h> for details.
|
|
|
|
|
|
|
|
- Made the uses of lzma_allocator const correct.
|
|
|
|
|
|
|
|
- Added lzma_block_uncomp_encode() to create uncompressed
|
|
|
|
.xz Blocks using LZMA2 uncompressed chunks.
|
|
|
|
|
|
|
|
- Added support for LZMA_IGNORE_CHECK.
|
|
|
|
|
|
|
|
- A few speed optimizations were made.
|
|
|
|
|
|
|
|
- Added support for symbol versioning. It is enabled by default
|
|
|
|
on GNU/Linux, other GNU-based systems, and FreeBSD.
|
|
|
|
|
|
|
|
- liblzma (not the whole XZ Utils) should now be buildable
|
|
|
|
with MSVC 2013 update 2 or later using windows/config.h.
|
|
|
|
|
|
|
|
* xz:
|
|
|
|
|
|
|
|
- Fixed a race condition in the signal handling. It was
|
|
|
|
possible that e.g. the first SIGINT didn't make xz exit
|
|
|
|
if reading or writing blocked and one had bad luck. The fix
|
|
|
|
is non-trivial, so as of writing it is unknown if it will be
|
|
|
|
backported to the v5.0 branch.
|
|
|
|
|
2015-05-12 17:08:24 +02:00
|
|
|
- Multi-threaded compression can be enabled with the
|
2014-12-21 13:32:33 +01:00
|
|
|
--threads (-T) option.
|
2015-05-12 17:08:24 +02:00
|
|
|
[Fixed: This originally said "decompression".]
|
2014-12-21 13:32:33 +01:00
|
|
|
|
|
|
|
- New command line options in xz: --single-stream,
|
|
|
|
--block-size=SIZE, --block-list=SIZES,
|
|
|
|
--flush-timeout=TIMEOUT, and --ignore-check.
|
|
|
|
|
|
|
|
- xz -lvv now shows the minimum xz version that is required to
|
|
|
|
decompress the file. Currently it is 5.0.0 for all supported
|
|
|
|
.xz files except files with empty LZMA2 streams require 5.0.2.
|
|
|
|
|
|
|
|
* xzdiff and xzgrep now support .lzo files if lzop is installed.
|
|
|
|
The .tzo suffix is also recognized as a shorthand for .tar.lzo.
|
|
|
|
|
|
|
|
|
2014-09-14 20:50:13 +02:00
|
|
|
5.1.4beta (2014-09-14)
|
|
|
|
|
|
|
|
* All fixes from 5.0.6
|
|
|
|
|
|
|
|
* liblzma: Fixed the use of presets in threaded encoder
|
|
|
|
initialization.
|
|
|
|
|
|
|
|
* xz --block-list and --block-size can now be used together
|
|
|
|
in single-threaded mode. Previously the combination only
|
|
|
|
worked in multi-threaded mode.
|
|
|
|
|
|
|
|
* Added support for LZMA_IGNORE_CHECK to liblzma and made it
|
|
|
|
available in xz as --ignore-check.
|
|
|
|
|
|
|
|
* liblzma speed optimizations:
|
|
|
|
|
|
|
|
- Initialization of a new LZMA1 or LZMA2 encoder has been
|
|
|
|
optimized. (The speed of reinitializing an already-allocated
|
|
|
|
encoder isn't affected.) This helps when compressing many
|
|
|
|
small buffers with lzma_stream_buffer_encode() and other
|
|
|
|
similar situations where an already-allocated encoder state
|
|
|
|
isn't reused. This speed-up is visible in xz too if one
|
|
|
|
compresses many small files one at a time instead running xz
|
|
|
|
once and giving all files as command-line arguments.
|
|
|
|
|
|
|
|
- Buffer comparisons are now much faster when unaligned access
|
|
|
|
is allowed (configured with --enable-unaligned-access). This
|
|
|
|
speeds up encoding significantly. There is arch-specific code
|
|
|
|
for 32-bit and 64-bit x86 (32-bit needs SSE2 for the best
|
|
|
|
results and there's no run-time CPU detection for now).
|
|
|
|
For other archs there is only generic code which probably
|
|
|
|
isn't as optimal as arch-specific solutions could be.
|
|
|
|
|
|
|
|
- A few speed optimizations were made to the SHA-256 code.
|
|
|
|
(Note that the builtin SHA-256 code isn't used on all
|
|
|
|
operating systems.)
|
|
|
|
|
|
|
|
* liblzma can now be built with MSVC 2013 update 2 or later
|
|
|
|
using windows/config.h.
|
|
|
|
|
|
|
|
* Vietnamese translation was added.
|
|
|
|
|
|
|
|
|
2013-10-26 12:25:02 +02:00
|
|
|
5.1.3alpha (2013-10-26)
|
|
|
|
|
|
|
|
* All fixes from 5.0.5
|
|
|
|
|
|
|
|
* liblzma:
|
|
|
|
|
|
|
|
- Fixed a deadlock in the threaded encoder.
|
|
|
|
|
|
|
|
- Made the uses of lzma_allocator const correct.
|
|
|
|
|
|
|
|
- Added lzma_block_uncomp_encode() to create uncompressed
|
|
|
|
.xz Blocks using LZMA2 uncompressed chunks.
|
|
|
|
|
|
|
|
- Added support for native threads on Windows and the ability
|
|
|
|
to detect the number of CPU cores.
|
|
|
|
|
|
|
|
* xz:
|
|
|
|
|
|
|
|
- Fixed a race condition in the signal handling. It was
|
|
|
|
possible that e.g. the first SIGINT didn't make xz exit
|
|
|
|
if reading or writing blocked and one had bad luck. The fix
|
|
|
|
is non-trivial, so as of writing it is unknown if it will be
|
|
|
|
backported to the v5.0 branch.
|
|
|
|
|
|
|
|
- Made the progress indicator work correctly in threaded mode.
|
|
|
|
|
|
|
|
- Threaded encoder now works together with --block-list=SIZES.
|
|
|
|
|
|
|
|
- Added preliminary support for --flush-timeout=TIMEOUT.
|
|
|
|
It can be useful for (somewhat) real-time streaming. For
|
|
|
|
now the decompression side has to be done with something
|
|
|
|
else than the xz tool due to how xz does buffering, but this
|
|
|
|
should be fixed.
|
|
|
|
|
|
|
|
|
2012-07-04 19:01:19 +02:00
|
|
|
5.1.2alpha (2012-07-04)
|
|
|
|
|
|
|
|
* All fixes from 5.0.3 and 5.0.4
|
|
|
|
|
|
|
|
* liblzma:
|
|
|
|
|
|
|
|
- Fixed a deadlock and an invalid free() in the threaded encoder.
|
|
|
|
|
|
|
|
- Added support for symbol versioning. It is enabled by default
|
|
|
|
on GNU/Linux, other GNU-based systems, and FreeBSD.
|
|
|
|
|
|
|
|
- Use SHA-256 implementation from the operating system if one is
|
|
|
|
available in libc, libmd, or libutil. liblzma won't use e.g.
|
|
|
|
OpenSSL or libgcrypt to avoid introducing new dependencies.
|
|
|
|
|
|
|
|
- Fixed liblzma.pc for static linking.
|
|
|
|
|
|
|
|
- Fixed a few portability bugs.
|
|
|
|
|
|
|
|
* xz --decompress --single-stream now fixes the input position after
|
|
|
|
successful decompression. Now the following works:
|
|
|
|
|
|
|
|
echo foo | xz > foo.xz
|
|
|
|
echo bar | xz >> foo.xz
|
|
|
|
( xz -dc --single-stream ; xz -dc --single-stream ) < foo.xz
|
|
|
|
|
|
|
|
Note that it doesn't work if the input is not seekable
|
|
|
|
or if there is Stream Padding between the concatenated
|
|
|
|
.xz Streams.
|
|
|
|
|
|
|
|
* xz -lvv now shows the minimum xz version that is required to
|
|
|
|
decompress the file. Currently it is 5.0.0 for all supported .xz
|
|
|
|
files except files with empty LZMA2 streams require 5.0.2.
|
|
|
|
|
|
|
|
* Added an *incomplete* implementation of --block-list=SIZES to xz.
|
|
|
|
It only works correctly in single-threaded mode and when
|
|
|
|
--block-size isn't used at the same time. --block-list allows
|
|
|
|
specifying the sizes of Blocks which can be useful e.g. when
|
|
|
|
creating files for random-access reading.
|
|
|
|
|
|
|
|
|
2011-04-12 10:46:01 +02:00
|
|
|
5.1.1alpha (2011-04-12)
|
|
|
|
|
|
|
|
* All fixes from 5.0.2
|
|
|
|
|
|
|
|
* liblzma fixes that will also be included in 5.0.3:
|
|
|
|
|
|
|
|
- A memory leak was fixed.
|
|
|
|
|
|
|
|
- lzma_stream_buffer_encode() no longer creates an empty .xz
|
|
|
|
Block if encoding an empty buffer. Such an empty Block with
|
|
|
|
LZMA2 data would trigger a bug in 5.0.1 and older (see the
|
|
|
|
first bullet point in 5.0.2 notes). When releasing 5.0.2,
|
|
|
|
I thought that no encoder creates this kind of files but
|
|
|
|
I was wrong.
|
|
|
|
|
|
|
|
- Validate function arguments better in a few functions. Most
|
|
|
|
importantly, specifying an unsupported integrity check to
|
|
|
|
lzma_stream_buffer_encode() no longer creates a corrupt .xz
|
|
|
|
file. Probably no application tries to do that, so this
|
|
|
|
shouldn't be a big problem in practice.
|
|
|
|
|
|
|
|
- Document that lzma_block_buffer_encode(),
|
|
|
|
lzma_easy_buffer_encode(), lzma_stream_encoder(), and
|
|
|
|
lzma_stream_buffer_encode() may return LZMA_UNSUPPORTED_CHECK.
|
|
|
|
|
|
|
|
- The return values of the _memusage() functions are now
|
|
|
|
documented better.
|
|
|
|
|
|
|
|
* Support for multithreaded compression was added using the simplest
|
|
|
|
method, which splits the input data into blocks and compresses
|
|
|
|
them independently. Other methods will be added in the future.
|
|
|
|
The current method has room for improvement, e.g. it is possible
|
|
|
|
to reduce the memory usage.
|
|
|
|
|
|
|
|
* Added the options --single-stream and --block-size=SIZE to xz.
|
|
|
|
|
|
|
|
* xzdiff and xzgrep now support .lzo files if lzop is installed.
|
|
|
|
The .tzo suffix is also recognized as a shorthand for .tar.lzo.
|
|
|
|
|
|
|
|
* Support for short 8.3 filenames under DOS was added to xz. It is
|
|
|
|
experimental and may change before it gets into a stable release.
|
|
|
|
|
2010-10-23 13:15:35 +02:00
|
|
|
|
2014-12-21 13:32:22 +01:00
|
|
|
5.0.8 (2014-12-21)
|
|
|
|
|
|
|
|
* Fixed an old bug in xzgrep that affected OpenBSD and probably
|
|
|
|
a few other operating systems too.
|
|
|
|
|
|
|
|
* Updated French and German translations.
|
|
|
|
|
|
|
|
* Added support for detecting the amount of RAM on AmigaOS/AROS.
|
|
|
|
|
|
|
|
* Minor build system updates.
|
|
|
|
|
|
|
|
|
2014-09-20 20:01:21 +02:00
|
|
|
5.0.7 (2014-09-20)
|
|
|
|
|
|
|
|
* Fix regressions introduced in 5.0.6:
|
|
|
|
|
|
|
|
- Fix building with non-GNU make.
|
|
|
|
|
|
|
|
- Fix invalid Libs.private value in liblzma.pc which broke
|
|
|
|
static linking against liblzma if the linker flags were
|
|
|
|
taken from pkg-config.
|
|
|
|
|
|
|
|
|
2014-09-14 20:50:13 +02:00
|
|
|
5.0.6 (2014-09-14)
|
|
|
|
|
|
|
|
* xzgrep now exits with status 0 if at least one file matched.
|
|
|
|
|
|
|
|
* A few minor portability and build system fixes
|
|
|
|
|
|
|
|
|
2013-06-30 18:40:11 +02:00
|
|
|
5.0.5 (2013-06-30)
|
|
|
|
|
|
|
|
* lzmadec and liblzma's lzma_alone_decoder(): Support decompressing
|
|
|
|
.lzma files that have less common settings in the headers
|
|
|
|
(dictionary size other than 2^n or 2^n + 2^(n-1), or uncompressed
|
|
|
|
size greater than 256 GiB). The limitations existed to avoid false
|
|
|
|
positives when detecting .lzma files. The lc + lp <= 4 limitation
|
|
|
|
still remains since liblzma's LZMA decoder has that limitation.
|
|
|
|
|
|
|
|
NOTE: xz's .lzma support or liblzma's lzma_auto_decoder() are NOT
|
|
|
|
affected by this change. They still consider uncommon .lzma headers
|
|
|
|
as not being in the .lzma format. Changing this would give way too
|
|
|
|
many false positives.
|
|
|
|
|
|
|
|
* xz:
|
|
|
|
|
|
|
|
- Interaction of preset and custom filter chain options was
|
|
|
|
made less illogical. This affects only certain less typical
|
|
|
|
uses cases so few people are expected to notice this change.
|
|
|
|
|
|
|
|
Now when a custom filter chain option (e.g. --lzma2) is
|
|
|
|
specified, all preset options (-0 ... -9, -e) earlier are on
|
|
|
|
the command line are completely forgotten. Similarly, when
|
|
|
|
a preset option is specified, all custom filter chain options
|
|
|
|
earlier on the command line are completely forgotten.
|
|
|
|
|
|
|
|
Example 1: "xz -9 --lzma2=preset=5 -e" is equivalent to "xz -e"
|
|
|
|
which is equivalent to "xz -6e". Earlier -e didn't put xz back
|
|
|
|
into preset mode and thus the example command was equivalent
|
|
|
|
to "xz --lzma2=preset=5".
|
|
|
|
|
|
|
|
Example 2: "xz -9e --lzma2=preset=5 -7" is equivalent to
|
|
|
|
"xz -7". Earlier a custom filter chain option didn't make
|
|
|
|
xz forget the -e option so the example was equivalent to
|
|
|
|
"xz -7e".
|
|
|
|
|
|
|
|
- Fixes and improvements to error handling.
|
|
|
|
|
|
|
|
- Various fixes to the man page.
|
|
|
|
|
|
|
|
* xzless: Fixed to work with "less" versions 448 and later.
|
|
|
|
|
|
|
|
* xzgrep: Made -h an alias for --no-filename.
|
|
|
|
|
|
|
|
* Include the previously missing debug/translation.bash which can
|
|
|
|
be useful for translators.
|
|
|
|
|
|
|
|
* Include a build script for Mac OS X. This has been in the Git
|
|
|
|
repository since 2010 but due to a mistake in Makefile.am the
|
|
|
|
script hasn't been included in a release tarball before.
|
|
|
|
|
|
|
|
|
2012-06-22 18:00:23 +02:00
|
|
|
5.0.4 (2012-06-22)
|
|
|
|
|
|
|
|
* liblzma:
|
|
|
|
|
|
|
|
- Fix lzma_index_init(). It could crash if memory allocation
|
|
|
|
failed.
|
|
|
|
|
|
|
|
- Fix the possibility of an incorrect LZMA_BUF_ERROR when a BCJ
|
|
|
|
filter is used and the application only provides exactly as
|
|
|
|
much output space as is the uncompressed size of the file.
|
|
|
|
|
|
|
|
- Fix a bug in doc/examples_old/xz_pipe_decompress.c. It didn't
|
|
|
|
check if the last call to lzma_code() really returned
|
|
|
|
LZMA_STREAM_END, which made the program think that truncated
|
|
|
|
files are valid.
|
|
|
|
|
|
|
|
- New example programs in doc/examples (old programs are now in
|
|
|
|
doc/examples_old). These have more comments and more detailed
|
|
|
|
error handling.
|
|
|
|
|
|
|
|
* Fix "xz -lvv foo.xz". It could crash on some corrupted files.
|
|
|
|
|
|
|
|
* Fix output of "xz --robot -lv" and "xz --robot -lvv" which
|
|
|
|
incorrectly printed the filename also in the "foo (x/x)" format.
|
|
|
|
|
|
|
|
* Fix exit status of "xzdiff foo.xz bar.xz".
|
|
|
|
|
|
|
|
* Fix exit status of "xzgrep foo binary_file".
|
|
|
|
|
|
|
|
* Fix portability to EBCDIC systems.
|
|
|
|
|
|
|
|
* Fix a configure issue on AIX with the XL C compiler. See INSTALL
|
|
|
|
for details.
|
|
|
|
|
|
|
|
* Update French, German, Italian, and Polish translations.
|
|
|
|
|
|
|
|
|
2011-05-22 15:42:11 +02:00
|
|
|
5.0.3 (2011-05-21)
|
|
|
|
|
|
|
|
* liblzma fixes:
|
|
|
|
|
|
|
|
- A memory leak was fixed.
|
|
|
|
|
|
|
|
- lzma_stream_buffer_encode() no longer creates an empty .xz
|
|
|
|
Block if encoding an empty buffer. Such an empty Block with
|
|
|
|
LZMA2 data would trigger a bug in 5.0.1 and older (see the
|
|
|
|
first bullet point in 5.0.2 notes). When releasing 5.0.2,
|
|
|
|
I thought that no encoder creates this kind of files but
|
|
|
|
I was wrong.
|
|
|
|
|
|
|
|
- Validate function arguments better in a few functions. Most
|
|
|
|
importantly, specifying an unsupported integrity check to
|
|
|
|
lzma_stream_buffer_encode() no longer creates a corrupt .xz
|
|
|
|
file. Probably no application tries to do that, so this
|
|
|
|
shouldn't be a big problem in practice.
|
|
|
|
|
|
|
|
- Document that lzma_block_buffer_encode(),
|
|
|
|
lzma_easy_buffer_encode(), lzma_stream_encoder(), and
|
|
|
|
lzma_stream_buffer_encode() may return LZMA_UNSUPPORTED_CHECK.
|
|
|
|
|
|
|
|
- The return values of the _memusage() functions are now
|
|
|
|
documented better.
|
|
|
|
|
|
|
|
* Fix command name detection in xzgrep. xzegrep and xzfgrep now
|
|
|
|
correctly use egrep and fgrep instead of grep.
|
|
|
|
|
|
|
|
* French translation was added.
|
|
|
|
|
|
|
|
|
2011-04-01 07:47:20 +02:00
|
|
|
5.0.2 (2011-04-01)
|
|
|
|
|
|
|
|
* LZMA2 decompressor now correctly accepts LZMA2 streams with no
|
|
|
|
uncompressed data. Previously it considered them corrupt. The
|
|
|
|
bug can affect applications that use raw LZMA2 streams. It is
|
|
|
|
very unlikely to affect .xz files because no compressor creates
|
|
|
|
.xz files with empty LZMA2 streams. (Empty .xz files are a
|
|
|
|
different thing than empty LZMA2 streams.)
|
|
|
|
|
|
|
|
* "xz --suffix=.foo filename.foo" now refuses to compress the
|
|
|
|
file due to it already having the suffix .foo. It was already
|
|
|
|
documented on the man page, but the code lacked the test.
|
|
|
|
|
|
|
|
* "xzgrep -l foo bar.xz" works now.
|
|
|
|
|
|
|
|
* Polish translation was added.
|
|
|
|
|
|
|
|
|
2011-01-28 19:16:57 +01:00
|
|
|
5.0.1 (2011-01-29)
|
|
|
|
|
|
|
|
* xz --force now (de)compresses files that have setuid, setgid,
|
|
|
|
or sticky bit set and files that have multiple hard links.
|
|
|
|
The man page had it documented this way already, but the code
|
|
|
|
had a bug.
|
|
|
|
|
|
|
|
* gzip and bzip2 support in xzdiff was fixed.
|
|
|
|
|
|
|
|
* Portability fixes
|
|
|
|
|
|
|
|
* Minor fix to Czech translation
|
|
|
|
|
|
|
|
|
2010-10-23 13:15:35 +02:00
|
|
|
5.0.0 (2010-10-23)
|
|
|
|
|
|
|
|
Only the most important changes compared to 4.999.9beta are listed
|
|
|
|
here. One change is especially important:
|
|
|
|
|
|
|
|
* The memory usage limit is now disabled by default. Some scripts
|
|
|
|
written before this change may have used --memory=max on xz command
|
|
|
|
line or in XZ_OPT. THESE USES OF --memory=max SHOULD BE REMOVED
|
|
|
|
NOW, because they interfere with user's ability to set the memory
|
|
|
|
usage limit himself. If user-specified limit causes problems to
|
|
|
|
your script, blame the user.
|
|
|
|
|
|
|
|
Other significant changes:
|
|
|
|
|
|
|
|
* Added support for XZ_DEFAULTS environment variable. This variable
|
|
|
|
allows users to set default options for xz, e.g. default memory
|
|
|
|
usage limit or default compression level. Scripts that use xz
|
|
|
|
must never set or unset XZ_DEFAULTS. Scripts should use XZ_OPT
|
|
|
|
instead if they need a way to pass options to xz via an
|
|
|
|
environment variable.
|
|
|
|
|
|
|
|
* The compression settings associated with the preset levels
|
|
|
|
-0 ... -9 have been changed. --extreme was changed a little too.
|
|
|
|
It is now less likely to make compression worse, but with some
|
|
|
|
files the new --extreme may compress slightly worse than the old
|
|
|
|
--extreme.
|
|
|
|
|
|
|
|
* If a preset level (-0 ... -9) is specified after a custom filter
|
|
|
|
chain options have been used (e.g. --lzma2), the custom filter
|
|
|
|
chain will be forgotten. Earlier the preset options were
|
|
|
|
completely ignored after custom filter chain options had been
|
|
|
|
seen.
|
|
|
|
|
|
|
|
* xz will create sparse files when decompressing if the uncompressed
|
|
|
|
data contains long sequences of binary zeros. This is done even
|
|
|
|
when writing to standard output that is connected to a regular
|
|
|
|
file and certain additional conditions are met to make it safe.
|
|
|
|
|
|
|
|
* Support for "xz --list" was added. Combine with --verbose or
|
|
|
|
--verbose --verbose (-vv) for detailed output.
|
|
|
|
|
|
|
|
* I had hoped that liblzma API would have been stable after
|
|
|
|
4.999.9beta, but there have been a couple of changes in the
|
|
|
|
advanced features, which don't affect most applications:
|
|
|
|
|
|
|
|
- Index handling code was revised. If you were using the old
|
|
|
|
API, you will get a compiler error (so it's easy to notice).
|
|
|
|
|
|
|
|
- A subtle but important change was made to the Block handling
|
|
|
|
API. lzma_block.version has to be initialized even for
|
|
|
|
lzma_block_header_decode(). Code that doesn't do it will work
|
|
|
|
for now, but might break in the future, which makes this API
|
|
|
|
change easy to miss.
|
|
|
|
|
|
|
|
* The major soname has been bumped to 5.0.0. liblzma API and ABI
|
|
|
|
are now stable, so the need to recompile programs linking against
|
|
|
|
liblzma shouldn't arise soon.
|
|
|
|
|