From 191abd492ad1535a38a5f2c624ccf3f044e4e47d Mon Sep 17 00:00:00 2001 From: Alex Willmer Date: Thu, 6 Nov 2025 11:33:54 +0000 Subject: [PATCH] mitogen: Compress first stage without header or checksum (790 bytes -> 786) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ```console ➜ mitogen git:(boot-cmd--argv) ✗ ./preamble_size.py SSH command size: 786 Preamble (mitogen.core + econtext) size: 18230 (17.80KiB) Original Minimized Compressed mitogen.core 152237 148.7KiB 68453 66.8KiB 45.0% 18130 17.7KiB 11.9% mitogen.parent 99166 96.8KiB 51375 50.2KiB 51.8% 12957 12.7KiB 13.1% mitogen.fork 8445 8.2KiB 4139 4.0KiB 49.0% 1652 1.6KiB 19.6% mitogen.ssh 10847 10.6KiB 6913 6.8KiB 63.7% 2102 2.1KiB 19.4% mitogen.sudo 12089 11.8KiB 5924 5.8KiB 49.0% 2249 2.2KiB 18.6% mitogen.select 12325 12.0KiB 2929 2.9KiB 23.8% 964 0.9KiB 7.8% mitogen.service 41581 40.6KiB 22398 21.9KiB 53.9% 5847 5.7KiB 14.1% mitogen.fakessh 15753 15.4KiB 8135 7.9KiB 51.6% 2672 2.6KiB 17.0% mitogen.master 52891 51.7KiB 27586 26.9KiB 52.2% 7129 7.0KiB 13.5% ``` Confirmed Python 2.4 supports this use of zlib.compressobj, despite lack of mention in https://docs.python.org/2.4/lib/module-zlib.html ```pycon Python 2.4.6 (#2, Apr 29 2018, 11:16:24) [GCC 7.3.0] on linux4 Type "help", "copyright", "credits" or "license" for more information. >>> import zlib >>> c=zlib.compressobj(zlib.Z_BEST_COMPRESSION,zlib.DEFLATED,-zlib.MAX_WBITS) >>> c.compress('qwertyuiop') + c.flush() '+,O-*\xa9,\xcd\xcc/\x00\x00' ``` --- mitogen/parent.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mitogen/parent.py b/mitogen/parent.py index be046bf6..9668a85b 100644 --- a/mitogen/parent.py +++ b/mitogen/parent.py @@ -1474,7 +1474,10 @@ class Connection(object): preamble_compressed = self.get_preamble() source = source.replace('PREAMBLE_COMPRESSED_LEN', str(len(preamble_compressed))) - compressed = zlib.compress(source.encode(), 9) + compressor = zlib.compressobj( + zlib.Z_BEST_COMPRESSION, zlib.DEFLATED, -zlib.MAX_WBITS, + ) + compressed = compressor.compress(source.encode()) + compressor.flush() encoded = binascii.b2a_base64(compressed).replace(b('\n'), b('')) # Just enough to decode, decompress, and exec the first stage. @@ -1485,7 +1488,7 @@ class Connection(object): '-c', 'import sys;sys.path=[p for p in sys.path if p];' 'import binascii,os,select,zlib;' - 'exec(zlib.decompress(binascii.a2b_base64("%s")))' % (encoded.decode(),), + 'exec(zlib.decompress(binascii.a2b_base64("%s",-15)))' % (encoded.decode(),), ] def get_econtext_config(self):