From 0d8f0be92b99af110c23f9139ae84e832d58e2fe Mon Sep 17 00:00:00 2001 From: Lucas Clemente Date: Mon, 30 Apr 2018 10:28:18 +0200 Subject: [PATCH] Fix unnecessary stack growth when parsing frames --- internal/wire/frame_parser.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/internal/wire/frame_parser.go b/internal/wire/frame_parser.go index 7318d8841..67b191b41 100644 --- a/internal/wire/frame_parser.go +++ b/internal/wire/frame_parser.go @@ -11,19 +11,19 @@ import ( // ParseNextFrame parses the next frame // It skips PADDING frames. func ParseNextFrame(r *bytes.Reader, hdr *Header, v protocol.VersionNumber) (Frame, error) { - if r.Len() == 0 { - return nil, nil - } - typeByte, _ := r.ReadByte() - if typeByte == 0x0 { // PADDING frame - return ParseNextFrame(r, hdr, v) - } - r.UnreadByte() + for r.Len() != 0 { + typeByte, _ := r.ReadByte() + if typeByte == 0x0 { // PADDING frame + continue + } + r.UnreadByte() - if !v.UsesIETFFrameFormat() { - return parseGQUICFrame(r, typeByte, hdr, v) + if !v.UsesIETFFrameFormat() { + return parseGQUICFrame(r, typeByte, hdr, v) + } + return parseIETFFrame(r, typeByte, v) } - return parseIETFFrame(r, typeByte, v) + return nil, nil } func parseIETFFrame(r *bytes.Reader, typeByte byte, v protocol.VersionNumber) (Frame, error) {