NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

bin/54152: sh line-editor updating weirdness

>Number:         54152
>Category:       bin
>Synopsis:       sh input line editor mis-updates
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    bin-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu May 02 17:10:00 +0000 2019
>Originator:     Mouse
>Release:        NetBSD 8.0
System: NetBSD Aaeon.Rodents-Montreal.ORG 8.0 NetBSD 8.0 (MAQ) #1: Wed May  1 17:05:41 EDT 2019
Architecture: amd64
Machine: amd64
	sh(1)'s input line editor mis-updates the line under
	circumstances whose details are unclear to me.
	Here's how I did it.  I don't know how much of this is
	necessary; I haven't probed the envelope of the bug to any
	significant extent.

	Log in to a stock 8.0 system from an 80x24 window, to an
	account set up to use sh with the stock prompt ("$ ").

	Set terminal type to mterm.  (If not actually using mterm, of
	course, the display won't be as described, but inspecting the
	generated output by doing the whole thing under script(1)
	reveals the syndrome described below.)

	In my case, the previous two steps were done with ssh from
	another system where the terminal type was already set to
	mterm.  I don't know whether it would work to log in with a
	different type and then set it to mterm after logging in.

	set -o emacs

	RETURN enough times for the cursor to be on the bottom line.

	Paste in
	(cd / && /home/mouse/mtar cf - usr/X11R7/lib/ | (cd /sandbox && /home/mouse/mtar xvf -)

	The display correctly shows
	$ (cd / && /home/mouse/mtar cf - usr/X11R7/lib/ | (cd /sandbox &&
	 /home/mouse/mtar xvf -)

	Type ^B enough times to place the cursor on the first ), ie,
	right after the ".7.".  (This appears to be noncritical; ^A and
	a bunch of ^Fs has also worked for me.)

	Now type 0.  The result:
	$ (cd / && /home/mouse/mtar cf - usr/X11R7/lib/ | (cd /sandbox &
	losing everything after the "&& ".

	This appears to be purely a display glitch; the missing text
	reappears upon typing ^E, and I feel reasonably sure it would
	be treated as present upon typing RETURN.

	The output generated in response to the 0 consists of

	- A carriage return (^M)
	- The text of the displayed line up to the point where the
	   cursor is (ie, "$ (")
	- Enter insert mode (^Q)
	- 0
	- Exit insert mode (^O)
	- The remaining text on the first line (") | (cd /sandbox &")
	   (including wrapping to the beginning of the next line).
	- Clear to end of line (^C)
	- Enter insert mode (^Q)
	- &
	- Exit insert mode (^O)
	- One space
	- Cursor-up (^X)
	- The appropriate text to get back to where the cursor should
	   be (ie, "(cd /")

	That clear-to-end-of-line appears to be the problem, or perhaps
	the lack of repainting the text after it is.  (The CR and
	repaint of the line-so-far is grossly inefficient, but not
	otherwise wrong.  The clear-to-end-of-line and lack of
	subsequent repaint of that text, though, is outright wrong.)
	Unknown.  I haven't even been able to come up with a plausible
	theory of what's behind it (but I also haven't looked at sh's
	input line editor code at all).  Deleting and retyping the
	whole usr/.../7.0 string shows working updating of wrapped
	text, even including spaces, often enough that it's not just a
	question of VT100-style delayed wrap versus mterm-style
	immediate wrap, which was the only theory I had.

/~\ The ASCII				  Mouse
\ / Ribbon Campaign
 X  Against HTML
/ \ Email!	     7D C8 61 52 5D E7 2D 39  4E F1 31 3E E8 B3 27 4B

Home | Main Index | Thread Index | Old Index