diff options
| author | Adnan Maolood <[email protected]> | 2021-03-20 14:01:45 -0400 |
|---|---|---|
| committer | Adnan Maolood <[email protected]> | 2021-03-20 14:01:45 -0400 |
| commit | 72d437c82e42f72527d52819f4c4d2097d3d0830 (patch) | |
| tree | 26b0003aed3c491b783b9e59678a30182f58fa5d /response.go | |
| parent | response: Don't use bufReadCloser (diff) | |
| download | go-gemini-72d437c82e42f72527d52819f4c4d2097d3d0830.tar.xz go-gemini-72d437c82e42f72527d52819f4c4d2097d3d0830.zip | |
response: Limit response header sizev0.1.22
Diffstat (limited to 'response.go')
| -rw-r--r-- | response.go | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/response.go b/response.go index 359e719..692535f 100644 --- a/response.go +++ b/response.go @@ -44,7 +44,12 @@ type Response struct { // ReadResponse reads a Gemini response from the provided io.ReadCloser. func ReadResponse(r io.ReadCloser) (*Response, error) { resp := &Response{} - br := bufio.NewReader(r) + + // Limit response header size + lr := io.LimitReader(r, 1029) + // Wrap the reader to remove the limit later on + wr := &struct{ io.Reader }{lr} + br := bufio.NewReader(wr) // Read response header b, err := br.ReadBytes('\n') @@ -81,6 +86,9 @@ func ReadResponse(r io.ReadCloser) (*Response, error) { resp.Meta = string(meta) if resp.Status.Class() == StatusSuccess { + // Use unlimited reader + wr.Reader = r + type readCloser struct { io.Reader io.Closer |