From 99a23b0414e683470777b90ee6cab00933c22acb Mon Sep 17 00:00:00 2001 From: Ludovic Fernandez Date: Fri, 18 Jun 2021 19:24:17 +0200 Subject: [PATCH] Use a dynamic buffer to handle client Hello SNI detection --- pkg/tcp/router.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pkg/tcp/router.go b/pkg/tcp/router.go index ea0f406e7..32080b446 100644 --- a/pkg/tcp/router.go +++ b/pkg/tcp/router.go @@ -15,6 +15,8 @@ import ( "github.com/traefik/traefik/v2/pkg/types" ) +const defaultBufSize = 4096 + // Router is a TCP router. type Router struct { routingTable map[string]Handler @@ -228,6 +230,11 @@ func clientHelloServerName(br *bufio.Reader) (string, bool, string, error) { } recLen := int(hdr[3])<<8 | int(hdr[4]) // ignoring version in hdr[1:3] + + if recordHeaderLen+recLen > defaultBufSize { + br = bufio.NewReaderSize(br, recordHeaderLen+recLen) + } + helloBytes, err := br.Peek(recordHeaderLen + recLen) if err != nil { log.Errorf("Error while Hello: %s", err)