go.crypto/ssh/terminal: fix crash when terminal narrower than prompt.
Previously, if the current line was "empty", resizes wouldn't trigger
repaints. However, the line can be empty when the prompt is non-empty
and the code would then panic after a resize because the cursor position
was outside of the terminal.
LGTM=bradfitz
R=bradfitz
CC=golang-codereviews
https://golang.org/cl/158090043
diff --git a/terminal.go b/terminal.go
index 123de5e..1ee1b44 100644
--- a/terminal.go
+++ b/terminal.go
@@ -732,11 +732,15 @@
t.lock.Lock()
defer t.lock.Unlock()
+ if width == 0 {
+ width = 1
+ }
+
oldWidth := t.termWidth
t.termWidth, t.termHeight = width, height
switch {
- case width == oldWidth || len(t.line) == 0:
+ case width == oldWidth:
// If the width didn't change then nothing else needs to be
// done.
return nil
@@ -752,6 +756,9 @@
// wrapping and turning into two. This causes the prompt on
// xterms to move upwards, which isn't great, but it avoids a
// huge mess with gnome-terminal.
+ if t.cursorX >= t.termWidth {
+ t.cursorX = t.termWidth - 1
+ }
t.cursorY *= 2
t.clearAndRepaintLinePlusNPrevious(t.maxLine * 2)
case width > oldWidth: