zsh-workers
 help / color / mirror / code / Atom feed
* Seg. Fault when calling "cd" with set "chpwd" hook from a widget
@ 2008-11-25  0:05 Jonas Kramer
  2008-11-25 18:36 ` Peter Stephenson
  2008-11-30  4:31 ` Bart Schaefer
  0 siblings, 2 replies; 5+ messages in thread
From: Jonas Kramer @ 2008-11-25  0:05 UTC (permalink / raw)
  To: zsh-workers

[-- Attachment #1: Type: text/plain, Size: 1227 bytes --]

Hi workers,

I've experienced a seg. fault in zsh when doing the following:

This is the widget:

# Control + B jumps to "base" directory.
function return-to-base; {
	if [[ ! -z "$BASE" ]]; then
		[[ -d "$BASE" ]] && cd "$BASE"
		zle reset-prompt
	fi
}

It's bound to key ^b.

Here's the chpwd function:

function chpwd; {
    DIRECTORY="$PWD"
    while true; do
        if [ -f './.env.rc' ]; then
            source './.env.rc'
            break
        fi
        if [ -f './env' ]; then
            source './env'
            break
        fi
        [ $PWD = '/' ] && break
        cd -q ..
    done
    cd -q "$DIRECTORY"
}

Now when BASE points to a directory that contains a .env.rc file and I
press ^B, it seems to work fine at first, the directory is updated and I
get a new nice prompt. But then, no matter what I enter, after hitting
return zsh crashes with a seg. fault. This seems to happen in
hist.c:1138, where hptr points to NULL at that point. I tried to fix it
myself, but I can't find a clean solution as I can't find the source of
the problem. Just checking for hptr being NULL in hend() would just fix
the symptom, not the cause I guess.

Regards,
Jonas
-- 

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Seg. Fault when calling "cd" with set "chpwd" hook from a widget
  2008-11-25  0:05 Seg. Fault when calling "cd" with set "chpwd" hook from a widget Jonas Kramer
@ 2008-11-25 18:36 ` Peter Stephenson
  2008-11-25 18:40   ` Peter Stephenson
  2008-11-30  4:31 ` Bart Schaefer
  1 sibling, 1 reply; 5+ messages in thread
From: Peter Stephenson @ 2008-11-25 18:36 UTC (permalink / raw)
  To: zsh-workers

On Tue, 25 Nov 2008 01:05:37 +0100
Jonas Kramer <jkramer@nex.scrapping.cc> wrote:
> Hi workers,
> 
> I've experienced a seg. fault in zsh when doing the following:
>...
> This seems to happen in
> hist.c:1138, where hptr points to NULL at that point. I tried to fix it
> myself, but I can't find a clean solution as I can't find the source of
> the problem. Just checking for hptr being NULL in hend() would just fix
> the symptom, not the cause I guess.

Actually, I think that's the right fix:  I recently moved the *hptr = '\0'
up to that point because in some cases chline gets accessed quite early,
but I didn't do the checks that are usually done before accessing it.

Index: Src/hist.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/hist.c,v
retrieving revision 1.85
diff -u -r1.85 hist.c
--- Src/hist.c	22 Sep 2008 08:47:01 -0000	1.85
+++ Src/hist.c	25 Nov 2008 18:34:28 -0000
@@ -1130,12 +1130,14 @@
      && (hist_ignore_all_dups = isset(HISTIGNOREALLDUPS)) != 0)
 	histremovedups();
 
-    /*
-     * Added the following in case the test "hptr < chline + 1"
-     * is more than just paranoia.
-     */
-    DPUTS(hptr < chline, "History end pointer off start of line");
-    *hptr = '\0';
+    if (hptr) {
+	/*
+	 * Added the following in case the test "hptr < chline + 1"
+	 * is more than just paranoia.
+	 */
+	DPUTS(hptr < chline, "History end pointer off start of line");
+	*hptr = '\0';
+    }
     addlinknode(hookargs, "zshaddhistory");
     addlinknode(hookargs, chline);
     callhookfunc("zshaddhistory", hookargs, 1, &hookret);


-- 
Peter Stephenson <pws@csr.com>                  Software Engineer
CSR PLC, Churchill House, Cambridge Business Park, Cowley Road
Cambridge, CB4 0WZ, UK                          Tel: +44 (0)1223 692070


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Seg. Fault when calling "cd" with set "chpwd" hook from a widget
  2008-11-25 18:36 ` Peter Stephenson
@ 2008-11-25 18:40   ` Peter Stephenson
  0 siblings, 0 replies; 5+ messages in thread
From: Peter Stephenson @ 2008-11-25 18:40 UTC (permalink / raw)
  To: zsh-workers

Peter Stephenson wrote:
> Actually, I think that's the right fix:  I recently moved the *hptr = '\0'
> up to that point because in some cases chline gets accessed quite early,
> but I didn't do the checks that are usually done before accessing it.

Hmm... actually, I'm not so sure on reinspection.  Probably needs deeper
investigation.

-- 
Peter Stephenson <pws@csr.com>                  Software Engineer
CSR PLC, Churchill House, Cambridge Business Park, Cowley Road
Cambridge, CB4 0WZ, UK                          Tel: +44 (0)1223 692070


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Seg. Fault when calling "cd" with set "chpwd" hook from a widget
  2008-11-25  0:05 Seg. Fault when calling "cd" with set "chpwd" hook from a widget Jonas Kramer
  2008-11-25 18:36 ` Peter Stephenson
@ 2008-11-30  4:31 ` Bart Schaefer
  2008-11-30 10:59   ` Jonas Kramer
  1 sibling, 1 reply; 5+ messages in thread
From: Bart Schaefer @ 2008-11-30  4:31 UTC (permalink / raw)
  To: zsh-workers

On Nov 25,  1:05am, Jonas Kramer wrote:
>
> # Control + B jumps to "base" directory.
> function return-to-base; {

Not directly pertinent, but what's the semicolon for?

> function chpwd; {
>     DIRECTORY="$PWD"
>     while true; do
>         if [ -f './.env.rc' ]; then
>             source './.env.rc'
>             break
>         fi
>         if [ -f './env' ]; then
>             source './env'
>             break
>         fi
>         [ $PWD = '/' ] && break
>         cd -q ..
>     done
>     cd -q "$DIRECTORY"
> }
> 
> Now when BASE points to a directory that contains a .env.rc file and I
> press ^B, it seems to work fine at first, the directory is updated and I
> get a new nice prompt. But then, no matter what I enter, after hitting
> return zsh crashes with a seg. fault. This seems to happen in
> hist.c:1138, where hptr points to NULL at that point.

Are there any commands in ./.env.rc or ./env that manipulate the history?


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Seg. Fault when calling "cd" with set "chpwd" hook from a widget
  2008-11-30  4:31 ` Bart Schaefer
@ 2008-11-30 10:59   ` Jonas Kramer
  0 siblings, 0 replies; 5+ messages in thread
From: Jonas Kramer @ 2008-11-30 10:59 UTC (permalink / raw)
  To: Bart Schaefer; +Cc: zsh-workers

[-- Attachment #1: Type: text/plain, Size: 1534 bytes --]

On Sat, Nov 29, 2008 at 08:31:35PM -0800, Bart Schaefer wrote:
> On Nov 25,  1:05am, Jonas Kramer wrote:
> >
> > # Control + B jumps to "base" directory.
> > function return-to-base; {
> 
> Not directly pertinent, but what's the semicolon for?

Now that you ask, I don't know. I guess I'm just used to it.

> 
> > function chpwd; {
> >     DIRECTORY="$PWD"
> >     while true; do
> >         if [ -f './.env.rc' ]; then
> >             source './.env.rc'
> >             break
> >         fi
> >         if [ -f './env' ]; then
> >             source './env'
> >             break
> >         fi
> >         [ $PWD = '/' ] && break
> >         cd -q ..
> >     done
> >     cd -q "$DIRECTORY"
> > }
> > 
> > Now when BASE points to a directory that contains a .env.rc file and I
> > press ^B, it seems to work fine at first, the directory is updated and I
> > get a new nice prompt. But then, no matter what I enter, after hitting
> > return zsh crashes with a seg. fault. This seems to happen in
> > hist.c:1138, where hptr points to NULL at that point.
> 
> Are there any commands in ./.env.rc or ./env that manipulate the history?

I don't know if commands executed in a chpwd hook function are added to
the history (they shouldn't in my oppinion), but I'm not explicitly
changing it in there. This is a sample .env.rc I'm using in a project:

	# vim:filetype=zsh

	export BASE=$PWD
	export PERL5LIB="$PWD/code/"

	/usr/bin/ctags --languages="Perl" -R "$PWD"

Regards,
Jonas

-- 

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2008-11-30 11:01 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-11-25  0:05 Seg. Fault when calling "cd" with set "chpwd" hook from a widget Jonas Kramer
2008-11-25 18:36 ` Peter Stephenson
2008-11-25 18:40   ` Peter Stephenson
2008-11-30  4:31 ` Bart Schaefer
2008-11-30 10:59   ` Jonas Kramer

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).