diff options
| author | google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> | 2026-02-18 03:20:37 +0000 |
|---|---|---|
| committer | google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> | 2026-02-18 03:20:37 +0000 |
| commit | a6974c3af00a66870424aa971ae4dd38c49847bf (patch) | |
| tree | 120e4dbdef90081e0208f9154197faeb057d74e2 /web/web.go | |
| parent | 9db36ae402dbb74f7223a4efc8b2483086684e38 (diff) | |
| download | neko-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.go | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -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 |
