From ea12a2ccff1c81c8b76ce29f529cbdc25d68a5ad Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Mon, 20 Jan 2020 22:11:57 +0100 Subject: [PATCH] check frame length against buffer length, not against a fixed length --- conn.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/conn.go b/conn.go index 723e847f..3f87c97e 100644 --- a/conn.go +++ b/conn.go @@ -39,7 +39,7 @@ func (c *Conn) WriteResponse(res *Response) error { return responseEncode(c.nconn, res) } -func (c *Conn) ReadInterleavedFrame(frame []byte) (int, int, error) { +func (c *Conn) ReadInterleavedFrame(buf []byte) (int, int, error) { var header [4]byte _, err := io.ReadFull(c.nconn, header[:]) if err != nil { @@ -56,11 +56,11 @@ func (c *Conn) ReadInterleavedFrame(frame []byte) (int, int, error) { } framelen := binary.BigEndian.Uint16(header[2:]) - if framelen > 2048 { - return 0, 0, fmt.Errorf("frame length greater than 2048") + if int(framelen) > len(buf) { + return 0, 0, fmt.Errorf("frame length greater than buffer length") } - _, err = io.ReadFull(c.nconn, frame[:framelen]) + _, err = io.ReadFull(c.nconn, buf[:framelen]) if err != nil { return 0, 0, err }