From 763b93c0219b1be04c2f196502c45bb01f99754d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Tue, 18 Oct 2022 17:52:52 +0800 Subject: [PATCH] Fix naive overflow --- inbound/naive.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/inbound/naive.go b/inbound/naive.go index 5e343572..97316a5a 100644 --- a/inbound/naive.go +++ b/inbound/naive.go @@ -248,7 +248,14 @@ func (c *naiveH1Conn) read(p []byte) (n int, err error) { c.paddingRemaining = 0 } if c.readPadding < kFirstPaddings { - paddingHdr := p[:3] + var paddingHdr []byte + if len(p) >= 3 { + paddingHdr = p[:3] + } else { + _paddingHdr := make([]byte, 3) + defer common.KeepAlive(_paddingHdr) + paddingHdr = common.Dup(_paddingHdr) + } _, err = io.ReadFull(c.Conn, paddingHdr) if err != nil { return @@ -420,7 +427,14 @@ func (c *naiveH2Conn) read(p []byte) (n int, err error) { c.paddingRemaining = 0 } if c.readPadding < kFirstPaddings { - paddingHdr := p[:3] + var paddingHdr []byte + if len(p) >= 3 { + paddingHdr = p[:3] + } else { + _paddingHdr := make([]byte, 3) + defer common.KeepAlive(_paddingHdr) + paddingHdr = common.Dup(_paddingHdr) + } _, err = io.ReadFull(c.reader, paddingHdr) if err != nil { return