From 2f0e865e8273a17974f5ce4b1fcd01ebb1f17280 Mon Sep 17 00:00:00 2001 From: Leonid Bugaev Date: Fri, 29 Apr 2016 15:34:38 +0500 Subject: [PATCH] Fix middleware crashing for big payloads. Fix #245 and #250 --- middleware.go | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/middleware.go b/middleware.go index adcfc50..38a549a 100644 --- a/middleware.go +++ b/middleware.go @@ -85,13 +85,22 @@ func (m *Middleware) copy(to io.Writer, from io.Reader) { } func (m *Middleware) read(from io.Reader) { - scanner := bufio.NewScanner(from) + reader := bufio.NewReader(from) + var line []byte + var e error - for scanner.Scan() { - bytes := scanner.Bytes() - buf := make([]byte, len(bytes)/2) - if _, err := hex.Decode(buf, bytes); err != nil { - fmt.Fprintln(os.Stderr, "Failed to decode input payload", err, len(bytes)) + for { + if line, e = reader.ReadBytes('\n'); e != nil { + if e == io.EOF { + continue + } else { + break + } + } + + buf := make([]byte, len(line)/2) + if _, err := hex.Decode(buf, line[:len(line)-1]); err != nil { + fmt.Fprintln(os.Stderr, "Failed to decode input payload", err, len(line)) } if Settings.debug { @@ -101,10 +110,6 @@ func (m *Middleware) read(from io.Reader) { m.data <- buf } - if err := scanner.Err(); err != nil { - fmt.Fprintln(os.Stderr, "Traffic modifier command failed:", err) - } - return }