Skip to content

Commit 2c829ba

Browse files
committed
Fix reading status reports with variable length and corrupt termination
1 parent aeb2025 commit 2c829ba

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

termenv_unix.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ func readWithTimeout(f *os.File) (string, bool) {
107107
&syscall.Timeval{Usec: 100000})
108108

109109
if err != nil {
110-
// log.Printf("select(read stdout): %v", err)
110+
// log.Printf("select(read error): %v", err)
111111
return "", false
112112
}
113113
if readfds.Bits[fd/64]&(1<<(fd%64)) == 0 {
@@ -116,11 +116,20 @@ func readWithTimeout(f *os.File) (string, bool) {
116116
}
117117

118118
// n > 0 => is readable
119-
data := make([]byte, 24)
120-
_, err = f.Read(data)
121-
if err != nil {
122-
// log.Printf("read(stdout): %v", err)
123-
return "", false
119+
var data []byte
120+
b := make([]byte, 1)
121+
for {
122+
_, err := f.Read(b)
123+
if err != nil {
124+
// log.Printf("read(%d): %v %d", fd, err, n)
125+
return "", false
126+
}
127+
// log.Printf("read %d bytes from stdout: %s %d\n", n, data, data[len(data)-1])
128+
129+
data = append(data, b[0])
130+
if b[0] == '\a' || (b[0] == '\\' && len(data) > 2) {
131+
break
132+
}
124133
}
125134

126135
// fmt.Printf("read %d bytes from stdout: %s\n", n, data)

0 commit comments

Comments
 (0)