> > The following change should fix this. > --- > Ref: https://lists.gnu.org/archive/html/bug-bash/2025-08/msg00080.html > > lib/readline/isearch.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/lib/readline/isearch.c b/lib/readline/isearch.c > index 241e2ee0..104835d9 100644 > --- a/lib/readline/isearch.c > +++ b/lib/readline/isearch.c > @@ -910,13 +910,15 @@ opcode_dispatch: > int > _rl_isearch_cleanup (_rl_search_cxt *cxt, int r) > { > + /* Unset RL_STATE_ISEARCH now to avoid _rl_state_sigcleanup calling us if a > + signal is received while _rl_isearch_fini is calling rl_clear_message */ > + RL_UNSETSTATE(RL_STATE_ISEARCH); > + > if (r >= 0) > _rl_isearch_fini (cxt); > _rl_scxt_dispose (cxt, 0); > _rl_iscxt = 0; > > - RL_UNSETSTATE(RL_STATE_ISEARCH); > - > return (r != 0); > } >
I’ve applied your patch and tried again. Now it does this ``` This is workbench@ArchLinux: ~/works/bash $ ^C This is workbench@ArchLinux: ~/works/bash $ ^C This is workbench@ArchLinux: ~/works/bash ================================================================= ==1027392==ERROR: AddressSanitizer: heap-use-after-free on address 0x7c8e067e262c at pc 0x55f22402f88c bp 0x7ffe259e3790 sp 0x7ffe259e3780 WRITE of size 4 at 0x7c8e067e262c thread T0 #0 0x55f22402f88b in _rl_search_getchar /home/arch/works/bash/lib/readline/isearch.c:322 #1 0x55f224035621 in rl_search_history /home/arch/works/bash/lib/readline/isearch.c:927 #2 0x55f22402e86d in rl_reverse_search_history /home/arch/works/bash/lib/readline/isearch.c:135 #3 0x55f223ffdc6a in _rl_dispatch_subseq /home/arch/works/bash/lib/readline/readline.c:941 #4 0x55f223ffd812 in _rl_dispatch /home/arch/works/bash/lib/readline/readline.c:876 #5 0x55f223ffccbc in readline_internal_char /home/arch/works/bash/lib/readline/readline.c:690 #6 0x55f223ffd0e0 in readline_internal_charloop /home/arch/works/bash/lib/readline/readline.c:737 #7 0x55f223ffd100 in readline_internal /home/arch/works/bash/lib/readline/readline.c:749 #8 0x55f223ffc059 in readline /home/arch/works/bash/lib/readline/readline.c:387 #9 0x55f223e30142 in yy_readline_get /usr/local/src/chet/src/bash/src/parse.y:1680 #10 0x55f223e2ffa0 in yy_getc /usr/local/src/chet/src/bash/src/parse.y:1610 #11 0x55f223e327fe in shell_getc /usr/local/src/chet/src/bash/src/parse.y:2551 #12 0x55f223e36256 in read_token /usr/local/src/chet/src/bash/src/parse.y:3612 #13 0x55f223e34a04 in yylex /usr/local/src/chet/src/bash/src/parse.y:3078 #14 0x55f223e26882 in yyparse /home/arch/works/bash/y.tab.c:1912 #15 0x55f223e25d81 in parse_command /home/arch/works/bash/eval.c:369 #16 0x55f223e2601f in read_command /home/arch/works/bash/eval.c:414 #17 0x55f223e24921 in reader_loop /home/arch/works/bash/eval.c:147 #18 0x55f223e1f9a8 in main /home/arch/works/bash/shell.c:834 #19 0x7f9e07a27674 (/usr/lib/libc.so.6+0x27674) (BuildId: 4fe011c94a88e8aeb6f2201b9eb369f42b4a1e9e) #20 0x7f9e07a27728 in __libc_start_main (/usr/lib/libc.so.6+0x27728) (BuildId: 4fe011c94a88e8aeb6f2201b9eb369f42b4a1e9e) #21 0x55f223e1e0f4 in _start (/home/arch/works/bash/bash+0x970f4) (BuildId: cabc36c73ce45591bb91e5488fe26f4482eaa77e) 0x7c8e067e262c is located 108 bytes inside of 168-byte region [0x7c8e067e25c0,0x7c8e067e2668) freed by thread T0 here: #0 0x7f9e07f1f79d in free /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:51 #1 0x55f223f6e390 in xfree /home/arch/works/bash/xmalloc.c:153 #2 0x55f22402e849 in _rl_scxt_dispose /home/arch/works/bash/lib/readline/isearch.c:127 #3 0x55f2240354ea in _rl_isearch_cleanup /home/arch/works/bash/lib/readline/isearch.c:898 #4 0x55f224048a96 in _rl_state_sigcleanup /home/arch/works/bash/lib/readline/signals.c:599 #5 0x55f224048bbd in rl_free_line_state /home/arch/works/bash/lib/readline/signals.c:616 #6 0x55f2240479db in _rl_handle_signal /home/arch/works/bash/lib/readline/signals.c:221 #7 0x55f224047815 in _rl_signal_handler /home/arch/works/bash/lib/readline/signals.c:152 #8 0x55f224052c7b in rl_read_key /home/arch/works/bash/lib/readline/input.c:825 #9 0x55f22402f84d in _rl_search_getchar /home/arch/works/bash/lib/readline/isearch.c:322 #10 0x55f224035621 in rl_search_history /home/arch/works/bash/lib/readline/isearch.c:927 #11 0x55f22402e86d in rl_reverse_search_history /home/arch/works/bash/lib/readline/isearch.c:135 #12 0x55f223ffdc6a in _rl_dispatch_subseq /home/arch/works/bash/lib/readline/readline.c:941 #13 0x55f223ffd812 in _rl_dispatch /home/arch/works/bash/lib/readline/readline.c:876 #14 0x55f223ffccbc in readline_internal_char /home/arch/works/bash/lib/readline/readline.c:690 #15 0x55f223ffd0e0 in readline_internal_charloop /home/arch/works/bash/lib/readline/readline.c:737 #16 0x55f223ffd100 in readline_internal /home/arch/works/bash/lib/readline/readline.c:749 #17 0x55f223ffc059 in readline /home/arch/works/bash/lib/readline/readline.c:387 #18 0x55f223e30142 in yy_readline_get /usr/local/src/chet/src/bash/src/parse.y:1680 #19 0x55f223e2ffa0 in yy_getc /usr/local/src/chet/src/bash/src/parse.y:1610 #20 0x55f223e327fe in shell_getc /usr/local/src/chet/src/bash/src/parse.y:2551 #21 0x55f223e36256 in read_token /usr/local/src/chet/src/bash/src/parse.y:3612 #22 0x55f223e34a04 in yylex /usr/local/src/chet/src/bash/src/parse.y:3078 #23 0x55f223e26882 in yyparse /home/arch/works/bash/y.tab.c:1912 #24 0x55f223e25d81 in parse_command /home/arch/works/bash/eval.c:369 #25 0x55f223e2601f in read_command /home/arch/works/bash/eval.c:414 #26 0x55f223e24921 in reader_loop /home/arch/works/bash/eval.c:147 #27 0x55f223e1f9a8 in main /home/arch/works/bash/shell.c:834 #28 0x7f9e07a27674 (/usr/lib/libc.so.6+0x27674) (BuildId: 4fe011c94a88e8aeb6f2201b9eb369f42b4a1e9e) #29 0x7f9e07a27728 in __libc_start_main (/usr/lib/libc.so.6+0x27728) (BuildId: 4fe011c94a88e8aeb6f2201b9eb369f42b4a1e9e) previously allocated by thread T0 here: #0 0x7f9e07f20cb5 in malloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:67 #1 0x55f223f6e15c in xmalloc /home/arch/works/bash/xmalloc.c:104 #2 0x55f22402e0b9 in _rl_scxt_alloc /home/arch/works/bash/lib/readline/isearch.c:84 #3 0x55f22402eac6 in _rl_isearch_init /home/arch/works/bash/lib/readline/isearch.c:212 #4 0x55f22403554d in rl_search_history /home/arch/works/bash/lib/readline/isearch.c:915 #5 0x55f22402e86d in rl_reverse_search_history /home/arch/works/bash/lib/readline/isearch.c:135 #6 0x55f223ffdc6a in _rl_dispatch_subseq /home/arch/works/bash/lib/readline/readline.c:941 #7 0x55f223ffd812 in _rl_dispatch /home/arch/works/bash/lib/readline/readline.c:876 #8 0x55f223ffccbc in readline_internal_char /home/arch/works/bash/lib/readline/readline.c:690 #9 0x55f223ffd0e0 in readline_internal_charloop /home/arch/works/bash/lib/readline/readline.c:737 #10 0x55f223ffd100 in readline_internal /home/arch/works/bash/lib/readline/readline.c:749 #11 0x55f223ffc059 in readline /home/arch/works/bash/lib/readline/readline.c:387 #12 0x55f223e30142 in yy_readline_get /usr/local/src/chet/src/bash/src/parse.y:1680 #13 0x55f223e2ffa0 in yy_getc /usr/local/src/chet/src/bash/src/parse.y:1610 #14 0x55f223e327fe in shell_getc /usr/local/src/chet/src/bash/src/parse.y:2551 #15 0x55f223e36256 in read_token /usr/local/src/chet/src/bash/src/parse.y:3612 #16 0x55f223e34a04 in yylex /usr/local/src/chet/src/bash/src/parse.y:3078 #17 0x55f223e26882 in yyparse /home/arch/works/bash/y.tab.c:1912 #18 0x55f223e25d81 in parse_command /home/arch/works/bash/eval.c:369 #19 0x55f223e2601f in read_command /home/arch/works/bash/eval.c:414 #20 0x55f223e24921 in reader_loop /home/arch/works/bash/eval.c:147 #21 0x55f223e1f9a8 in main /home/arch/works/bash/shell.c:834 #22 0x7f9e07a27674 (/usr/lib/libc.so.6+0x27674) (BuildId: 4fe011c94a88e8aeb6f2201b9eb369f42b4a1e9e) #23 0x7f9e07a27728 in __libc_start_main (/usr/lib/libc.so.6+0x27728) (BuildId: 4fe011c94a88e8aeb6f2201b9eb369f42b4a1e9e) #24 0x55f223e1e0f4 in _start (/home/arch/works/bash/bash+0x970f4) (BuildId: cabc36c73ce45591bb91e5488fe26f4482eaa77e) SUMMARY: AddressSanitizer: heap-use-after-free /home/arch/works/bash/lib/readline/isearch.c:322 in _rl_search_getchar Shadow bytes around the buggy address: 0x7c8e067e2380: fd fd fd fa fa fa fa fa fa fa fa fa fd fd fd fd 0x7c8e067e2400: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd 0x7c8e067e2480: fd fa fa fa fa fa fa fa fa fa fd fd fd fd fd fd 0x7c8e067e2500: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fa 0x7c8e067e2580: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd =>0x7c8e067e2600: fd fd fd fd fd[fd]fd fd fd fd fd fd fd fa fa fa 0x7c8e067e2680: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x7c8e067e2700: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x7c8e067e2780: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x7c8e067e2800: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x7c8e067e2880: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa Shadow byte legend (one shadow byte represents 8 application bytes): Addressable: 00 Partially addressable: 01 02 03 04 05 06 07 Heap left redzone: fa Freed heap region: fd Stack left redzone: f1 Stack mid redzone: f2 Stack right redzone: f3 Stack after return: f5 Stack use after scope: f8 Global redzone: f9 Global init order: f6 Poisoned by user: f7 Container overflow: fc Array cookie: ac Intra object redzone: bb ASan internal: fe Left alloca redzone: ca Right alloca redzone: cb ==1027392==ABORTING ```