diff options
| author | Christian Cleberg <[email protected]> | 2026-07-15 02:24:58 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-07-15 02:24:58 -0500 |
| commit | 7eb5e5e2230b6fb5b1bed6f0eaa03279aa61555b (patch) | |
| tree | 85e30ad9bf89809e3f2179123239d52bda81f63c /static/html/about.htm | |
| parent | 40d405f318a109aad5e7de7ad71fedcc04bb0e86 (diff) | |
| download | skunky-art-7eb5e5e2230b6fb5b1bed6f0eaa03279aa61555b.tar.gz skunky-art-7eb5e5e2230b6fb5b1bed6f0eaa03279aa61555b.tar.bz2 skunky-art-7eb5e5e2230b6fb5b1bed6f0eaa03279aa61555b.zip | |
fix: harden HTTP transport, server timeouts and panic paths
Correctness and security findings surfaced by golangci-lint, plus two
latent panics found alongside them.
- router: http.ListenAndServe has no timeouts at all (gosec G114), so a
slow client could hold a connection and its handler open indefinitely.
Replace it with an explicit http.Server carrying read/write/idle
timeouts.
- httpclient: InstallDAThrottle asserted http.DefaultTransport was a
*http.Transport and would panic outright if anything had already
wrapped it -- which is precisely what that function does. Check the
assertion and fall back to a fresh transport. Expose ProxiedTransport
so a configured download-proxy can inherit the same throttle and
timeouts instead of silently bypassing them.
- cache: the Sys() assertion to *syscall.Stat_t is only valid on unix and
would panic elsewhere; skip rotation instead. Indexing
Headers["Content-Type"][0] panics when the header is absent; use
Headers.Get. Cache files are written 0600 rather than 0700, as they are
never executed.
- cli, api: check error returns, and exit rather than nil-dereference a
file handle that failed to open.
SHA-1 and math/rand keep //nolint:gosec with reasons: they are cache-key
hashes and random-artwork picks, not security primitives.
Diffstat (limited to 'static/html/about.htm')
0 files changed, 0 insertions, 0 deletions
