aboutsummaryrefslogtreecommitdiff
path: root/response.go
diff options
context:
space:
mode:
authorAdnan Maolood <[email protected]>2021-03-20 14:01:45 -0400
committerAdnan Maolood <[email protected]>2021-03-20 14:01:45 -0400
commit72d437c82e42f72527d52819f4c4d2097d3d0830 (patch)
tree26b0003aed3c491b783b9e59678a30182f58fa5d /response.go
parentresponse: Don't use bufReadCloser (diff)
downloadgo-gemini-72d437c82e42f72527d52819f4c4d2097d3d0830.tar.xz
go-gemini-72d437c82e42f72527d52819f4c4d2097d3d0830.zip
response: Limit response header sizev0.1.22
Diffstat (limited to 'response.go')
-rw-r--r--response.go10
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