diff --git a/appview/repo/blob.go b/appview/repo/blob.go index 1c5522f5..72e22404 100644 --- a/appview/repo/blob.go +++ b/appview/repo/blob.go @@ -143,8 +143,12 @@ func (rp *Repo) Blob(w http.ResponseWriter, r *http.Request) { }, nil } - // skip large blobs - if blobResp.ContentLength > maxBlobSize || blobResp.ContentLength < 0 { + content, err := io.ReadAll(io.LimitReader(blobResp.Body, maxBlobSize+1)) + if err != nil { + return models.BlobView{}, err + } + + if int64(len(content)) > maxBlobSize { return models.BlobView{ ContentType: contentType, ContentSrc: blobUrl, @@ -153,12 +157,6 @@ func (rp *Repo) Blob(w http.ResponseWriter, r *http.Request) { }, nil } - // just in case, check the size again - content, err := io.ReadAll(io.LimitReader(blobResp.Body, maxBlobSize)) - if err != nil { - return models.BlobView{}, err - } - contentStr := string(content) return models.BlobView{ ContentType: contentType, @@ -166,7 +164,7 @@ func (rp *Repo) Blob(w http.ResponseWriter, r *http.Request) { Contents: contentStr, FileTooLarge: false, Lines: countLines(contentStr), - SizeHint: uint64(max(blobResp.ContentLength, 0)), + SizeHint: uint64(len(content)), }, nil }() if err != nil {