This page is the 0.13.0 part of the lrzsz NEWS file. Note: the ESC8/-7 feature described below was removed again in 0.13.1, see the release page.
This release fixes a large number of security issues. Two of the changes warrant an immediate update if you use lrz to receive files from not perfectly trustworthy senders.
This was a security bug found by Tristan Madani (Talence Security).
Likewise lsz did not correctly check paths in the restricted mode if PUBDIR support was not compiled in.
This was a security bug found by Tristan Madani (Talence Security).
Note: this stems from the original public domain rzsz suite (80s).
This was a security bug found by Tristan Madani (Talence Security).
Note: this stems from the original public domain rzsz suite (80s).
Note: this stems from the original public domain rzsz suite (80s).
Security: After removal of the mmap code, fuzzing showed that an illegal offset during a resumed transfer might have caused a remote denial of service (reliable, deterministic) and a potential out-of-bounds read within the 4 GiB following the start of the file. This could have caused an information leak.
Note: this stems from the original public domain rzsz suite (80s).
Note: this stems from the original public domain rzsz suite (80s).
Note: this stems from the original public domain rzsz suite (80s).
This option is only needed on transports that can silently drop a packet, for example a packet radio or other datagram link that loses packets without retransmitting them, or a line that overruns its buffer when flow control fails. It is unnecessary on transports that retransmit internally, and on transports that only corrupt individual characters (noisy modem or serial lines).
Note: lrzsz's 31-bit file-size limit stems from the original public domain rzsz suite (80s). The same limit existed in later published omen technology sources, and at least one independent implementation.
Expect interoperability problems when transferring files of that size.
The current ZMODEM documentation marks ZCNL as historic, because transfers using ASCII conversion cannot be resumed, and because the conversion is questionable (it removes every carriage return and cuts the file short at the first CPM EOF character / ^X).
The current ZMODEM documentation states this should neither be sent nor acted upon. lrzsz keeps it for compatibility and will likely remove it in a future release. The received mode is filtered as before (type bits stripped, umask applied).
The current ZMODEM documentation states that a sender must not transmit absolute pathnames or ".." components. The historical behavior (OMEN sz and derivatives) allowed both, so lsz still keeps it for compatibility.
A future release will keep allowing relative paths but will reject absolute paths and ".." components with a fatal error.
On the receiving side lrz confines received filenames to the receiving directory regardless of what the sender transmits.
New setups should use plain relative filenames.
The option is only needed on lines that corrupt the 8th bit, or to force the capability advertisement.
lsz, the original public domain zmodem sz and crzsz csz always enforced segmented streaming - which is why lrzsz and other zmodem implementations stemming from the same source usually behave much better on faulty lines than other implementations optimized for the perfect world.
I'm willing to work with translators, not only to include translations, but also to make your job easier - but I am not going to burden myself with doing translations.
The result is the same, but peers expecting the documented reply now get it.
Also a receiver that dies instead of answering no longer stalls the closing handshake.
Performance on errorfree lines conditions may be worse than before, depending on the network buffering and delay, though the impact is limited. On a line with a high delay (ping time) the precautions against high packet loss rates result in a loss of performance.
Fun fact: the same implementations leading the performance score on a 115200 bps line with a 20ms delay are the ones losing on the 1mbit line with 250ms delay line.
The package refused to die. CVS-2018-10195 came, and i wondered for a while why nothing worse had been detected. But then i decided that lrzsz is not my problem anymore. It had to be the problem of someone else.
Then Tristan contacted me on 2026-07-27, which was 8 days after i did a major screwup at https://naturfotografen-forum.de by updating the production system to a software version which should been tested and debugged for at least 2 or 3 additional weeks, and which contained one feature which made a rollback infeasible. I saw his mail, and thought 'Uh, uh… this is not a minor thing'. But i had no time, because the forum is more important to me.
14 days later i found the time, and the real fun started. I needed far less time to fix the three vulnerabilities Tristan reported than i needed to fix the autoconf stuff so i could compile the package. Updating the gettext stuff also took hours, and i wasted half an evening trying to update the dejagnu test suite (which i failed at).
Then i sat back, looked at the code, decided what compatibility hacks to throw out, and started to clean up the mess.
Then i asked qwen (coder next) to block my graphics card for a few days, i mean, i asked the LLM to review the code (the prompt was somewhat longer than that), which on my 4 GB graphics card took a long time. In the meantime i found the old recordxyz tool (a protocol tracer), and even the version 2 of it (a total rewrite which was much worse than the original, which wasn't very good to begin with), took some parts from them, and created zmodemsnif.
When that was about ready, i gave up on the local qwen. It had produced some interesting findings, but my machine is too slow for that. I used a cloud kimi-k2.6 to do a review, and later used glm-5.2, kimi-k3, some qwen and glm-5.3-flash for the same.
For all you LLM haters or sceptics: i get it. I hate these LLM companies with a passion. These people steal in the internet (and from my own server, too), and give nothing back, beyond nebulous claims and lies and server overloads. They spend billions to improve LLMs, which should be spend to improve people and society. The list of reasonable complaints is long. I get all that.
But i've run out of people i can work with. The only programmer whom i could have relied on reviewing my code, and any changes, in time has died a few years ago (and i would have had to pay for by reviewing his code, which is something i tried to avoid, because his stuff was really complicated - lrzsz is quite simple compared to that). And i absolutely _needed_ some kind of review. I was out of practise with C and the toolchain, and given the sorry state of the C language (why, oh why, isn't '-Wturn-on-all -Werror' the default?) it would have been irresponsible to not use an LLM for that. This kind of review is something LLMs are good at, and they found more than a few security issues in the code (i also found some, but not that many), and quite a few bugs.
The core code, any code in the installed programs, is 100% human written (i'm lazy and hate commenting, and copied some LLM generated comments, but no code).
The code of the programs not installed by default (which are not very useful for anyone but the maintainer) is partially or mostly human written:
If you don't want to use lrzsz because of the LLM usage, you don't have to. I understand that. Maybe you can backport the security fixes to lrzsz-0.12.21rc - but i will not do that.
This release did cost about 6 weeks of my spare time, including some extra time during my vacation. In addition i spent a few days rewriting the ZMODEM specification. If you feel that i should not have spent that much time on this old package: you are not alone.
If you feel you should pay something for this: please consider donating to some international help organization, for example Amnesty International, International Red Cross and Red Crescent Movement, Médecins Sans Frontières (Doctors Without Borders) or UNICEF.
Back to the lrzsz release page.