From: hzoli@cs.elte.hu (Zoltan Hidvegi)
To: kaefer@aglaia.snafu.de (Thorsten Meinecke)
Subject: Re: SIGSEGV caused by global substitution modifier
Date: Fri, 7 Jul 1995 17:52:41 +0100 (MET DST) [thread overview]
Message-ID: <9507071553.AA16477@turan.elte.hu> (raw)
In-Reply-To: <m0sTskY-00000PC@aglaia.snafu.DE> from "Thorsten Meinecke" at Jul 6, 95 05:21:57 pm
Thorsten Meinecke wrote:
>
> Please have a look at this:
>
> $ zsh-2.6-beta5 -Fc 'FOO=123;echo $FOO:gs//bar/'
> bar
> $ zsh-2.6-beta10 -fc 'FOO=123;echo $FOO:gs//bar/'
> zsh: segmentation fault zsh-2.6-beta10 -fc 'FOO=123;echo $FOO:gs//bar/'
>
>
> $FOO:gs/// loops forever now, which is especially unpleasant (since
> not interruptible) when it occurs in completion control functions like
> P.Stephenson's new `multicomp'. This is how I noticed the problem.
>
> You might want to try `!??:gs///' on the command line, too. Don't.
>
> An empty left-hand side of a substitution has a special meaning
> ("use scan string or previous match"), right? Only if there's no
> non-empty scan string or previous match, the left-hand side evaluates
> to a null string, and zsh chokes.
>
>
> There's another (somewhat related) problem: Used on the result of
> parameter expansion, empty l strings of substitution modifiers don't
> produce the expected result:
>
> $ FOO=1213
> $ echo $FOO:s/1/a/:s//b/
> b
>
> I've expected `a2b3'. That is what `!:s/1/a/:s//b/' would give.
The patch below should fix all of your problems.
Bye,
Zoltan
rcsdiff -qc -kk -r1.12 -r1.13 Src/subst.c
*** 1.12 1995/07/04 18:33:00
--- Src/subst.c 1995/07/07 00:29:43
***************
*** 1460,1466 ****
case 's':
c = **ptr;
(*ptr)++;
- zsfree(hsubl);
zsfree(hsubr);
ptr1 = *ptr;
del = *ptr1++;
--- 1460,1465 ----
***************
*** 1473,1481 ****
for (ptr3 = ptr2; *ptr3 != del && *ptr3; ptr3++);
if ((sav = *ptr3))
*ptr3++ = '\0';
! for (tt = hsubl = ztrdup(ptr1); *tt; tt++)
! if (INULL(*tt))
! chuck(tt);
for (tt = hsubr = ztrdup(ptr2); *tt; tt++)
if (INULL(*tt))
chuck(tt);
--- 1472,1485 ----
for (ptr3 = ptr2; *ptr3 != del && *ptr3; ptr3++);
if ((sav = *ptr3))
*ptr3++ = '\0';
! if (*ptr1) {
! zsfree(hsubl);
! hsubl = ztrdup(ptr1);
! }
! if (hsubl)
! for (tt = hsubl; *tt; tt++)
! if (INULL(*tt))
! chuck(tt);
for (tt = hsubr = ztrdup(ptr2); *tt; tt++)
if (INULL(*tt))
chuck(tt);
rcsdiff -qc -kk -r1.3 -r1.4 Src/hist.c
*** 1.3 1995/07/06 12:25:26
--- Src/hist.c 1995/07/07 00:29:43
***************
*** 881,887 ****
int off, inlen, outlen;
if (!*in)
! in = str;
if (!(substcut = (char *)strstr(str, in)))
return;
inlen = strlen(in);
--- 881,887 ----
int off, inlen, outlen;
if (!*in)
! in = str, gbal = 0;
if (!(substcut = (char *)strstr(str, in)))
return;
inlen = strlen(in);
prev parent reply other threads:[~1995-07-07 15:58 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
1995-07-06 15:21 Thorsten Meinecke
1995-07-07 16:52 ` Zoltan Hidvegi [this message]
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=9507071553.AA16477@turan.elte.hu \
--to=hzoli@cs.elte.hu \
--cc=kaefer@aglaia.snafu.de \
/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).