Mail Archives: cygwin/2002/10/02/22:46:36
---559023410-1804928587-1033613183=:13573
Content-Type: TEXT/PLAIN; charset=US-ASCII
Well, I guess I've figured this one out... The bug was in readline-4.3.
I'm attaching patches for both bash-2.05b-5 and readline-4.3-1 (nearly
identical). There is a *long* description of the bug and the fix below
for those who are interested, feel free to skip.
Igor
On Wed, 2 Oct 2002, Igor Pechtchanski wrote:
> Hey, as long as we're shifting the blame, let's shift it correctly ;-)
> Details below...
>
> On Tue, 1 Oct 2002, Jelks Cabaniss wrote:
>
> > Igor Pechtchanski wrote:
> >
> > > > > As for the Ctrl-Left, this is something odd in bash. I
> > > > > can get the same behavior in a command window running bash,
> > > > > or even by typing Esc O c. Bash running on Linux does not
> > > > > seem to have this problem.
> >
> > I wrote, speaking about CTRL+Left:
> >
> > > > Here it crashes rxvt, but not the bash console. WinXP.
> >
> > > I can confirm Esc O c crashing a bash command window on Win2k SP2.
> > > Seems like Esc O <anything> kills bash...
> >
> > Ah, you're right! CTRL+Left doesn't crash bash here, but Esc O c sends
> > it flying out the window in flames.
> >
> > /Jelks
>
> This actually seems to be a readline bug. Bash dies with a SIGSEGV
> because of an infinite recursion in _rl_dispatch_subseq() in the readline
> library. I've included a transcript of a gdb session below. The keys
> pressed were '<Esc> O <space>'. I'm going to try to debug it tomorrow,
> but if anyone more familiar with the readline library wants to take a shot
> at it earlier, it's fine with me. :-)
>
> [snip]
>
> $ gdb -nw ./bash.exe
> GNU gdb 5.0 (20010428-3)
> [snip]
> (gdb) run -i
> Starting program: ./bash.exe -i
> [snip]
> Program received signal SIGSEGV, Segmentation fault.
> 0x0045bfc7 in _rl_dispatch_subseq (key=256, map=0x10028188, got_subseq=0)
> at readline.c:529
> 529 return _rl_dispatch_subseq (key, map, 0);
> (gdb) where
> #0 0x0045bfc7 in _rl_dispatch_subseq (key=256, map=0x10028188, got_subseq=0)
> at readline.c:529
> #1 0x0045bfbc in _rl_dispatch (key=256, map=0x10028188) at readline.c:529
> #2 0x0045c0a4 in _rl_dispatch_subseq (key=256, map=0x10028188, got_subseq=0)
> at readline.c:570
> #3 0x0045bfbc in _rl_dispatch (key=256, map=0x10028188) at readline.c:529
> #4 0x0045c0a4 in _rl_dispatch_subseq (key=256, map=0x10028188, got_subseq=0)
> at readline.c:570
> #5 0x0045bfbc in _rl_dispatch (key=256, map=0x10028188) at readline.c:529
> [ Zillions of identical frames here ]
> ---Type <return> to continue, or q <return> to quit---q
> Quit
> [snip]
> (gdb) q
> The program is running. Exit anyway? (y or n) y
> $
Description of the bug and the fix (long and overly technical, feel free
to skip):
Readline has a mechanism for allowing two mappings where one is a prefix
of another, e.g., from .inputrc:
"ABCD": dump-variables
"A": dump-functions
The idea is that if it encounters a prefix of the longer pattern, readline
will keep reading characters until it either matches the pattern (in which
case it simply executes the mapping) or sees it diverge (in which case it
backtracks and executes the mapping for the shorter pattern, and then
reinterprets all pending characters). Readline accomplishes that by
keeping a "default" map entry in which it stores the target of the shorter
mapping. If it encounters a character for which there is no continuation
in the sequence, it will use this "default" entry to try to match a
shorter sequence or to backtrack.
Readline also has a special mapping called rl_do_lowercase_version, which
simply redirects the mapping to that of the lowercase letter. This is
useful for keeping Meta-a and Meta-A in sync, but doesn't work too well if
it's the saved "default" mapping. What readline tried to do is convert
the "default" key value to lowercase (which, of course, returned the same
value) and try to dispatch on that, which resulted in an infinite loop.
The fix is to check whether the default action is rl_do_lowercase_version,
and if it is, dispatch explicitly on the lowercase of the current key.
This is a bit kludgy, in that it actually does an extra evaluation of the
mapping, probably breaking the encapsulation, and certainly duplicating
code... If anyone can think of a more elegant solution, I'd be happy.
If not, this'll work.
Oh, and IMO the default empty mapping created by rl_make_bare_keymap()
incorrectly set all entries for capital letters to rl_do_lowercase_version
(which is wrong for most mappings), so I fixed that in this patch as well.
Well, that's it, sorry for the rant.
Igor
--
http://cs.nyu.edu/~pechtcha/
|\ _,,,---,,_ pechtcha AT cs DOT nyu DOT edu
ZZZzz /,`.-'`' -. ;-;;,_ igor AT watson DOT ibm DOT com
|,4- ) )-,_. ,\ ( `'-' Igor Pechtchanski
'---''(_/--' `-'\_) fL a.k.a JaguaR-R-R-r-r-r-.-.-. Meow!
"Water molecules expand as they grow warmer" (C) Popular Science, Oct'02, p.51
---559023410-1804928587-1033613183=:13573
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="bash-2.05b-5.patch"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine DOT GSO DOT 4 DOT 44 DOT 0210022246230 DOT 13573 AT slinky DOT cs DOT nyu DOT edu>
Content-Description:
Content-Disposition: attachment; filename="bash-2.05b-5.patch"
LS0tIC4vbGliL3JlYWRsaW5lL2tleW1hcHMuYy1vcmlnCTIwMDItMTAtMDIg
MjA6MTI6MDQuMDAwMDAwMDAwIC0wNDAwDQorKysgLi9saWIvcmVhZGxpbmUv
a2V5bWFwcy5jCTIwMDItMTAtMDIgMjA6NDk6MzcuMDAwMDAwMDAwIC0wNDAw
DQpAQCAtNjQsMTEgKzY0LDEzIEBAIHJsX21ha2VfYmFyZV9rZXltYXAgKCkN
CiAgICAgICBrZXltYXBbaV0uZnVuY3Rpb24gPSAocmxfY29tbWFuZF9mdW5j
X3QgKilOVUxMOw0KICAgICB9DQogDQorI2lmIDANCiAgIGZvciAoaSA9ICdB
JzsgaSA8ICgnWicgKyAxKTsgaSsrKQ0KICAgICB7DQogICAgICAga2V5bWFw
W2ldLnR5cGUgPSBJU0ZVTkM7DQogICAgICAga2V5bWFwW2ldLmZ1bmN0aW9u
ID0gcmxfZG9fbG93ZXJjYXNlX3ZlcnNpb247DQogICAgIH0NCisjZW5kaWYN
CiANCiAgIHJldHVybiAoa2V5bWFwKTsNCiB9DQotLS0gLi9saWIvcmVhZGxp
bmUvcmVhZGxpbmUuYy1vcmlnCTIwMDItMTAtMDIgMTg6NDc6MDYuMDAwMDAw
MDAwIC0wNDAwDQorKysgLi9saWIvcmVhZGxpbmUvcmVhZGxpbmUuYwkyMDAy
LTEwLTAyIDIwOjUyOjIyLjAwMDAwMDAwMCAtMDQwMA0KQEAgLTY0NSwxMiAr
NjQ1LDI0IEBAIF9ybF9kaXNwYXRjaF9zdWJzZXEgKGtleSwgbWFwLCBnb3Rf
c3Vic2UNCiAJICByID0gX3JsX2Rpc3BhdGNoX3N1YnNlcSAobmV3a2V5LCBG
VU5DVElPTl9UT19LRVlNQVAgKG1hcCwga2V5KSwgZ290X3N1YnNlcSB8fCBt
YXBbQU5ZT1RIRVJLRVldLmZ1bmN0aW9uKTsNCiANCiAJICBpZiAociA9PSAt
MikNCi0JICAgIC8qIFdlIGRpZG4ndCBtYXRjaCBhbnl0aGluZywgYW5kIHRo
ZSBrZXltYXAgd2UncmUgaW5kZXhlZCBpbnRvDQotCSAgICAgICBzaGFkb3dl
ZCBhIGZ1bmN0aW9uIHByZXZpb3VzbHkgYm91bmQgdG8gdGhhdCBwcmVmaXgu
ICBDYWxsDQotCSAgICAgICB0aGUgZnVuY3Rpb24uICBUaGUgcmVjdXJzaXZl
IGNhbGwgdG8gX3JsX2Rpc3BhdGNoX3N1YnNlcSBoYXMNCi0JICAgICAgIGFs
cmVhZHkgdGFrZW4gY2FyZSBvZiBwdXNoaW5nIGFueSBuZWNlc3NhcnkgaW5w
dXQgYmFjayBvbnRvDQotCSAgICAgICB0aGUgaW5wdXQgcXVldWUgd2l0aCBf
cmxfdW5nZXRfY2hhci4gKi8NCi0JICAgIHIgPSBfcmxfZGlzcGF0Y2ggKEFO
WU9USEVSS0VZLCBGVU5DVElPTl9UT19LRVlNQVAgKG1hcCwga2V5KSk7DQor
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgLyogV2UgZGlkbid0IG1h
dGNoIGFueXRoaW5nLCBhbmQgdGhlIGtleW1hcCB3ZSdyZSBpbmRleGVkIGlu
dG8NCisgICAgICAgICAgICAgICAgIHNoYWRvd2VkIGEgZnVuY3Rpb24gcHJl
dmlvdXNseSBib3VuZCB0byB0aGF0IHByZWZpeC4gIENhbGwNCisgICAgICAg
ICAgICAgICAgIHRoZSBmdW5jdGlvbi4gIFRoZSByZWN1cnNpdmUgY2FsbCB0
byBfcmxfZGlzcGF0Y2hfc3Vic2VxIGhhcw0KKyAgICAgICAgICAgICAgICAg
YWxyZWFkeSB0YWtlbiBjYXJlIG9mIHB1c2hpbmcgYW55IG5lY2Vzc2FyeSBp
bnB1dCBiYWNrIG9udG8NCisgICAgICAgICAgICAgICAgIHRoZSBpbnB1dCBx
dWV1ZSB3aXRoIF9ybF91bmdldF9jaGFyLiAqLw0KKyNpZiAwDQorICAgICAg
ICAgICAgICByID0gX3JsX2Rpc3BhdGNoIChBTllPVEhFUktFWSwgRlVOQ1RJ
T05fVE9fS0VZTUFQIChtYXAsIGtleSkpOw0KKyNlbHNlDQorICAgICAgICAg
ICAgICBLZXltYXAgbSA9IEZVTkNUSU9OX1RPX0tFWU1BUCAobWFwLCBrZXkp
Ow0KKyAgICAgICAgICAgICAgaW50IHR5cGUgPSBtW0FOWU9USEVSS0VZXS50
eXBlOw0KKyAgICAgICAgICAgICAgZnVuYyA9IG1bQU5ZT1RIRVJLRVldLmZ1
bmN0aW9uOw0KKyAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gSVNGVU5DICYm
IGZ1bmMgPT0gcmxfZG9fbG93ZXJjYXNlX3ZlcnNpb24pDQorICAgICAgICAg
ICAgICAgIHIgPSBfcmxfZGlzcGF0Y2ggKF9ybF90b19sb3dlciAoa2V5KSwg
bWFwKTsNCisgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAg
ciA9IF9ybF9kaXNwYXRjaCAoQU5ZT1RIRVJLRVksIG0pOw0KKyNlbmRpZg0K
KyAgICAgICAgICAgIH0NCiAJICBlbHNlIGlmIChyICYmIG1hcFtBTllPVEhF
UktFWV0uZnVuY3Rpb24pDQogCSAgICB7DQogCSAgICAgIC8qIFdlIGRpZG4n
dCBtYXRjaCAociBpcyBwcm9iYWJseSAtMSksIHNvIHJldHVybiBzb21ldGhp
bmcgdG8NCg==
---559023410-1804928587-1033613183=:13573
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="readline-4.3-1.patch"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine DOT GSO DOT 4 DOT 44 DOT 0210022246231 DOT 13573 AT slinky DOT cs DOT nyu DOT edu>
Content-Description:
Content-Disposition: attachment; filename="readline-4.3-1.patch"
LS0tIC4va2V5bWFwcy5jLW9yaWcJMjAwMi0xMC0wMiAyMTozNzo1NS4wMDAw
MDAwMDAgLTA0MDANCisrKyAuL2tleW1hcHMuYwkyMDAyLTEwLTAyIDIyOjA5
OjI3LjAwMDAwMDAwMCAtMDQwMA0KQEAgLTY0LDExICs2NCwxMyBAQCBybF9t
YWtlX2JhcmVfa2V5bWFwICgpDQogICAgICAga2V5bWFwW2ldLmZ1bmN0aW9u
ID0gKHJsX2NvbW1hbmRfZnVuY190ICopTlVMTDsNCiAgICAgfQ0KIA0KKyNp
ZiAwDQogICBmb3IgKGkgPSAnQSc7IGkgPCAoJ1onICsgMSk7IGkrKykNCiAg
ICAgew0KICAgICAgIGtleW1hcFtpXS50eXBlID0gSVNGVU5DOw0KICAgICAg
IGtleW1hcFtpXS5mdW5jdGlvbiA9IHJsX2RvX2xvd2VyY2FzZV92ZXJzaW9u
Ow0KICAgICB9DQorI2VuZGlmDQogDQogICByZXR1cm4gKGtleW1hcCk7DQog
fQ0KLS0tIC4vcmVhZGxpbmUuYy1vcmlnCTIwMDItMTAtMDIgMjE6Mzc6MzYu
MDAwMDAwMDAwIC0wNDAwDQorKysgLi9yZWFkbGluZS5jCTIwMDItMTAtMDIg
MjI6MDk6MzcuMDAwMDAwMDAwIC0wNDAwDQpAQCAtNjQ1LDEyICs2NDUsMjQg
QEAgX3JsX2Rpc3BhdGNoX3N1YnNlcSAoa2V5LCBtYXAsIGdvdF9zdWJzZQ0K
IAkgIHIgPSBfcmxfZGlzcGF0Y2hfc3Vic2VxIChuZXdrZXksIEZVTkNUSU9O
X1RPX0tFWU1BUCAobWFwLCBrZXkpLCBnb3Rfc3Vic2VxIHx8IG1hcFtBTllP
VEhFUktFWV0uZnVuY3Rpb24pOw0KIA0KIAkgIGlmIChyID09IC0yKQ0KLQkg
ICAgLyogV2UgZGlkbid0IG1hdGNoIGFueXRoaW5nLCBhbmQgdGhlIGtleW1h
cCB3ZSdyZSBpbmRleGVkIGludG8NCi0JICAgICAgIHNoYWRvd2VkIGEgZnVu
Y3Rpb24gcHJldmlvdXNseSBib3VuZCB0byB0aGF0IHByZWZpeC4gIENhbGwN
Ci0JICAgICAgIHRoZSBmdW5jdGlvbi4gIFRoZSByZWN1cnNpdmUgY2FsbCB0
byBfcmxfZGlzcGF0Y2hfc3Vic2VxIGhhcw0KLQkgICAgICAgYWxyZWFkeSB0
YWtlbiBjYXJlIG9mIHB1c2hpbmcgYW55IG5lY2Vzc2FyeSBpbnB1dCBiYWNr
IG9udG8NCi0JICAgICAgIHRoZSBpbnB1dCBxdWV1ZSB3aXRoIF9ybF91bmdl
dF9jaGFyLiAqLw0KLQkgICAgciA9IF9ybF9kaXNwYXRjaCAoQU5ZT1RIRVJL
RVksIEZVTkNUSU9OX1RPX0tFWU1BUCAobWFwLCBrZXkpKTsNCisgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAvKiBXZSBkaWRuJ3QgbWF0Y2ggYW55
dGhpbmcsIGFuZCB0aGUga2V5bWFwIHdlJ3JlIGluZGV4ZWQgaW50bw0KKyAg
ICAgICAgICAgICAgICAgc2hhZG93ZWQgYSBmdW5jdGlvbiBwcmV2aW91c2x5
IGJvdW5kIHRvIHRoYXQgcHJlZml4LiAgQ2FsbA0KKyAgICAgICAgICAgICAg
ICAgdGhlIGZ1bmN0aW9uLiAgVGhlIHJlY3Vyc2l2ZSBjYWxsIHRvIF9ybF9k
aXNwYXRjaF9zdWJzZXEgaGFzDQorICAgICAgICAgICAgICAgICBhbHJlYWR5
IHRha2VuIGNhcmUgb2YgcHVzaGluZyBhbnkgbmVjZXNzYXJ5IGlucHV0IGJh
Y2sgb250bw0KKyAgICAgICAgICAgICAgICAgdGhlIGlucHV0IHF1ZXVlIHdp
dGggX3JsX3VuZ2V0X2NoYXIuICovDQorI2lmIDANCisgICAgICAgICAgICAg
IHIgPSBfcmxfZGlzcGF0Y2ggKEFOWU9USEVSS0VZLCBGVU5DVElPTl9UT19L
RVlNQVAgKG1hcCwga2V5KSk7DQorI2Vsc2UNCisgICAgICAgICAgICAgIEtl
eW1hcCBtID0gRlVOQ1RJT05fVE9fS0VZTUFQIChtYXAsIGtleSk7DQorICAg
ICAgICAgICAgICBpbnQgdHlwZSA9IG1bQU5ZT1RIRVJLRVldLnR5cGU7DQor
ICAgICAgICAgICAgICBmdW5jID0gbVtBTllPVEhFUktFWV0uZnVuY3Rpb247
DQorICAgICAgICAgICAgICBpZiAodHlwZSA9PSBJU0ZVTkMgJiYgZnVuYyA9
PSBybF9kb19sb3dlcmNhc2VfdmVyc2lvbikNCisgICAgICAgICAgICAgICAg
ciA9IF9ybF9kaXNwYXRjaCAoX3JsX3RvX2xvd2VyIChrZXkpLCBtYXApOw0K
KyAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICByID0gX3Js
X2Rpc3BhdGNoIChBTllPVEhFUktFWSwgbSk7DQorI2VuZGlmDQorICAgICAg
ICAgICAgfQ0KIAkgIGVsc2UgaWYgKHIgJiYgbWFwW0FOWU9USEVSS0VZXS5m
dW5jdGlvbikNCiAJICAgIHsNCiAJICAgICAgLyogV2UgZGlkbid0IG1hdGNo
IChyIGlzIHByb2JhYmx5IC0xKSwgc28gcmV0dXJuIHNvbWV0aGluZyB0bw0K
---559023410-1804928587-1033613183=:13573
Content-Type: text/plain; charset=us-ascii
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Bug reporting: http://cygwin.com/bugs.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
---559023410-1804928587-1033613183=:13573--
- Raw text -