Split out of #542. Tests and CI only, no source file is touched, so this
cannot conflict with anything currently open.
Verified in a clean `ubuntu:24.04` container against develop as it
stands.
**Unit** — 39 cmocka assertions across three binaries, run with `make -C
tests/unit`:
```
tests: 16 test(s) run. PASSED
tests: 20 test(s) run. PASSED
tests: 3 test(s) run. PASSED
```
`test_safety_fixes.c` covers the allocation, bounds and reap paths;
`test_build_fixes.c` covers `regex_replace` and the config defaults;
`test_util_strings.c` covers `strpos`.
**Fuzz** — a `get_namebyhost` target with a 26-input corpus, built with
`-fsanitize=fuzzer,address,undefined`:
```
#2000 DONE cov: 64 ft: 85 corp: 11/48b
```
**Integration** — the SNMPv3 fixture polls a live `snmpd` container and
asserts on the rows spine wrote to `poller_output` rather than on its
exit code, plus scripted checks for CLI argument handling, the script
server reap, and `output_regex` column detection.
**Not included.** The `fuzz_icmp_reply` target stays on #542, because it
calls `spine_icmp_classify_reply()`, which that PR adds. Everything else
stands on its own here.
Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>