Skip to content

Protocol Analyzer 1.03

Latest

Choose a tag to compare

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 linking msvcrt.dll returns 0 and carries on, so no published MinGW package was exposed --
    upstream's projects/vs2022 build is.
  • The definition catalog followed the Windows user locale, not the language the host displays.
    It now prefers DCConfig::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.
  • asciiEqualNoCase folded 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