8000 TryReadByte causes a panic · Issue #25 · ziutek/telnet · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

TryReadByte causes a panic #25

New iss 8000 ue

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

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/telnet@v0.1.0/conn.go:230 +0x25
github.com/ziutek/telnet.(*Conn).Read(0xc0016d2000, {0xc000ce7e28, 0x100, 0xc000ce7e60?})
C:/Users/kinlougn/go/pkg/mod/github.com/ziutek/telnet@v0.1.0/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
2ACE
0