PingerPlot 1.3.2
Acts on an independent third-party audit of 1.3.1. All fifteen findings are
addressed. No new features; the theme is that several ways the app could stop
doing its job did so silently, and now say so.
Fixed
- One malformed geo reply killed the lookup worker permanently, and the Map
tab stopped resolving with no error and no retry. - A probe log that could not be opened was disabled silently: the error was
written to the status line, which the worker overwrites milliseconds later. - Headless never checked whether the ICMP backend works, so an unusable
backend read as "destination never answered" and pointed the operator at
the network instead of at a sysctl. - --baseline could crash a scheduled job after printing its report, and skip
--report-csv, by reading a live monitor's hop list without the lock. - On POSIX a source IP the machine does not hold raised a bare errno instead
of being rejected by name -- and inside a round it read as 100% packet loss
on a path that was fine. - Loading a session left a permanently dead row in the Targets grid, rewritten
on every save. - The UDP port walk could wrap to 0 and silently lose a hop from the round.
- socket.SIO_RCVALL is Windows-only and escaped every caller's except OSError.
- Alert clearing logged, beeped and fired the webhook while holding the lock.
- The geo response body is now read with a 64 KB bound.
Changed
- The release workflow no longer interpolates ${{ }} into a shell script, and
validates the tag by character set as well as shape. Actions are pinned by
commit SHA, with Dependabot to keep them current. - The Engine dialog explains that UDP traceroute walks the destination port.
Notes
- 370 -> 424 tests. gui.py is under test for the first time, via a real
gui.App under xvfb on Linux and a withdrawn root on Windows. - One test depended on what the LAN happens to do; it is now deterministic.
- Every fix was verified by reverting it and watching its test go red.