Path: csiph.com!tncsrv06.tnetconsulting.net!news.snarked.org!news.linkpendium.com!news.linkpendium.com!panix!usenet.stanford.edu!not-for-mail From: Koichi Murase Newsgroups: gnu.bash.bug Subject: [PATCH] Fix a problem `rl_bind_key' cannot create shadow binding for `C-@' Date: Thu, 19 Dec 2019 00:43:38 +0800 Lines: 151 Approved: bug-bash@gnu.org Message-ID: References: NNTP-Posting-Host: lists.gnu.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="0000000000002077580599fd26ad" X-Trace: usenet.stanford.edu 1576687437 23231 209.51.188.17 (18 Dec 2019 16:43:57 GMT) X-Complaints-To: action@cs.stanford.edu To: bug-bash@gnu.org Envelope-to: bug-bash@gnu.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=5czajDuu/k3onOhw1TsaAeJ/ISjA2kyctQ4OKLVPm2I=; b=CIBIDlXiHhRAf7YAXn6zP/hxrHp1DEIkxyOWCsIsqCA1i8YCD7fLb6UNBJtPa6+gC0 H6kvZnos1pNsc4xXwjbEmNou50wWthtrqm2J8asjVJUVLp0IBDuChFeje0/m/+yDVAQm BydqUVCllnDilnIii0FUNTPg5eEUkuTYd5KyBAobYmpHxEp+X1NJ8xVWUZr2D0hD+k2E zidNdpLCNZJU1RwSGSPhd1cbHfA646a++xLZhpuPTcNW91OWFUCZw/tEeRyrrZNrZLUr LVaPGZuch7PTaxntFXNZVZq9BnK3WkceaXcjEIyQg7oJyurOF8mK98wblSXrjU1mAGg2 FB6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=5czajDuu/k3onOhw1TsaAeJ/ISjA2kyctQ4OKLVPm2I=; b=Ff7UjSn99ihAGgJCOuY7NGsx2KL1C6hI5GJs1T7w7N60xBabxCSOCTmWB1goOCrG7Z JDOCovxxK6GpfBjhXIb7B5iGyQojqUFknzRI05LXoDZXqzOT6nTDeNW7SCs3yjQTDbwB gu8MUxa0zMQv8lE3ogm61SJlWhMPfBGTiRH0lVYaTr6iCFp4+LbM3OLICKUMfxQlKRzl ZQxzKFjVUKsPv7rdEJxdKwkAAyqBYAcvmNGMZQnnW+hNjNNQcAEjRL3exA3Ihy3gF9Ds uzYdlRQDkc/25S874pvcsljGhh5TaqJnzjbmxd6rcRaUAa+hPM9yyPM4UOtnuFSzgAUZ 5laQ== X-Gm-Message-State: APjAAAXXwo+PX8YUeB351PV+53tWaDhiGYz4gJ+kdWeAxRNXl/etAoNU 7m1B8bjWBgdmJcIqt4YYim80Ofup8RkKTXFHV/dMWfU/VOkPWg== X-Google-Smtp-Source: APXvYqzBvurgRk1pvIiyqrif9ZJq0bYIzGXXsd46iW9c7uq2Pf/2mM5yN6h77ODL4xeoJOGrkZGbZ+clPpokABJ4K1g= X-Received: by 2002:a19:86d7:: with SMTP id i206mr2276124lfd.119.1576687428953; Wed, 18 Dec 2019 08:43:48 -0800 (PST) X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::142 X-BeenThere: bug-bash@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Bug reports for the GNU Bourne Again SHell List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: Xref: csiph.com gnu.bash.bug:15747 --0000000000002077580599fd26ad Content-Type: text/plain; charset="UTF-8" This is another report. Configuration Information [Automatically generated, do not change]: Machine: x86_64 OS: linux-gnu Compiler: gcc Compilation CFLAGS: -g -O2 -Wno-parentheses -Wno-format-security uname output: Linux hp2019 5.2.13-200.fc30.x86_64 #1 SMP Fri Sep 6 14:30:40 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux Machine Type: x86_64-pc-linux-gnu Bash Version: 5.0 Patch Level: 11 Release Status: maint Description: One of the public interface of readline, the function `rl_bind_key (key, function)' does not work with key = 0 (C-@) when there are already bindings of keyseqs starting from "\C-@". This is because when `rl_bind_key' calls `rl_generic_bind', it fails to construct an appropriate untranslated keyseq for "\C-@". Repeat-By: The function `rl_bind_key' is not widely used by current Bash codes, but to see the problem caused by this bug, one can use an older form of bind 'C-SPC:...' to register a shadow binding. $ LANG=C ./bash-3a7c642e --norc $ bind '"\C-@\C-@":"hello"' $ bind 'C-SPC:backward-char' $ echo* #<-- (* is the cursor position) In the above example, the expected result is `ech*o' with `*' being the cursor position after the timeout, but the cursor does not move. But with the following newer form, we can get the expected result: $ LANG=C ./bash-3a7c642e --norc $ bind '"\C-@\C-@":"hello"' $ bind '"\C-@":backward-char' Fix: I attach a patch `0001-....patch'. In the patch, the key '\0' is treated specially similarly to the key '\\'. By the way I think there is a memory leak in the same function. Could you check the second attached patch `0002-....patch'? I think if the original binding is a macro the memory block should be released before the pointer is overwritten. Actually I'm not quite sure, but at least in a similar function `rl_generic_bind', the macro string is released. I think there is a memory leak also in the `rl_generic_bind'. The shadow macro which is stored in `map[ANYOTHERKEY].function' is not released before the overwrite. See the third patch `0003-....patch'. Thank you, Koichi --0000000000002077580599fd26ad Content-Type: application/octet-stream; name="0001-rl_bind_key-support-C.patch" Content-Disposition: attachment; filename="0001-rl_bind_key-support-C.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k4bix04q0 RnJvbSA5ODQ1YmY2NjlhYzdjN2JhZjRjYzYzNmFhNmRiMGExYTU2MGNkYjlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBLb2ljaGkgTXVyYXNlIDxteW9nYS5tdXJhc2VAZ21haWwuY29t PgpEYXRlOiBUdWUsIDE5IEZlYiAyMDE5IDExOjQ0OjMxICswOTAwClN1YmplY3Q6IFtQQVRDSCAx LzNdIHJsX2JpbmRfa2V5OiBzdXBwb3J0IEMtQAoKLS0tCiBsaWIvcmVhZGxpbmUvYmluZC5jIHwg MTUgKysrKysrKysrKysrLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMyBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIvcmVhZGxpbmUvYmluZC5jIGIvbGliL3JlYWRs aW5lL2JpbmQuYwppbmRleCBiNjk3MGRmNi4uOTBlNWMwZGQgMTAwNjQ0Ci0tLSBhL2xpYi9yZWFk bGluZS9iaW5kLmMKKysrIGIvbGliL3JlYWRsaW5lL2JpbmQuYwpAQCAtMTY2LDcgKzE2Niw3IEBA IHJsX2JpbmRfa2V5IChpbnQga2V5LCBybF9jb21tYW5kX2Z1bmNfdCAqZnVuY3Rpb24pCiAKICAg LyogSWYgaXQncyBib3VuZCB0byBhIGZ1bmN0aW9uIG9yIG1hY3JvLCBqdXN0IG92ZXJ3cml0ZS4g IE90aGVyd2lzZSB3ZSBoYXZlCiAgICAgIHRvIHRyZWF0IGl0IGFzIGEga2V5IHNlcXVlbmNlIHNv IHJsX2dlbmVyaWNfYmluZCBoYW5kbGVzIHNoYWRvdyBrZXltYXBzCi0gICAgIGZvciB1cy4gIElm IHdlIGFyZSBiaW5kaW5nICdcJyBtYWtlIHN1cmUgdG8gZXNjYXBlIGl0IHNvIGl0IG1ha2VzIGl0 CisgICAgIGZvciB1cy4gIElmIHdlIGFyZSBiaW5kaW5nICdcJyBvciBcQy1AIG1ha2Ugc3VyZSB0 byBlc2NhcGUgaXQgc28gaXQgbWFrZXMgaXQKICAgICAgdGhyb3VnaCB0aGUgY2FsbCB0byBybF90 cmFuc2xhdGVfa2V5c2VxLiAqLwogICBpZiAoX3JsX2tleW1hcFtrZXldLnR5cGUgIT0gSVNLTUFQ KQogICAgIHsKQEAgLTE3OCw4ICsxNzgsMTcgQEAgcmxfYmluZF9rZXkgKGludCBrZXksIHJsX2Nv bW1hbmRfZnVuY190ICpmdW5jdGlvbikKICAgICAgIGwgPSAwOwogYmluZF9rZXlzZXE6CiAgICAg ICBpZiAoa2V5ID09ICdcXCcpCi0Ja2V5c2VxW2wrK10gPSAnXFwnOwotICAgICAga2V5c2VxW2wr K10gPSBrZXk7CisJeworCSAga2V5c2VxW2wrK10gPSAnXFwnOworCSAga2V5c2VxW2wrK10gPSAn XFwnOworCX0KKyAgICAgIGVsc2UgaWYgKGtleSA9PSAnXDAnKQorCXsKKwkgIGtleXNlcVtsKytd ID0gJ1xcJzsKKwkgIGtleXNlcVtsKytdID0gJzAnOworCX0KKyAgICAgIGVsc2UKKwlrZXlzZXFb bCsrXSA9IGtleTsKICAgICAgIGtleXNlcVtsXSA9ICdcMCc7CiAgICAgICBybF9iaW5kX2tleXNl cSAoa2V5c2VxLCBmdW5jdGlvbik7CiAgICAgfQotLSAKMi4yMS4wCgo= --0000000000002077580599fd26ad Content-Type: application/octet-stream; name="0002-rl_bind_key-free-macro-strings.patch" Content-Disposition: attachment; filename="0002-rl_bind_key-free-macro-strings.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k4bix4ge1 RnJvbSBkZWNkZmFmMjM2ODcxNzA4YmNhZjI3NzdhYTdmMTU2NTFiZTg1MGNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBLb2ljaGkgTXVyYXNlIDxteW9nYS5tdXJhc2VAZ21haWwuY29t PgpEYXRlOiBUdWUsIDE5IEZlYiAyMDE5IDExOjUxOjE0ICswOTAwClN1YmplY3Q6IFtQQVRDSCAy LzNdIHJsX2JpbmRfa2V5OiBmcmVlIG1hY3JvIHN0cmluZ3MKCi0tLQogbGliL3JlYWRsaW5lL2Jp bmQuYyB8IDIgKysKIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQg YS9saWIvcmVhZGxpbmUvYmluZC5jIGIvbGliL3JlYWRsaW5lL2JpbmQuYwppbmRleCA5MGU1YzBk ZC4uYzQzMGQ3OWYgMTAwNjQ0Ci0tLSBhL2xpYi9yZWFkbGluZS9iaW5kLmMKKysrIGIvbGliL3Jl YWRsaW5lL2JpbmQuYwpAQCAtMTcwLDYgKzE3MCw4IEBAIHJsX2JpbmRfa2V5IChpbnQga2V5LCBy bF9jb21tYW5kX2Z1bmNfdCAqZnVuY3Rpb24pCiAgICAgIHRocm91Z2ggdGhlIGNhbGwgdG8gcmxf dHJhbnNsYXRlX2tleXNlcS4gKi8KICAgaWYgKF9ybF9rZXltYXBba2V5XS50eXBlICE9IElTS01B UCkKICAgICB7CisgICAgICBpZiAoX3JsX2tleW1hcFtrZXldLnR5cGUgPT0gSVNNQUNSKQorCXhm cmVlICgoY2hhciAqKV9ybF9rZXltYXBba2V5XS5mdW5jdGlvbik7CiAgICAgICBfcmxfa2V5bWFw W2tleV0udHlwZSA9IElTRlVOQzsKICAgICAgIF9ybF9rZXltYXBba2V5XS5mdW5jdGlvbiA9IGZ1 bmN0aW9uOwogICAgIH0KLS0gCjIuMjEuMAoK --0000000000002077580599fd26ad Content-Type: application/octet-stream; name="0003-rl_generic_bind-fix-memleak.patch" Content-Disposition: attachment; filename="0003-rl_generic_bind-fix-memleak.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k4bix80q2 RnJvbSA4NTZkOTZkYmNhNjFlMWI4MTc4Yzg1YjY1MGRkYmIyZWIyYjkyMTY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBLb2ljaGkgTXVyYXNlIDxteW9nYS5tdXJhc2VAZ21haWwuY29t PgpEYXRlOiBXZWQsIDE4IERlYyAyMDE5IDE5OjM2OjM5ICswODAwClN1YmplY3Q6IFtQQVRDSCAz LzNdIHJsX2dlbmVyaWNfYmluZDogZml4IG1lbWxlYWsKCi0tLQogbGliL3JlYWRsaW5lL2JpbmQu YyB8IDcgKysrLS0tLQogMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9saWIvcmVhZGxpbmUvYmluZC5jIGIvbGliL3JlYWRsaW5lL2Jp bmQuYwppbmRleCBjNDMwZDc5Zi4uNDc1Y2ZmNGMgMTAwNjQ0Ci0tLSBhL2xpYi9yZWFkbGluZS9i aW5kLmMKKysrIGIvbGliL3JlYWRsaW5lL2JpbmQuYwpAQCAtNDYyLDkgKzQ2Miw3IEBAIHJsX2dl bmVyaWNfYmluZCAoaW50IHR5cGUsIGNvbnN0IGNoYXIgKmtleXNlcSwgY2hhciAqZGF0YSwgS2V5 bWFwIG1hcCkKIAl9CiAgICAgICBlbHNlCiAJewotCSAgaWYgKG1hcFtpY10udHlwZSA9PSBJU01B Q1IpCi0JICAgIHhmcmVlICgoY2hhciAqKW1hcFtpY10uZnVuY3Rpb24pOwotCSAgZWxzZSBpZiAo bWFwW2ljXS50eXBlID09IElTS01BUCkKKwkgIGlmIChtYXBbaWNdLnR5cGUgPT0gSVNLTUFQKQog CSAgICB7CiAJICAgICAgcHJldm1hcCA9IG1hcDsKIAkgICAgICBtYXAgPSBGVU5DVElPTl9UT19L RVlNQVAgKG1hcCwgaWMpOwpAQCAtNDc4LDEyICs0NzYsMTMgQEAgcmxfZ2VuZXJpY19iaW5kIChp bnQgdHlwZSwgY29uc3QgY2hhciAqa2V5c2VxLCBjaGFyICpkYXRhLCBLZXltYXAgbWFwKQogCQlk YXRhID0gKGNoYXIgKilfcmxfbnVsbF9mdW5jdGlvbjsKIAkgICAgfQogCisJICBpZiAobWFwW2lj XS50eXBlID09IElTTUFDUikKKwkgICAgeGZyZWUgKChjaGFyICopbWFwW2ljXS5mdW5jdGlvbik7 CiAJICBtYXBbaWNdLmZ1bmN0aW9uID0gS0VZTUFQX1RPX0ZVTkNUSU9OIChkYXRhKTsKIAkgIG1h cFtpY10udHlwZSA9IHR5cGU7CiAJfQogCiAgICAgICBybF9iaW5kaW5nX2tleW1hcCA9IG1hcDsK LQogICAgIH0KIAogICAvKiBJZiB3ZSB1bmJvdW5kIGEga2V5ICh0eXBlID09IElTRlVOQywgZGF0 YSA9PSAwKSwgYW5kIHRoZSBwcmV2IGtleW1hcAotLSAKMi4yMS4wCgo= --0000000000002077580599fd26ad--