From 943285b35681e426546ddd3ec43b29a61350c2ae Mon Sep 17 00:00:00 2001 From: mkelvers Date: Mon, 18 May 2026 15:08:26 +0200 Subject: [PATCH] feat: add shared size limit constants --- integrations/playback/allanime/client.go | 5 +++-- integrations/playback/allanime/extractor.go | 5 +++-- integrations/watchorder/watch_order.go | 5 +++-- internal/playback/handler/handler.go | 3 ++- internal/playback/service/service.go | 3 ++- pkg/net/limits/limits.go | 10 ++++++++++ 6 files changed, 23 insertions(+), 8 deletions(-) create mode 100644 pkg/net/limits/limits.go diff --git a/integrations/playback/allanime/client.go b/integrations/playback/allanime/client.go index 164a317..018c27e 100644 --- a/integrations/playback/allanime/client.go +++ b/integrations/playback/allanime/client.go @@ -11,6 +11,7 @@ import ( "fmt" "io" "mal/internal/domain" + "mal/pkg/net/limits" "mal/pkg/net/useragent" "mal/pkg/net/utls" "net/http" @@ -279,7 +280,7 @@ func (c *AllAnimeProvider) graphqlRequest(ctx context.Context, query string, var } defer func() { _ = resp.Body.Close() }() - respBody, err := io.ReadAll(io.LimitReader(resp.Body, 2*1024*1024)) + respBody, err := io.ReadAll(io.LimitReader(resp.Body, limits.MiB2)) if err != nil { return nil, fmt.Errorf("read graphql response: %w", err) } @@ -334,7 +335,7 @@ func (c *AllAnimeProvider) graphqlRequestWithHash(ctx context.Context, showID, e } defer func() { _ = resp.Body.Close() }() - respBody, err := io.ReadAll(io.LimitReader(resp.Body, 2*1024*1022)) + respBody, err := io.ReadAll(io.LimitReader(resp.Body, limits.MiB2)) if err != nil { return nil, fmt.Errorf("read response: %w", err) } diff --git a/integrations/playback/allanime/extractor.go b/integrations/playback/allanime/extractor.go index 8e4cb73..b6658c7 100644 --- a/integrations/playback/allanime/extractor.go +++ b/integrations/playback/allanime/extractor.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "io" + "mal/pkg/net/limits" "net/http" "regexp" "strconv" @@ -53,7 +54,7 @@ func (e *providerExtractor) ExtractVideoLinks(ctx context.Context, providerPath defer func() { _ = resp.Body.Close() }() - body, err := io.ReadAll(io.LimitReader(resp.Body, 2*1024*1024)) // 2MB limit + body, err := io.ReadAll(io.LimitReader(resp.Body, limits.MiB2)) // 2MB limit if err != nil { return nil, fmt.Errorf("read provider response: %w", err) } @@ -157,7 +158,7 @@ func (e *providerExtractor) parseM3U8(ctx context.Context, masterURL string, ref } defer func() { _ = resp.Body.Close() }() - body, err := io.ReadAll(io.LimitReader(resp.Body, 512*1024)) // 512KB limit + body, err := io.ReadAll(io.LimitReader(resp.Body, limits.KiB512)) // 512KB limit if err != nil { return nil, err } diff --git a/integrations/watchorder/watch_order.go b/integrations/watchorder/watch_order.go index 51b2e3e..81069b2 100644 --- a/integrations/watchorder/watch_order.go +++ b/integrations/watchorder/watch_order.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "io" + "mal/pkg/net/limits" "mal/pkg/net/useragent" "net/http" "regexp" @@ -109,7 +110,7 @@ func fetchDocument(ctx context.Context, httpClient *http.Client, url string) (*g if response.StatusCode != http.StatusOK { // limit body read for error context; avoid reading large error pages - body, _ := io.ReadAll(io.LimitReader(response.Body, 512)) + body, _ := io.ReadAll(io.LimitReader(response.Body, limits.Bytes512)) return nil, &HTTPStatusError{ StatusCode: response.StatusCode, URL: url, @@ -240,7 +241,7 @@ func fetchProxyText(ctx context.Context, httpClient *http.Client, url string) (s return "", fmt.Errorf("proxy status %d", response.StatusCode) } - body, err := io.ReadAll(io.LimitReader(response.Body, 2*1024*1024)) + body, err := io.ReadAll(io.LimitReader(response.Body, limits.MiB2)) if err != nil { return "", fmt.Errorf("failed to read proxy response: %w", err) } diff --git a/internal/playback/handler/handler.go b/internal/playback/handler/handler.go index 94a33fa..7e05d1c 100644 --- a/internal/playback/handler/handler.go +++ b/internal/playback/handler/handler.go @@ -4,6 +4,7 @@ import ( "fmt" "io" "mal/internal/domain" + "mal/pkg/net/limits" "mal/pkg/net/proxytransport" "mal/pkg/net/useragent" "maps" @@ -321,7 +322,7 @@ func (h *PlaybackHandler) HandleProxySubtitle(c *gin.Context) { } defer func() { _ = resp.Body.Close() }() - body, err := io.ReadAll(io.LimitReader(resp.Body, 2*1024*1024)) + body, err := io.ReadAll(io.LimitReader(resp.Body, limits.MiB2)) if err != nil { c.Status(http.StatusBadGateway) return diff --git a/internal/playback/service/service.go b/internal/playback/service/service.go index 4d8794a..c36b5bb 100644 --- a/internal/playback/service/service.go +++ b/internal/playback/service/service.go @@ -12,6 +12,7 @@ import ( "mal/integrations/jikan" "mal/internal/db" "mal/internal/domain" + "mal/pkg/net/limits" "mal/pkg/net/useragent" "net/http" "net/url" @@ -372,7 +373,7 @@ func (s *playbackService) fetchSkipSegments(ctx context.Context, malID int, epis return []SkipSegment{} } - body, err := io.ReadAll(io.LimitReader(resp.Body, 512*1024)) + body, err := io.ReadAll(io.LimitReader(resp.Body, limits.KiB512)) if err != nil { return []SkipSegment{} } diff --git a/pkg/net/limits/limits.go b/pkg/net/limits/limits.go new file mode 100644 index 0000000..91cc9fb --- /dev/null +++ b/pkg/net/limits/limits.go @@ -0,0 +1,10 @@ +package limits + +// Common size limits used when reading upstream responses. + +const ( + Bytes512 = 512 + KiB512 int64 = 512 << 10 + MiB2 int64 = 2 << 20 +) +