zsh-workers
 help / color / mirror / code / Atom feed
From: Bart Schaefer <schaefer@brasslantern.com>
To: zsh-workers@zsh.org
Subject: Re: buggy CSH_NULL_GLOB when a pattern is at the command position
Date: Fri, 1 Jan 2016 12:39:40 -0800	[thread overview]
Message-ID: <160101123940.ZM10365@torch.brasslantern.com> (raw)
In-Reply-To: <20160101040052.GA1808@zira.vinc17.org>

On Jan 1,  5:00am, Vincent Lefevre wrote:
}
} When CSH_NULL_GLOB is set and the command line contains only patterns,
} a "no match" error is not reported.

Hm.  So what's happening here is that the error is suppressed in zglob()
because it should only be reported if all globbing fails; but because
the command position is globbed separately from the rest of the line,
the caller is not expecting to handle this condition and glob failure
is interpreted as an empty command line.

You can see how this happens better if written this way:

torch% [] echo foo
foo

The [] is discarded because of cshnullglob, so "echo" is actually the
command.

The patch below fixes the case where all command-position globs fail,
although the error message is not the same as when cshnullglob is not set
(which has always been true in other cases, so probably not a big deal).

} Moreover, I wonder whether when a no-match pattern is at the
} command position, one should always get an error (if possible).

It's conceivable that somebody might actually *intend* the behavior in
my example above, though I don't know why.

} BTW, with older zsh versions, such as 5.0.7, [] was regarded
} as a bad pattern (instead of a pattern that doesn't match).
} Has this changed on purpose?

Seems so:

commit e86720190efc6550086e6a733394cb393cd0da4d
Author: Peter Stephenson <pws@zsh.org>
Date:   Fri May 15 09:35:24 2015 +0100

    35131: allow "[]" to match empty character set.


diff --git a/Src/exec.c b/Src/exec.c
index 18d19b6..352615c 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -2785,6 +2785,11 @@ execcmd(Estate state, int input, int output, int how, int last1)
 		     * arguments before and no command substitution
 		     * has provided a status.
 		     */
+		    if (badcshglob == 1) {
+			zerr("no match");
+			lastval = 1;
+			return;
+		    }
 		    cmdoutval = use_cmdoutval ? lastval : 0;
 		    if (varspc)
 			addvars(state, varspc, 0);


  reply	other threads:[~2016-01-01 20:39 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-01  4:00 Vincent Lefevre
2016-01-01 20:39 ` Bart Schaefer [this message]
2016-01-01 21:10   ` Bart Schaefer
2016-01-02  3:11     ` Bart Schaefer
2016-01-01 22:05   ` Vincent Lefevre

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=160101123940.ZM10365@torch.brasslantern.com \
    --to=schaefer@brasslantern.com \
    --cc=zsh-workers@zsh.org \
    /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).