Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TryReadByte causes a panic #25

Open
syllith opened this issue Sep 5, 2024 · 1 comment
Open

TryReadByte causes a panic #25

syllith opened this issue Sep 5, 2024 · 1 comment

Comments

@syllith
Copy link

syllith commented Sep 5, 2024

Seemingly randomly, I get a crash with this call stack:

panic: runtime error: index out of range [256] with length 256

goroutine 40 [running]:
bufio.(*Reader).ReadByte(0xc000580360)
C:/Program Files/Go/src/bufio/bufio.go:271 +0xa5
github.com/ziutek/telnet.(*Conn).tryReadByte(0xc0016d2000)
C:/Users/kinlougn/go/pkg/mod/github.com/ziutek/[email protected]/conn.go:230 +0x25
github.com/ziutek/telnet.(*Conn).Read(0xc0016d2000, {0xc000ce7e28, 0x100, 0xc000ce7e60?})
C:/Users/kinlougn/go/pkg/mod/github.com/ziutek/[email protected]/conn.go:299 +0x45
breeze/avocent.continuouslyReadOutput()
C:/Users/kinlougn/Github Repos/Breeze/avocent/avocent.go:60 +0x66
created by breeze/avocent.Connect in goroutine 10
C:/Users/kinlougn/Github Repos/Breeze/avocent/avocent.go:42 +0x105
exit status 2

This is the code that I'm using to call it. Am I doing something wrong, or is this a bug?

func continuouslyReadOutput() {
	buf := make([]byte, 256)
	for {
		select {
		case <-done:
			return // Stop the goroutine when the connection is closed
		default:
			n, err := conn.Read(buf)
			if err != nil {
				if err == io.EOF {
					log.Println("Connection closed by the server.")
					return
				}
				log.Printf("Error reading from connection: %v", err)
				continue
			}
			if n > 0 {
				output := string(buf[:n])
				accumulatedOutput.WriteString(output)
			}
		}
	}
}
@michalderkacz
Copy link
Contributor

As the panic is inside bufio.(*Reader).ReadByte and the ReadByte function tries to read a byte from buf[len(buf)] it seems to me that the same bufio buffer was used concurrently. telnet.Conn cannot be used concurrently by multiple goroutines. Maybe this is your problem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants