Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: PATCH: Fix crash with bracketed-paste-magic and undo
Thanks a lot for the patch, Mikael! I’ve tested it successfully with
latest master on both x86_64 Fedora 44 and aarch64 Fedora Rawhide.
Regards,
Lukas
> On 17. 7. 2026, at 23:57, Mikael Magnusson <mikachu@xxxxxxxxx> wrote:
>
> In particular, fc -P/-p didn't interact well with undo. Make sure we
> store/restore histline across those calls.
>
> ---
>
> I think this should fix it, and hopefully not break anything else.
>
> BTW, if you don't need any of the crazy features in bracketed-paste-magic, I would
> recommend using bracketed-paste-url-magic instead.
>
> I also tried some old binaries I had lying around, the crash has happened at least
> since 5.3.
>
> Src/Zle/zle_main.c | 8 ++++++++
> Src/hist.c | 7 ++++++-
> Src/zsh.h | 1 +
> 3 files changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c
> index ea88a42475..cb226932b4 100644
> --- a/Src/Zle/zle_main.c
> +++ b/Src/Zle/zle_main.c
> @@ -2185,6 +2185,14 @@ zle_main_entry(int cmd, va_list ap)
> break;
> }
>
> + case ZLE_CMD_GET_HIST_LINE:
> + {
> + zlong *p = va_arg(ap, zlong *);
> + *p = histline;
> +
> + break;
> + }
> +
> case ZLE_CMD_PREEXEC:
> mark_output(1);
> break;
> diff --git a/Src/hist.c b/Src/hist.c
> index de21a4ff64..c353601bf0 100644
> --- a/Src/hist.c
> +++ b/Src/hist.c
> @@ -231,6 +231,7 @@ static struct histsave {
> HashTable histtab;
> Histent hist_ring;
> zlong curhist;
> + zlong histline;
> zlong histlinect;
> zlong histsiz;
> zlong savehistsiz;
> @@ -3873,6 +3874,10 @@ pushhiststack(char *hf, zlong hs, zlong shs, int level)
> h->histsiz = histsiz;
> h->savehistsiz = savehistsiz;
> h->locallevel = level;
> + if (zleactive)
> + zleentry(ZLE_CMD_GET_HIST_LINE, &h->histline);
> + else
> + h->histline = 0;
>
> memset(&lasthist, 0, sizeof lasthist);
> if (hf) {
> @@ -3925,7 +3930,7 @@ pophiststack(void)
> hist_ring = h->hist_ring;
> curhist = h->curhist;
> if (zleactive)
> - zleentry(ZLE_CMD_SET_HIST_LINE, curhist);
> + zleentry(ZLE_CMD_SET_HIST_LINE, h->histline);
> histlinect = h->histlinect;
> histsiz = h->histsiz;
> savehistsiz = h->savehistsiz;
> diff --git a/Src/zsh.h b/Src/zsh.h
> index c9dc413a21..29dbb5e692 100644
> --- a/Src/zsh.h
> +++ b/Src/zsh.h
> @@ -3239,6 +3239,7 @@ enum {
> ZLE_CMD_SET_KEYMAP,
> ZLE_CMD_GET_KEY,
> ZLE_CMD_SET_HIST_LINE,
> + ZLE_CMD_GET_HIST_LINE,
> ZLE_CMD_PREEXEC,
> ZLE_CMD_POSTEXEC,
> ZLE_CMD_CHPWD
> --
> 2.38.1
>
Messages sorted by:
Reverse Date,
Date,
Thread,
Author