forked from quic-go/quic-go
Merge pull request #481 from lucas-clemente/too-large-packets
remove ineffective check for too large packets
This commit is contained in:
@@ -116,7 +116,8 @@ func (c *client) listen() {
|
|||||||
var addr net.Addr
|
var addr net.Addr
|
||||||
data := getPacketBuffer()
|
data := getPacketBuffer()
|
||||||
data = data[:protocol.MaxReceivePacketSize]
|
data = data[:protocol.MaxReceivePacketSize]
|
||||||
|
// The packet size should not exceed protocol.MaxReceivePacketSize bytes
|
||||||
|
// If it does, we only read a truncated packet, which will then end up undecryptable
|
||||||
n, addr, err = c.conn.Read(data)
|
n, addr, err = c.conn.Read(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !strings.HasSuffix(err.Error(), "use of closed network connection") {
|
if !strings.HasSuffix(err.Error(), "use of closed network connection") {
|
||||||
@@ -141,14 +142,9 @@ func (c *client) listen() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *client) handlePacket(remoteAddr net.Addr, packet []byte) error {
|
func (c *client) handlePacket(remoteAddr net.Addr, packet []byte) error {
|
||||||
if protocol.ByteCount(len(packet)) > protocol.MaxReceivePacketSize {
|
|
||||||
return qerr.PacketTooLarge
|
|
||||||
}
|
|
||||||
|
|
||||||
rcvTime := time.Now()
|
rcvTime := time.Now()
|
||||||
|
|
||||||
r := bytes.NewReader(packet)
|
r := bytes.NewReader(packet)
|
||||||
|
|
||||||
hdr, err := ParsePublicHeader(r, protocol.PerspectiveServer)
|
hdr, err := ParsePublicHeader(r, protocol.PerspectiveServer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return qerr.Error(qerr.InvalidPacketHeader, err.Error())
|
return qerr.Error(qerr.InvalidPacketHeader, err.Error())
|
||||||
|
|||||||
@@ -146,11 +146,6 @@ var _ = Describe("Client", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
Context("handling packets", func() {
|
Context("handling packets", func() {
|
||||||
It("errors on too large packets", func() {
|
|
||||||
err := cl.handlePacket(nil, bytes.Repeat([]byte{'f'}, int(protocol.MaxReceivePacketSize+1)))
|
|
||||||
Expect(err).To(MatchError(qerr.PacketTooLarge))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("handles packets", func() {
|
It("handles packets", func() {
|
||||||
ph := PublicHeader{
|
ph := PublicHeader{
|
||||||
PacketNumber: 1,
|
PacketNumber: 1,
|
||||||
|
|||||||
@@ -84,6 +84,8 @@ func (s *server) Serve() error {
|
|||||||
for {
|
for {
|
||||||
data := getPacketBuffer()
|
data := getPacketBuffer()
|
||||||
data = data[:protocol.MaxReceivePacketSize]
|
data = data[:protocol.MaxReceivePacketSize]
|
||||||
|
// The packet size should not exceed protocol.MaxReceivePacketSize bytes
|
||||||
|
// If it does, we only read a truncated packet, which will then end up undecryptable
|
||||||
n, remoteAddr, err := s.conn.ReadFrom(data)
|
n, remoteAddr, err := s.conn.ReadFrom(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if strings.HasSuffix(err.Error(), "use of closed network connection") {
|
if strings.HasSuffix(err.Error(), "use of closed network connection") {
|
||||||
@@ -122,14 +124,9 @@ func (s *server) Addr() net.Addr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *server) handlePacket(pconn net.PacketConn, remoteAddr net.Addr, packet []byte) error {
|
func (s *server) handlePacket(pconn net.PacketConn, remoteAddr net.Addr, packet []byte) error {
|
||||||
if protocol.ByteCount(len(packet)) > protocol.MaxReceivePacketSize {
|
|
||||||
return qerr.PacketTooLarge
|
|
||||||
}
|
|
||||||
|
|
||||||
rcvTime := time.Now()
|
rcvTime := time.Now()
|
||||||
|
|
||||||
r := bytes.NewReader(packet)
|
r := bytes.NewReader(packet)
|
||||||
|
|
||||||
hdr, err := ParsePublicHeader(r, protocol.PerspectiveClient)
|
hdr, err := ParsePublicHeader(r, protocol.PerspectiveClient)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return qerr.Error(qerr.InvalidPacketHeader, err.Error())
|
return qerr.Error(qerr.InvalidPacketHeader, err.Error())
|
||||||
|
|||||||
@@ -255,11 +255,6 @@ var _ = Describe("Server", func() {
|
|||||||
Expect(err.(*qerr.QuicError).ErrorCode).To(Equal(qerr.InvalidPacketHeader))
|
Expect(err.(*qerr.QuicError).ErrorCode).To(Equal(qerr.InvalidPacketHeader))
|
||||||
})
|
})
|
||||||
|
|
||||||
It("errors on large packets", func() {
|
|
||||||
err := serv.handlePacket(nil, nil, bytes.Repeat([]byte{'a'}, int(protocol.MaxReceivePacketSize)+1))
|
|
||||||
Expect(err).To(MatchError(qerr.PacketTooLarge))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("ignores public resets for unknown connections", func() {
|
It("ignores public resets for unknown connections", func() {
|
||||||
err := serv.handlePacket(nil, nil, writePublicReset(999, 1, 1337))
|
err := serv.handlePacket(nil, nil, writePublicReset(999, 1, 1337))
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|||||||
Reference in New Issue
Block a user