Protocol Analyzer 1.03 for the FulDC++ plugin catalogue.
This package is our build, and it is no longer just upstream's code. iceman50 has not released
1.02, let alone 1.03. Our 1.02 was his source at 621df978 with only toolchain patches; an audit of
that source found twelve defects, and seven are fixed here and are not in his tree. The complete
corresponding source ships beside this package, one commit per fix, as GPL-2.0 requires.
If iceman50 later publishes his own 1.02 or 1.03, its bytes will not be these.
Upstream: https://github.com/iceman50/DC-Protocol-Analyzer
Provenance: https://github.com/fuldcpp/plugins/blob/main/protocolanalyzer/PROVENANCE.md
Fixed in this build
- The NMDC
|pipe escape was never decoded unless it happened to be the last six bytes of
a value: the decoder measured a seven-byte window against the six-byte literal. An ordinary chat
message containing|displayed|instead of the character. - The inspector omitted its truncation marker when bounded output stopped short of the byte cap
to avoid splitting a UTF-8 sequence, so whether a truncation was announced depended on the length
of everything rendered before it. - The timestamp format reached the CRT unscreened. An unsupported conversion specifier is an
invalid parameter, which terminates the host process under the UCRT and MSVC. Measured: a MinGW
build linkingmsvcrt.dllreturns 0 and carries on, so no published MinGW package was exposed --
upstream'sprojects/vs2022build is. - The definition catalog followed the Windows user locale, not the language the host displays.
It now prefersDCConfig::get_language, gated on the host executable because stock DC++ and
FearDC do not implement it and the interface version cannot distinguish them. - The custom title bar installed
this-capturing window handlers before the calls that can
throw. The class has no destructor, so a failed construction left the owner window holding
handlers pointing into freed memory. asciiEqualNoCasefolded through the C locale despite its name.- A redraw condition tested a queue the preceding loop had already drained.
Five further findings are deliberately not patched: two need a design decision that is
upstream's to make, and three cannot occur on the hosts this package targets.
Verification
Built with MSYS2 MinGW-w64 GCC 16.1 through upstream's own build_dist.ps1: zero warnings, the
bounded protocol-analyzer suite green, the strict ABI/UI smoke suite green, and upstream's
audit_release.ps1 passing on the package -- PE32+ x86-64, exports exactly pluginInit, imports
only system libraries.
The pipe-escape and inspector-truncation fixes were proved failing-first: the tests were written
before the fixes and failed against the unfixed parser. The title-bar change is covered by the smoke
suite's eight custom-caption checks, all still passing. The language fix was confirmed in a real
FulDC++ profile, where the same machine went from loading da-dk (its Windows locale) to en-us
(the language the client is actually running in).
Hashes
| file | size | SHA-256 |
|---|---|---|
ProtocolAnalyzer.dcext |
13,588,170 | f43aba2d0173c3e9147e16eaf75d9a1684342d353c69646400b377822c0dcf73 |
ProtocolAnalyzer-source.zip |
735,412 | 23947f8e25a5a192889ff9abe9f7ec9cb2af8d6944c56f809ea0ed1a63a7e578 |