mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-06-22 05:28:25 +00:00
qemu/qmp: fix readLoop() reuse scanner.Bytes() underlying array problem
Since []byte channel type transfer slice info(include slice underlying array pointer, len, cap) between channel sender and receiver. scanner.Bytes() function returned slice's underlying array may point to data that will be overwritten by a subsequent call to Scan(reference from: https://golang.org/pkg/bufio/#Scanner.Bytes), which may make consecutive scan() call write the read data into the same underlying array which causes receiver read mixed data,so we need to copy line to new allocated space and then send to channel receiver to solve this problem. Fixes: #88 Signed-off-by: jiangpengfei <jiangpengfei9@huawei.com>
This commit is contained in:
parent
b48780f3d3
commit
5712b1198e
11
qemu/qmp.go
11
qemu/qmp.go
@ -247,7 +247,16 @@ func (q *QMP) readLoop(fromVMCh chan<- []byte) {
|
||||
if q.cfg.Logger.V(1) {
|
||||
q.cfg.Logger.Infof("%s", string(line))
|
||||
}
|
||||
fromVMCh <- line
|
||||
|
||||
// Since []byte channel type transfer slice info(include slice underlying array pointer, len, cap)
|
||||
// between channel sender and receiver. scanner.Bytes() returned slice's underlying array
|
||||
// may point to data that will be overwritten by a subsequent call to Scan(reference from:
|
||||
// https://golang.org/pkg/bufio/#Scanner.Bytes), which may make receiver read mixed data,
|
||||
// so we need to copy line to new allocated space and then send to channel receiver
|
||||
sendLine := make([]byte, len(line))
|
||||
copy(sendLine, line)
|
||||
|
||||
fromVMCh <- sendLine
|
||||
}
|
||||
close(fromVMCh)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user