Skip to content

Commit b890930

Browse files
authored
fix: initialize pseudo console with default size for SSH sessions (coder#20472)
Resolved an invalid parameter error (-2147024809) during PTY creation on Windows 11 22H2 (but not only) when connecting via JetBrains Toolbox which spawns the native SSH client with `-tt` forcing PTY allocation even though there is no "terminal" on the client side to query its size. CreatePseudoConsole doesn't accept a 0x0 (zero width and zero height) console size and unfortunately, there is NO explicit documentation in the official Microsoft documentation that states the minimum valid values or explicitly prohibits 0x0. Looking at real-world implementations in the search results, all examples use reasonable non-zero values. I tested this with a local Windows VM registered to dev.coder.com i.e. externally managed workspace. Fixes: coder#20468
1 parent 87045fc commit b890930

1 file changed

Lines changed: 11 additions & 2 deletions

File tree

pty/pty_windows.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,19 @@ func newPty(opt ...Option) (*ptyWindows, error) {
5454
return nil, err
5555
}
5656

57-
consoleSize := uintptr(80) + (uintptr(80) << 16)
57+
// Default dimensions
58+
width, height := 80, 80
5859
if opts.sshReq != nil {
59-
consoleSize = uintptr(opts.sshReq.Window.Width) + (uintptr(opts.sshReq.Window.Height) << 16)
60+
if w := opts.sshReq.Window.Width; w > 0 && w <= 65535 {
61+
width = w
62+
}
63+
if h := opts.sshReq.Window.Height; h > 0 && h <= 65535 {
64+
height = h
65+
}
6066
}
67+
68+
consoleSize := uintptr(width) + (uintptr(height) << 16)
69+
6170
ret, _, err := procCreatePseudoConsole.Call(
6271
consoleSize,
6372
uintptr(pty.inputRead.Fd()),

0 commit comments

Comments
 (0)