zsh-workers
 help / color / mirror / code / Atom feed
From: Thorsten Meinecke <kaefer@aglaia.snafu.de>
To: zsh-workers@math.gatech.edu
Subject: COMPLETE_IN_WORD dumps core if reserved word match
Date: Mon, 7 Aug 1995 13:51:33 +0200 (MET DST)	[thread overview]
Message-ID: <m0sfQiU-00007BC@aglaia.snafu.DE> (raw)
In-Reply-To: <m0scCmr-00007BC@aglaia.snafu.DE> from "Thorsten Meinecke" at Jul 29, 95 04:22:44 pm

I wrote, 
Subject: COMPLETE_IN_WORD dumps core if built-in functions match,

>   Starting program: /u/home/kaefer/wrk/zsh/zsh-2.6-beta10/Src/./zsh -f
>   aglaia:~/wrk/zsh/zsh-2.6-beta10/Src> setopt autolist completeinword 
>   aglaia:~/wrk/zsh/zsh-2.6-beta10/Src> rt
>                                         ^
> [cursor position is here, and completion requested]
> 
>   Program received signal SIGSEGV, Segmentation fault.
>   0x804ed39 in addmatch (s=0x8059424 "epeat", t=0x8059424 "epeat")
>       at zle_tricky.c:1524
>   1524                *e = '\0';
>   (gdb)
> 
> The obvious way around (at least for GCC) is to recompile with
> -fwritable-strings.

Digging a little further shows that only the list of 24 reserved
words is subject to this problem. We're attempting to modify
"string constants", which can't be done portably.

The fix is to copy these words, at the expense of a-hundred-and-a-
few bytes increased memory usage, as it was done in earlier releases.

This is still for zsh-2.6-beta10:


*** hashtable.c.orig	Sat Jul  1 00:06:17 1995
--- hashtable.c	Mon Aug  7 01:49:09 1995
***************
*** 441,454 ****
      reswdtab->printinfo = printhashtabinfo;
      reswdtab->tablename = ztrdup("reswdtab");
  #endif
  
!     /* Add the actual words, not copies, to the table, *
!      * as we do not expect to modify the table again.  */
      for (i = 0; reswds[i]; i++) {
  	struct reswd *ptr = (struct reswd *) zcalloc(sizeof *ptr);
  	ptr->cmd = i + DO;
! 	reswdtab->addnode(reswdtab, reswds[i], ptr);
      }
  }
  
  
--- 441,455 ----
      reswdtab->printinfo = printhashtabinfo;
      reswdtab->tablename = ztrdup("reswdtab");
  #endif
  
!     /* Add copies of the actual words to the table, as we do not *
!      * expect to modify the table permanently, but we do insert  *
!      * end-of-string markers for COMPLETE_IN_WORD temporarily    */
      for (i = 0; reswds[i]; i++) {
  	struct reswd *ptr = (struct reswd *) zcalloc(sizeof *ptr);
  	ptr->cmd = i + DO;
! 	reswdtab->addnode(reswdtab, ztrdup(reswds[i]), ptr);
      }
  }
  
  


  reply	other threads:[~1995-08-07 12:06 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1995-07-29 14:22 COMPLETE_IN_WORD dumps core if built-in functions match Thorsten Meinecke
1995-08-07 11:51 ` Thorsten Meinecke [this message]
1995-08-07 14:06   ` COMPLETE_IN_WORD dumps core if reserved word match Zoltan Hidvegi
1995-08-08 11:36   ` P.Stephenson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m0sfQiU-00007BC@aglaia.snafu.DE \
    --to=kaefer@aglaia.snafu.de \
    --cc=zsh-workers@math.gatech.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).