Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: [BUG] sigsegv
The error occurs with patch. I've played around in gdb:
(gdb) p (int)(e-hstr)
$65 = -31903
This should be positive – e points to a \0 inserted in hstr. That's
why printing e shows unexpected values. How come wend became negative?
On Sun, 30 Apr 2023 at 17:31, Peter Stephenson
<p.w.stephenson@xxxxxxxxxxxx> wrote:
>
> On Sat, 2023-04-29 at 10:52 +0000, Sebastian Gniazdowski wrote:
> > It says "incomplete sequence \339" although egrep $'\330' ~/.zhistory
> > doesn't return anything…
>
> So it looks like this is probably confusion over bad or incomplete
> multibyte characters again.
>
> Rather than bufferwords() --- I think that's not relevant at this point
> --- this could be the code that reads a history line back into the buffer
> and divides it into words getting confused. This is different from
> the code that adds to a history line when it's first generated and
> likely to be less accurate --- and also fits better with the
> reproducibility of this problem.
>
> Anyway, given there's no single place where the line originates,
> and given that we're probably not going to be able to turn it into
> a proper line if the there's not a complete character sequence,
> safety at the point in question is probably the best we've got.
>
> See if this helps.
>
> pws
>
> diff --git a/Src/Modules/parameter.c b/Src/Modules/parameter.c
> index 96a211c69..2067f5bab 100644
> --- a/Src/Modules/parameter.c
> +++ b/Src/Modules/parameter.c
> @@ -1233,9 +1233,16 @@ histwgetfn(UNUSED(Param pm))
> pushnode(l, getdata(n));
>
> while (he) {
> + char *hstr = he->node.nam;
> + int len = strlen(hstr);
> for (iw = he->nwords - 1; iw >= 0; iw--) {
> - h = he->node.nam + he->words[iw * 2];
> - e = he->node.nam + he->words[iw * 2 + 1];
> + int wbegin = he->words[iw * 2];
> + int wend = he->words[iw * 2 + 1];
> +
> + if (wbegin >= len || wend > len)
> + break;
> + h = hstr + wbegin;
> + e = hstr + wend;
> sav = *e;
> *e = '\0';
> addlinknode(l, dupstring(h));
>
>
--
Best regards,
Sebastian Gniazdowski
Messages sorted by:
Reverse Date,
Date,
Thread,
Author