You do not have permission to delete messages in this group
Copy link
Report message
Show original message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to tinymux
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512
Subject: [ANNOUNCE] TinyMUX 2.13.0.16 released
TinyMUX 2.13.0.16 is now available. This is a hardening release on the 2.13 line: twenty-five fixes, dominated by crash and denial-of-service work and by the networking layer. Several of the crash fixes are reachable by an ordinary player, so this is a recommended upgrade for any game running 2.13. No configuration changes are required.
Changes since 2.13.0.15 - ------------------------------
- - Crash and denial-of-service fixes. The evaluator's recursion limit is now reachable before the stack runs out: mux_exec() kept an 8000-byte automatic buffer and recurses on two paths, so each nesting level cost roughly 17 KB of stack and the physical ceiling on a stock Linux server sat at 490 levels -- below the shipped recursion limit of 500. A player nesting u() about 491 deep crashed the server before the limit could fire. The buffer is now static, the frame drops from 8344 to 328 bytes, and the ceiling rises to roughly 8500.
- - Three more player-reachable overruns are closed: @lock parser recursion is depth-bounded (a key with roughly 400 leading '!' characters overflowed the stack), @mail to a repeated mail alias no longer runs past a fixed 4000-entry recipient array, and the legacy getstring_noalloc() read path is bounded -- that one is not confined to old databases, because the EOF-marker read runs on every flatfile load.
- - Crash recovery. Uncaught C++ exceptions on the network and task paths no longer take the process down; barriers now wrap connection event dispatch, send_data, the task scheduler, and the accept branch of the main loop. SIGABRT takes the same panic-restart arm as SIGSEGV and friends rather than logging and exiting, and panic restart under GANL works again -- the signal path had never recorded listener descriptors for the restart database, and the core-dumping twin ran full exit() destructors that tore down sockets the parent still needed.
- - Networking. Thirteen GANL fixes across the epoll and select engines and the TLS transport: a connection-teardown re-entrancy, read events arriving on a closing connection, a failed epoll_wait() that spun the loop instead of being handled, an event fetch that could exceed the caller's array, an FD_SETSIZE clamp on select's descriptor loop, a not-found descriptor that was being closed, queued plaintext discarded when a TLS write had to be deferred, an uncapped OpenSSL read BIO, TLS descriptors carried across @restart and panic restart, and a dual-stack listener that silently bound IPv6-only now warning instead.
- - Engine debug logging is off unless GANL_DEBUG is defined at build time. This now covers the Windows engines (IOCP, wselect) and the Schannel transport as well as the POSIX ones; on a detached Windows service the output goes to the debugger rather than to a console that is not there.
- - Windows. The EXE stack reserve is raised to 16 MB. netmux.vcxproj set none, so the build took MSBuild's 1 MB default while the recursion limit is calibrated against a Linux-sized stack -- measured on MSVC x64, 1 MB crashed at 58 to 60 levels. The reserve is address space, not committed memory. netmux.vcxproj's include and library paths are now relative to the project instead of hardcoded.
- - Other fixes. An oversized sitelock CIDR prefix is rejected instead of silently truncating; the CResultsSet field walk is restored, so a result set with two or more columns no longer returns pointers into the middle of field data (reachable through rsrec/rsnext, and only with a configured SQL slave); an EVP_MD_CTX is released rather than leaked when a digest algorithm name is unknown; and sqlslave is const-correct so the module compiles with modern g++.
Configuration and behaviour changes - ------------------------------
No configuration changes are required and no softcode changes are needed. One malformed-input behaviour changes: a sitelock prefix too large to fit in an int -- /4294967296, for example -- is now rejected rather than truncating to 0 and producing a 0.0.0.0 mask that matched every address. Every prefix that is valid today parses identically.
Download - ------------------------------
Unix - ----
Full source (tar.gz): mux-2.13.0.16.unix.tar.gz SHA256: 282ced57161487b49434317992619428df41f7e4bb868131974ff8532ccc5c1e
Full source (tar.bz2): mux-2.13.0.16.unix.tar.bz2 SHA256: d6d137df9b9e3dba2c0b3fd901a222ccbaac6b4682e545a8b8b2347db47cd941
Patch from 2.13.0.15: mux-2.13.0.15-2.13.0.16.unix.patch.gz SHA256: cd601cbbd51509237dd6dca0b8ac1225292e785a4952a0c987eb9cbb19b86e9b