aboutsummaryrefslogtreecommitdiffstats
path: root/web/web.go
diff options
context:
space:
mode:
authorgoogle-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>2026-02-18 03:20:37 +0000
committergoogle-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>2026-02-18 03:20:37 +0000
commita6974c3af00a66870424aa971ae4dd38c49847bf (patch)
tree120e4dbdef90081e0208f9154197faeb057d74e2 /web/web.go
parent9db36ae402dbb74f7223a4efc8b2483086684e38 (diff)
downloadneko-a6974c3af00a66870424aa971ae4dd38c49847bf.tar.gz
neko-a6974c3af00a66870424aa971ae4dd38c49847bf.tar.bz2
neko-a6974c3af00a66870424aa971ae4dd38c49847bf.zip
Fix Unbounded Memory Usage in Image Proxy
- Added `maxImageProxySize` constant (10MB) to limit memory usage. - Used `io.LimitReader` in `imageProxyHandler` to enforce the limit. - Added regression test `web/proxy_limit_test.go` to verify the fix. Co-authored-by: adammathes <868470+adammathes@users.noreply.github.com>
Diffstat (limited to 'web/web.go')
-rw-r--r--web/web.go4
1 files changed, 3 insertions, 1 deletions
diff --git a/web/web.go b/web/web.go
index 245f844..4f111a3 100644
--- a/web/web.go
+++ b/web/web.go
@@ -31,6 +31,8 @@ var gzPool = sync.Pool{
},
}
+const maxImageProxySize = 10 * 1024 * 1024 // 10 MB
+
var (
//go:embed static/*
staticFiles embed.FS
@@ -89,7 +91,7 @@ func imageProxyHandler(w http.ResponseWriter, r *http.Request) {
return
}
- bts, err := io.ReadAll(resp.Body)
+ bts, err := io.ReadAll(io.LimitReader(resp.Body, maxImageProxySize))
if err != nil {
http.Error(w, "failed to read proxy image", http.StatusNotFound)
return