zsh-workers
 help / color / mirror / code / Atom feed
* Core dump in 3.0.3-test5
@ 1997-05-11 18:21 Bart Schaefer
  1997-05-12  8:02 ` Zoltan Hidvegi
  0 siblings, 1 reply; 5+ messages in thread
From: Bart Schaefer @ 1997-05-11 18:21 UTC (permalink / raw)
  To: zsh-workers

zagzig<1> mv zsh-3.0.3-test5 !#:^-tmp
zsh: no such event: 1
zagzig<2> mv zsh-3.0.3-test5 !#:^-tmp
mv zsh-3.0.3-test5 zsh-3.0.3-test5 tmp
zsh: segmentation fault (core dumped)  ./zsh

(gdb) where
#0  0x80748a1 in taddstr (s=0xe1944 <Address 0xe1944 out of bounds>)
    at ../../zsh-3.0.3-test5/Src/text.c:61
#1  0x80753f9 in taddlist (l=0x80e1814) at ../../zsh-3.0.3-test5/Src/text.c:510
#2  0x80752d2 in getsimptext (cmd=0x80e17f4)
    at ../../zsh-3.0.3-test5/Src/text.c:446
#3  0x8074c66 in gettext2 (n=0x80e17f4) at ../../zsh-3.0.3-test5/Src/text.c:203
#4  0x8074a6e in getjobtext (n=0x80e17f4)
    at ../../zsh-3.0.3-test5/Src/text.c:134
#5  0x8054f2f in execpline2 (pline=0x80e1c88, how=2, input=0, output=0, 
    last1=0) at ../../zsh-3.0.3-test5/Src/exec.c:799
#6  0x8054a9a in execpline (l=0x80e17e0, how=2, last1=0)
    at ../../zsh-3.0.3-test5/Src/exec.c:647
#7  0x805479c in execlist (list=0x80e1c98, dont_change_job=0, exiting=0)
    at ../../zsh-3.0.3-test5/Src/exec.c:527
#8  0x8061758 in loop (toplevel=1) at ../../zsh-3.0.3-test5/Src/init.c:128
#9  0x8061627 in main (argc=1, argv=0xbffffc0c)
    at ../../zsh-3.0.3-test5/Src/init.c:77
#10 0x80480eb in _start ()

-- 
Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts        http://www.nbn.com/people/lantern


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

* Re: Core dump in 3.0.3-test5
  1997-05-11 18:21 Core dump in 3.0.3-test5 Bart Schaefer
@ 1997-05-12  8:02 ` Zoltan Hidvegi
  1997-05-12  8:58   ` Peter Stephenson
  1997-05-12 17:41   ` Core dump in 3.0.3-test5 Bart Schaefer
  0 siblings, 2 replies; 5+ messages in thread
From: Zoltan Hidvegi @ 1997-05-12  8:02 UTC (permalink / raw)
  To: Zsh hacking and development

> zagzig<1> mv zsh-3.0.3-test5 !#:^-tmp
> zsh: no such event: 1
> zagzig<2> mv zsh-3.0.3-test5 !#:^-tmp
> mv zsh-3.0.3-test5 zsh-3.0.3-test5 tmp
> zsh: segmentation fault (core dumped)  ./zsh

Fix is below.  You may not like this fix:

% echo foo !:^-bar
zsh: no such word in event

Some explanation.  When !:^-bar is expanded, there is still only `echo foo'
stored in the history. ^- selects everything from the first argument except
the last one, which means 1-0 range in this case, which is invalid.  And
the new behaviour is tcsh compatible.  Before this patch zsh corrupted
memory on all !:a-b substitution when `b' was less than `a'.  The real fix
is the first hunk, the second hunk is just a cosmetic optimisation change.

Zoltan


*** Src/hist.c	1997/05/11 06:42:21	3.1.2.4
--- Src/hist.c	1997/05/12 07:48:55
***************
*** 1153,1163 ****
  char *
  getargs(Histent elist, int arg1, int arg2)
  {
-     char *ret;
      short *words = elist->words;
      int pos1, nwords = elist->nwords;
  
!     if (arg1 >= nwords || arg2 >= nwords) {
  	/* remember, argN is indexed from 0, nwords is total no. of words */
  	inerrflush();
  	zerr("no such word in event", NULL, 0);
--- 1153,1162 ----
  char *
  getargs(Histent elist, int arg1, int arg2)
  {
      short *words = elist->words;
      int pos1, nwords = elist->nwords;
  
!     if (arg2 < arg1 || arg1 >= nwords || arg2 >= nwords) {
  	/* remember, argN is indexed from 0, nwords is total no. of words */
  	inerrflush();
  	zerr("no such word in event", NULL, 0);
***************
*** 1165,1174 ****
      }
  
      pos1 = words[2*arg1];
!     ret = dupstring(elist->text + pos1);
!     ret[words[2*arg2+1] - pos1] = '\0';
!     
!     return ret;
  }
  
  /**/
--- 1164,1170 ----
      }
  
      pos1 = words[2*arg1];
!     return dupstrpfx(elist->text + pos1, words[2*arg2+1] - pos1);
  }
  
  /**/


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

* Re: Core dump in 3.0.3-test5
  1997-05-12  8:02 ` Zoltan Hidvegi
@ 1997-05-12  8:58   ` Peter Stephenson
  1997-05-12  9:25     ` Oops (was Re: Core dump in 3.0.3-test5) Peter Stephenson
  1997-05-12 17:41   ` Core dump in 3.0.3-test5 Bart Schaefer
  1 sibling, 1 reply; 5+ messages in thread
From: Peter Stephenson @ 1997-05-12  8:58 UTC (permalink / raw)
  To: Zsh hackers list

Zoltan Hidvegi wrote:
> > zagzig<1> mv zsh-3.0.3-test5 !#:^-tmp
> > zsh: no such event: 1
> > zagzig<2> mv zsh-3.0.3-test5 !#:^-tmp
> > mv zsh-3.0.3-test5 zsh-3.0.3-test5 tmp
> > zsh: segmentation fault (core dumped)  ./zsh
> 
> Fix is below.  You may not like this fix:

There's another aspect to this, at least in 3.1.x after the latest
history reorganisation.  They symptom is that you get the previous
line instead of the current one with any !# in completion.  The short
story is that I made non-interactive history expansions as in
completion too different from the interactive sort.  The following
simplification will fix things up.  It makes the counting of curhist
more logical, too.

*** Src/hist.c.has	Fri May  9 11:29:08 1997
--- Src/hist.c	Mon May 12 10:36:29 1997
***************
*** 44,50 ****
  #define HA_ACTIVE	(1<<0)	/* History mechanism is active */
  #define HA_NOSTORE	(1<<1)	/* Don't store the line when finished */
  #define HA_JUNKED	(1<<2)	/* Last history line was already junked */
- #define HA_NOINC	(1<<3)	/* Don't store, curhist not incremented */
  
  extern int cs, ll;
  
--- 44,49 ----
***************
*** 567,579 ****
      curhistent = gethistent(curhist);
      if (!curhistent->ftim)
  	curhistent->ftim = time(NULL);
      if (interact && isset(SHINSTDIN) && !strin) {
  	attachtty(mypgrp);
- 	defev = curhist;
- 	histactive = HA_ACTIVE;
- 	curhist++;
      } else
! 	histactive = HA_NOINC;
  }
  
  /* compare current line with history entry using only text in words */
--- 566,578 ----
      curhistent = gethistent(curhist);
      if (!curhistent->ftim)
  	curhistent->ftim = time(NULL);
+     defev = curhist;
+     histactive = HA_ACTIVE;
+     curhist++;
      if (interact && isset(SHINSTDIN) && !strin) {
  	attachtty(mypgrp);
      } else
! 	histactive |= HA_NOSTORE;
  }
  
  /* compare current line with history entry using only text in words */
***************
*** 638,649 ****
      int flag, save = 1;
  
      DPUTS(!chline, "BUG: chline is NULL in hend()");
!     if (histactive & (HA_NOSTORE|HA_NOINC)) {
  	zfree(chline, hlinesz);
  	zfree(chwords, chwordlen*sizeof(short));
  	chline = NULL;
! 	if (!(histactive & HA_NOINC))
! 	    curhist--;
  	histactive = 0;
  	return 1;
      }
--- 637,647 ----
      int flag, save = 1;
  
      DPUTS(!chline, "BUG: chline is NULL in hend()");
!     if (histactive & HA_NOSTORE) {
  	zfree(chline, hlinesz);
  	zfree(chwords, chwordlen*sizeof(short));
  	chline = NULL;
! 	curhist--;
  	histactive = 0;
  	return 1;
      }
***************
*** 762,771 ****
  	chwordpos--;	/* make sure we're on a word start, not end */
      /* If we're expanding an alias, we should overwrite the expansion
       * in the history.
-      * If we're in a string, we don't need the full history line
-      * and can overwrite also.
       */
!     if (((inbufflags & INP_ALIAS) || strin) && !(inbufflags & INP_HIST))
  	hwgetword = chwordpos;
      else
  	hwgetword = -1;
--- 760,767 ----
  	chwordpos--;	/* make sure we're on a word start, not end */
      /* If we're expanding an alias, we should overwrite the expansion
       * in the history.
       */
!     if ((inbufflags & INP_ALIAS) && !(inbufflags & INP_HIST))
  	hwgetword = chwordpos;
      else
  	hwgetword = -1;

-- 
Peter Stephenson <pws@ifh.de>       Tel: +49 33762 77366
WWW:  http://www.ifh.de/~pws/       Fax: +49 33762 77413
Deutsches Elektronen-Synchrotron --- Institut fuer Hochenergiephysik Zeuthen
DESY-IfH, 15735 Zeuthen, Germany.


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

* Oops (was Re: Core dump in 3.0.3-test5)
  1997-05-12  8:58   ` Peter Stephenson
@ 1997-05-12  9:25     ` Peter Stephenson
  0 siblings, 0 replies; 5+ messages in thread
From: Peter Stephenson @ 1997-05-12  9:25 UTC (permalink / raw)
  To: Zsh hackers list

Peter Stephenson (moi) wrote:
> There's another aspect to this, at least in 3.1.x after the latest
> history reorganisation.

I've just remembered why I needed HA_NOINC and it's still necessary.
Otherwise, when you do !!<TAB>, it thinks you want the line before
last.  Try _this_ more minimal (grammar??) patch instead.

*** Src/hist.c.has	Fri May  9 11:29:08 1997
--- Src/hist.c	Mon May 12 11:18:57 1997
***************
*** 567,579 ****
      curhistent = gethistent(curhist);
      if (!curhistent->ftim)
  	curhistent->ftim = time(NULL);
      if (interact && isset(SHINSTDIN) && !strin) {
  	attachtty(mypgrp);
  	defev = curhist;
- 	histactive = HA_ACTIVE;
  	curhist++;
      } else
! 	histactive = HA_NOINC;
  }
  
  /* compare current line with history entry using only text in words */
--- 567,579 ----
      curhistent = gethistent(curhist);
      if (!curhistent->ftim)
  	curhistent->ftim = time(NULL);
+     histactive = HA_ACTIVE;
      if (interact && isset(SHINSTDIN) && !strin) {
  	attachtty(mypgrp);
  	defev = curhist;
  	curhist++;
      } else
! 	histactive |= HA_NOINC;
  }
  
  /* compare current line with history entry using only text in words */
***************
*** 762,771 ****
  	chwordpos--;	/* make sure we're on a word start, not end */
      /* If we're expanding an alias, we should overwrite the expansion
       * in the history.
-      * If we're in a string, we don't need the full history line
-      * and can overwrite also.
       */
!     if (((inbufflags & INP_ALIAS) || strin) && !(inbufflags & INP_HIST))
  	hwgetword = chwordpos;
      else
  	hwgetword = -1;
--- 762,769 ----
  	chwordpos--;	/* make sure we're on a word start, not end */
      /* If we're expanding an alias, we should overwrite the expansion
       * in the history.
       */
!     if ((inbufflags & INP_ALIAS) && !(inbufflags & INP_HIST))
  	hwgetword = chwordpos;
      else
  	hwgetword = -1;

-- 
Peter Stephenson <pws@ifh.de>       Tel: +49 33762 77366
WWW:  http://www.ifh.de/~pws/       Fax: +49 33762 77413
Deutsches Elektronen-Synchrotron --- Institut fuer Hochenergiephysik Zeuthen
DESY-IfH, 15735 Zeuthen, Germany.


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

* Re: Core dump in 3.0.3-test5
  1997-05-12  8:02 ` Zoltan Hidvegi
  1997-05-12  8:58   ` Peter Stephenson
@ 1997-05-12 17:41   ` Bart Schaefer
  1 sibling, 0 replies; 5+ messages in thread
From: Bart Schaefer @ 1997-05-12 17:41 UTC (permalink / raw)
  To: Zsh hacking and development

On May 12,  4:02am, Zoltan Hidvegi wrote:
} Subject: Re: Core dump in 3.0.3-test5
}
} > zagzig<2> mv zsh-3.0.3-test5 !#:^-tmp
} > mv zsh-3.0.3-test5 zsh-3.0.3-test5 tmp
} > zsh: segmentation fault (core dumped)  ./zsh
} 
} Fix is below.  You may not like this fix:
} 
} % echo foo !:^-bar
} zsh: no such word in event

That's fine.  What I had meant to type was !{#:^}-tmp anyway.

-- 
Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts        http://www.nbn.com/people/lantern


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

end of thread, other threads:[~1997-05-12 17:55 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1997-05-11 18:21 Core dump in 3.0.3-test5 Bart Schaefer
1997-05-12  8:02 ` Zoltan Hidvegi
1997-05-12  8:58   ` Peter Stephenson
1997-05-12  9:25     ` Oops (was Re: Core dump in 3.0.3-test5) Peter Stephenson
1997-05-12 17:41   ` Core dump in 3.0.3-test5 Bart Schaefer

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).