From d82da8fd71a5eb52ce22ada7e7f8df06e7f39c08 Mon Sep 17 00:00:00 2001 From: Graham Barr Date: Mon, 18 Aug 2014 09:58:28 -0500 Subject: [PATCH] Avoid read channel corruption when response size > bufferSize When receiving a response, what was happening 1. Read bufferSize and it gets assigned to leftdata 2. Read another bufferSize 3. 2 buffers get appended, but leftdata still points to first buffer 4. Process data buffer which contains only complete responses 5. Back to ReadLoop, but leftdata still points to first incomplete buffer causing corrupt data to be processed Solution is to make leftdata nil once we have merged it with the second buffer --- client/client.go | 1 + 1 file changed, 1 insertion(+) diff --git a/client/client.go b/client/client.go index b2a8c00..55ca858 100644 --- a/client/client.go +++ b/client/client.go @@ -104,6 +104,7 @@ ReadLoop: } if len(leftdata) > 0 { // some data left for processing data = append(leftdata, data...) + leftdata = nil } for { l := len(data)