Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: PATCH: Seg. fault in chpwd hook in a widget



On Mar 9, 11:22am, Peter Stephenson wrote:
} Subject: PATCH: Seg. fault in chpwd hook in a widget
}
} Just had a look at the Sourforge bug tracker, which normally I don't
} have time to do (please feel free to forward things to the list if you
} notice anything there which appears to be reproducible and hasn't been
} fixed); issue 2338948 is this:

This was originally on zsh-workers, thread starting at 26089.  You even
answered with a patch in 26091, which was applied 2008-11-25 or so says
the ChangeLog, but you followed *that* by saying it might need deeper
inspection.

} This is an interesting interaction of different levels of the shell.  I
} think a key part of it is the "source".  It seems that hbegin() in here
} is trashing the current history line chline.  It seems to me that we
} should only be calling hbegin() after a lexsave(), to protect against
} this, and there appears to be nothing in the call to loop() from
} source() that does that.

I think you're right about lexsave(), although history has never really
been my bit of the code [to the extent that I "have" any bit at all].
Wayne may have some input.
 
} I'm quite surpsised we've never seen anything like this before; there
} seems to be no protection against chline being trashed by any old
} "source" or "." that comes along.  As far as I can see, lexsave() is the
} only way of doing this.  I think the answer is that most of the time the
} history mechanism has exited by this time, so chline is already NULL and
} its friends aren't being used.

So why *hasn't* the history mechanism exited by the time chpwd is
called?  Aha; it's not direclty because of "source", it's because he's
calling "cd" from inside a ZLE widget.  The hooks are invoked in a
context from which they were never meant to be invoked.

So your lexsave()/lexrestore() is probably the correct thing, but there
may be other consequences of hook/widget interaction still waiting to
bite us for other hooks.
 
} Obviously any alternative opinions would be useful.  Currently that
} means Bart, but both of us would be very interested in getting new
} apprentice source code gurus...

Leak some of that sentiment onto zsh-users.  Maybe potential apprentices
just aren't reading -workers.



Messages sorted by: Reverse Date, Date, Thread, Author